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使用自定义user-agent抓取网页的方法
Apr 15 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
python2 与python3的print区别小结
Jan 16 Python
python判断设备是否联网的方法
Jun 29 Python
python调用matlab的m自定义函数方法
Feb 18 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
Python中os模块的简单使用及重命名操作
Apr 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php实现aes加密类分享
2014/02/16 PHP
php通过session防url攻击方法
2014/12/10 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Python如何绘制日历图和热力图
2020/08/07 Python
Python中Yield的基本用法
2020/10/18 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
医学生个人求职信范文
2013/09/24 职场文书
自荐信的两点禁忌
2013/10/30 职场文书
调解协议书
2014/04/16 职场文书
村党支部换届选举方案
2014/05/02 职场文书
股指期货心得体会
2014/09/13 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript