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线程的两种编程方式
Apr 14 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
python任务调度实例分析
May 19 Python
django中的setting最佳配置小结
Nov 21 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
django框架自定义用户表操作示例
Aug 07 Python
python openpyxl使用方法详解
Jul 18 Python
python性能测量工具cProfile使用解析
Sep 26 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
Django-rest-framework中过滤器的定制实例
Apr 01 Python
python爬虫爬取图片的简单代码
Jan 18 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
Javascript缓存API
2016/06/14 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python中将字典形式的数据循环插入Excel
2018/01/16 Python
Python操作MySQL数据库的方法
2018/06/20 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Python内置加密模块用法解析
2019/11/25 Python
python同时遍历两个list用法说明
2020/05/02 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
JVM是一个编译程序还是解释程序
2012/09/11 面试题
饮料业务员岗位职责
2013/12/15 职场文书
保护环境演讲稿
2014/05/10 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers