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输出一个杨辉三角的例子
Jun 13 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
python matplotlib拟合直线的实现
Nov 19 Python
关于Python 常用获取元素 Driver 总结
Nov 24 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
如何Python使用re模块实现okenizer
Apr 30 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
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
深入理解vue Render函数
2017/07/19 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python装饰器的函数式编程详解
2015/02/27 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
想学画画?python满足你!
2020/12/24 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
光声世纪笔试题目
2012/08/25 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
教师网络培训感言
2014/03/09 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
2014年审计工作总结
2014/11/17 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书