91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django怎么實現編寫控制登錄和訪問權限控制的中間件方法

發布時間:2021-05-06 09:51:22 來源:億速云 閱讀:279 作者:小新 欄目:開發技術

小編給大家分享一下django怎么實現編寫控制登錄和訪問權限控制的中間件方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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怎么實現編寫控制登錄和訪問權限控制的中間件方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥棱县| 屏东县| 东乌珠穆沁旗| 尼玛县| 南乐县| 建德市| 辽阳县| 延吉市| 霍州市| 鹿邑县| 门源| 红河县| 上高县| 黔东| 稷山县| 五华县| 安宁市| 孟村| 历史| 同仁县| 宁陕县| 沙雅县| 平凉市| 乌拉特后旗| 新兴县| 来宾市| 湄潭县| 郧西县| 双辽市| 久治县| 黄冈市| 抚顺市| 若尔盖县| 京山县| 宣化县| 盐池县| 泗水县| 台北市| 桐乡市| 临潭县| 宜阳县|