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 字典(Dictionary)操作详解
Mar 11 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
Python for Informatics 第11章之正则表达式(四)
Apr 21 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python实现统计给定字符串中重复模式最高子串功能示例
May 16 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
20行python代码的入门级小游戏的详解
May 05 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
Python urllib3软件包的使用说明
Nov 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
重置版战役片段
2020/04/09 魔兽争霸
社区(php&&mysql)二
2006/10/09 PHP
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
学习python处理python编码问题
2011/03/13 Python
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
python输入多行字符串的方法总结
2019/07/02 Python
elf彩妆英国官网:e.l.f. Cosmetics英国(美国平价彩妆品牌)
2017/11/02 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
PHP开发的一般流程
2013/08/13 面试题
药品促销活动方案
2014/02/14 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle