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基础教程之udp端口扫描
Feb 10 Python
python文件写入实例分析
Apr 08 Python
Python NumPy库安装使用笔记
May 18 Python
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
Python Property属性的2种用法
Jun 21 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
python 设置文件编码格式的实现方法
Dec 21 Python
python 获取图片分辨率的方法
Jan 08 Python
python try 异常处理(史上最全)
Mar 07 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
一文轻松掌握python语言命名规范规则
Jun 18 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
PHP文件读写操作之文件写入代码
2011/01/13 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
解析argc argv在php中的应用
2013/06/24 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
php析构函数的简单使用说明
2015/08/24 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python配置grpc环境
2019/01/01 Python
Django实现单用户登录的方法示例
2019/03/28 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
出国签证在职证明
2014/09/20 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
先进班组事迹材料
2014/12/25 职场文书
浅谈Python 中的复数问题
2021/05/19 Python