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用字典统计单词或汉字词个数示例
Apr 22 Python
Python中使用动态变量名的方法
May 06 Python
python分析nignx访问日志脚本分享
Feb 26 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
Python之用户输入的实例
Jun 22 Python
python查看模块,对象的函数方法
Oct 16 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
Python中按值来获取指定的键
Mar 04 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
python解析多层json操作示例
Dec 30 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Python requests库参数提交的注意事项总结
Mar 29 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类自动加载器实现方法
2015/07/28 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
php微信开发之谷歌测距
2018/06/14 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
js+css在交互上的应用
2010/07/18 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
jquery显示loading图片直到网页加载完成的方法
2015/06/25 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Python-嵌套列表list的全面解析
2016/06/08 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
python查看列的唯一值方法
2018/07/17 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
python manage.py runserver流程解析
2019/11/08 Python
在python中做正态性检验示例
2019/12/09 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
金融管理毕业生求职信
2014/03/03 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
车间统计员岗位职责
2015/04/14 职场文书
公司开业致辞
2015/07/29 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
Node.js实现断点续传
2021/06/23 Javascript
浅析Python实现DFA算法
2021/06/26 Python