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 相关文章推荐
zbar解码二维码和条形码示例
Feb 07 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
Python多继承顺序实例分析
May 26 Python
Python玩转加密的技巧【推荐】
May 13 Python
pandas DataFrame索引行列的实现
Jun 04 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
python 提取文件指定列的方法示例
Aug 07 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 Python
Pycharm配置lua编译环境过程图解
Nov 28 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 循环列出目录内容的函数代码
2010/05/26 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jquery.validate使用攻略 第一部
2010/07/01 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python中bisect的用法
2014/09/23 Python
Python中使用HTMLParser解析html实例
2015/02/08 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
python判断输入日期为第几天的实例
2018/11/13 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python爬虫 正则表达式解析
2019/09/28 Python
python实现查找所有程序的安装信息
2020/02/18 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
给水工程专业毕业生自荐信
2014/01/28 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
电信营业员岗位职责
2015/04/14 职场文书
工作表现证明
2015/06/15 职场文书
环保守法证明
2015/06/24 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
诚信高考倡议书
2019/06/24 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫