国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

django 實現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法

2020-02-16 00:39:10
字體:
供稿:網(wǎng)友

django中,很多時候我們都需要有一個地方來進行更加詳細的權(quán)限控制,例如說哪些用戶可以訪問哪些頁面,檢查登錄狀態(tài)等,這里的話就涉及到了中間件的編寫了。

在django項目下的setting.py文件中,有一個MIDDLEWARE_CLASSES的字段,這里存放的就是中間件,用戶的訪問會先經(jīng)過這些中間件的處理之后再給各種views函數(shù)進行處理。在這個參數(shù)中加入我們接下來要編寫的中間件:

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',)

接下來實現(xiàn):

class ExteriorAuthMiddleware(object):  #判斷登錄 權(quán)限控制	def process_request(self,request):		if request.method == 'GET':			requestData = request.GET		else:			requestData = request.POST				request.session['errmsg']=''		#如果用戶沒有認證,需要轉(zhuǎn)到登錄界面		if not request.session.has_key('_auth_user_id') and 'login' not in request.path:			return HttpResponseRedirect('/login/')		#如果用戶已經(jīng)登錄		elif request.session.has_key('_auth_user_id') and 'logout' not in request.path:			###權(quán)限檢驗			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()				#判斷用戶是否有某些頁面的訪問權(quán)限,如果沒有,轉(zhuǎn)到404頁面				if not u.is_superuser:					if url.startswith('/transport/user_') or url.startswith('/log/'):						return error403(request, "權(quán)限不夠!")			except Exception,e:				logger.error("in function process_request :"+ str(e))				return HttpResponseRedirect('/login/')		#用戶已登錄,而且url是login,將轉(zhuǎn)到首頁		if request.session.has_key('_auth_user_id') and 'login' in request.path:			return HttpResponseRedirect('/index/')

以上只是個簡單的示例。

這篇django 實現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西贡区| 习水县| 克东县| 新竹市| 郧西县| 龙川县| 衢州市| 扎兰屯市| 庆阳市| 宁德市| 新兴县| 乌拉特前旗| 教育| 涿鹿县| 花莲市| 类乌齐县| 淄博市| 珲春市| 本溪市| 溧水县| 德江县| 基隆市| 伊金霍洛旗| 沙坪坝区| 黎城县| 通州区| 丹江口市| 突泉县| 富顺县| 错那县| 乐至县| 甘洛县| 宜兴市| 永济市| 天全县| 固始县| 平潭县| 东乌珠穆沁旗| 文水县| 当阳市| 哈密市|