django 實現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法
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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
pandas如何統(tǒng)計某一列或某一行的缺失值數(shù)目
這篇文章主要介紹了pandas如何統(tǒng)計某一列或某一行的缺失值數(shù)目,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
Python基礎數(shù)據(jù)類型tuple元組的概念與用法
元組(tuple)是 Python 中另一個重要的序列結(jié)構(gòu),和列表類似,元組也是由一系列按特定順序排序的元素組成,這篇文章主要給大家介紹了關(guān)于Python基礎數(shù)據(jù)類型tuple元組的概念與使用方法,需要的朋友可以參考下2021-07-07
python3發(fā)送request請求及查看返回結(jié)果實例
這篇文章主要介紹了python3發(fā)送request請求及查看返回結(jié)果實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

