django 實(shí)現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法
django中,很多時(shí)候我們都需要有一個(gè)地方來(lái)進(jìn)行更加詳細(xì)的權(quán)限控制,例如說(shuō)哪些用戶可以訪問哪些頁(yè)面,檢查登錄狀態(tài)等,這里的話就涉及到了中間件的編寫了。
在django項(xiàng)目下的setting.py文件中,有一個(gè)MIDDLEWARE_CLASSES的字段,這里存放的就是中間件,用戶的訪問會(huì)先經(jīng)過這些中間件的處理之后再給各種views函數(shù)進(jìn)行處理。在這個(gè)參數(shù)中加入我們接下來(lái)要編寫的中間件:
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', )
接下來(lái)實(shí)現(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']='' #如果用戶沒有認(rèn)證,需要轉(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)限檢驗(yà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() #判斷用戶是否有某些頁(yè)面的訪問權(quán)限,如果沒有,轉(zhuǎn)到404頁(yè)面 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)到首頁(yè) if request.session.has_key('_auth_user_id') and 'login' in request.path: return HttpResponseRedirect('/index/')
以上只是個(gè)簡(jiǎn)單的示例。
這篇django 實(shí)現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
TensorFlow人工智能學(xué)習(xí)Keras高層接口應(yīng)用示例
這篇文章主要為大家介紹了TensorFlow人工智能學(xué)習(xí)中Keras高層接口的應(yīng)用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享的是一篇關(guān)于python關(guān)于倒排列的知識(shí)點(diǎn)總結(jié),有需要的朋友們可以參考下。2020-10-10Python代碼實(shí)現(xiàn)找到列表中的奇偶異常項(xiàng)
這篇文章主要介紹了Python代碼實(shí)現(xiàn)找到列表中的奇偶異常項(xiàng),文章內(nèi)容主要利用Python代碼實(shí)現(xiàn)了從輸入列表中尋找奇偶異常項(xiàng),需要的朋友可以參考一下2021-11-11Numpy數(shù)組轉(zhuǎn)置的兩種實(shí)現(xiàn)方法
下面小編就為大家分享一篇Numpy數(shù)組轉(zhuǎn)置的兩種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-04-04點(diǎn)云地面點(diǎn)濾波(Cloth Simulation Filter, CSF)
這篇文章主要介紹了點(diǎn)云地面點(diǎn)濾波(Cloth Simulation Filter, CSF)“布料”濾波算法介紹,本文從基本思想到實(shí)現(xiàn)思路一步步給大家講解的非常詳細(xì),需要的朋友可以參考下2021-08-08Python pandas庫(kù)中的isnull()詳解
今天小編就為大家分享一篇Python pandas庫(kù)中的isnull()詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-12-12巧用Python裝飾器 免去調(diào)用父類構(gòu)造函數(shù)的麻煩
巧用Python裝飾器 免去調(diào)用父類構(gòu)造函數(shù)的麻煩,需要的朋友可以參考下2012-05-05