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 re模块介绍
Nov 30 Python
python清除字符串里非数字字符的方法
Jul 02 Python
多版本Python共存的配置方法
May 22 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
python ansible服务及剧本编写
Dec 29 Python
运动检测ViBe算法python实现代码
Jan 09 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
Django时区详解
Jul 24 Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 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桌面中心(一) 创建数据库
2007/03/11 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
Python发送Email方法实例
2014/08/21 Python
Python抓取百度查询结果的方法
2015/07/08 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
应届大学生求职信
2013/12/01 职场文书
手机业务员岗位职责
2013/12/13 职场文书
招商专员岗位职责
2014/02/08 职场文书
推广普通话标语
2014/06/27 职场文书
员工自我工作评价
2015/03/06 职场文书
小型婚礼主持词
2015/06/30 职场文书
四年级语文教学反思
2016/03/03 职场文书
成人成长感言如何写?
2019/08/16 职场文书
Spring Boot 实现 WebSocket
2022/04/30 Java/Android