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爬取三国演义的实现方法
Sep 12 Python
django批量导入xml数据
Oct 16 Python
Python获取某一天是星期几的方法示例
Jan 17 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
浅析NumPy 切片和索引
Sep 02 Python
python openssl模块安装及用法
Dec 06 Python
Python各协议下socket黏包问题原理
Apr 12 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
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
PHP常用的三种设计模式
2017/02/17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python如何实现反向迭代
2018/03/20 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
计生工作先进事迹
2014/08/15 职场文书
2014年档案室工作总结
2014/12/01 职场文书
升职自我推荐信范文
2015/03/25 职场文书
党纪处分决定书
2015/06/24 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js