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之使用Python操作数据库(1)
Nov 25 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
Python绘制KS曲线的实现方法
Aug 13 Python
基于python实现KNN分类算法
Apr 23 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python使用requests.session模拟登录
Aug 09 Python
Python之——生成动态路由轨迹图的实例
Nov 22 Python
关于Python中定制类的比较运算实例
Dec 19 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
Anaconda使用IDLE的实现示例
Sep 23 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 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
Oracle Faq(Oracle的版本)
2006/10/09 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
php制作文本式留言板
2015/03/18 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
javascript中的缓动效果实现程序
2012/12/29 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
Python发送email的3种方法
2015/04/28 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
python操作kafka实践的示例代码
2019/06/19 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
YUV转为jpg图像的实现
2019/12/09 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
升国旗仪式主持词
2014/03/19 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
2014年财务科工作总结
2014/11/11 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL