django 实现编写控制登录和访问权限控制的中间件方法


Posted in Python onJanuary 15, 2019

django中,很多时候我们都需要有一个地方来进行更加详细的权限控制,例如说哪些用户可以访问哪些页面,检查登录状态等,这里的话就涉及到了中间件的编写了。

在django项目下的setting.py文件中,有一个MIDDLEWARE_CLASSES的字段,这里存放的就是中间件,用户的访问会先经过这些中间件的处理之后再给各种views函数进行处理。在这个参数中加入我们接下来要编写的中间件:

MIDDLEWARE_CLASSES = (
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  #'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'django.middleware.security.SecurityMiddleware',
  'myTransport.views.ExteriorAuthMiddleware',
)

接下来实现:

class ExteriorAuthMiddleware(object):
  #判断登录 权限控制
	def process_request(self,request):
		if request.method == 'GET':
			requestData = request.GET
		else:
			requestData = request.POST		
		request.session['errmsg']=''
		#如果用户没有认证,需要转到登录界面
		if not request.session.has_key('_auth_user_id') and 'login' not in request.path:
			return HttpResponseRedirect('/login/')
		#如果用户已经登录
		elif request.session.has_key('_auth_user_id') and 'logout' not in request.path:
			###权限检验
			try:
				u=User.objects.get(username=request.user)
				#判断token是否过期
				if u.usertoken_set.all():
					if u.usertoken_set.all()[0].token != request.session['Token']:
						logger.error("token 不一致!")
						return HttpResponseRedirect('/login/')
				else:
					logger.error("获取不到token!")
					return HttpResponseRedirect('/login/')
 
				url=request.META['PATH_INFO']
				print request.get_full_path()
				#判断用户是否有某些页面的访问权限,如果没有,转到404页面
				if not u.is_superuser:
					if url.startswith('/transport/user_') or url.startswith('/log/'):
						return error403(request, "权限不够!")
			except Exception,e:
				logger.error("in function process_request :"+ str(e))
				return HttpResponseRedirect('/login/')
		#用户已登录,而且url是login,将转到首页
		if request.session.has_key('_auth_user_id') and 'login' in request.path:
			return HttpResponseRedirect('/index/')

以上只是个简单的示例。

这篇django 实现编写控制登录和访问权限控制的中间件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
详解Python中的循环语句的用法
Apr 09 Python
python插入排序算法实例分析
Jul 03 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
Oct 15 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
Python实现AI换脸功能
Apr 10 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
Python爬虫之爬取最新更新的小说网站
May 06 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 #Python
Python3中lambda表达式与函数式编程讲解
Jan 14 #Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 #Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 #Python
python 根据时间来生成唯一的字符串方法
Jan 14 #Python
python ipset管理 增删白名单的方法
Jan 14 #Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 #Python
You might like
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
js 分栏效果实现代码
2009/08/29 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
常用DOM整理
2015/06/16 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
ant design实现圈选功能
2019/12/17 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
员工培训邀请函
2014/01/11 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
2015年教学工作总结
2015/04/02 职场文书