欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django全局啟用登陸驗(yàn)證login_required的方法

 更新時間:2020年06月02日 08:41:57   作者:運(yùn)維咖啡吧  
這篇文章主要介紹了Django全局啟用登陸驗(yàn)證login_required的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Django在做后臺系統(tǒng)過程中,我們通常都會為view函數(shù)添加 @login_required 裝飾器,這個裝飾器的主要作用就是在用戶訪問這個方法時,檢查用戶是否已經(jīng)成功登陸,如果沒有則重定向到登陸頁面

登陸頁面地址是通過 settings.LOGIN_URL 來獲取的,默認(rèn)為 /accounts/login/ 頁面,當(dāng)然你也可以在settings配置文件中通過添加 LOGIN_URL 配置來改掉他,同時 @login_required 也接收參數(shù) login_url 來指定登陸頁面

from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')
def home(request):
 return JsonResponse({data': 'ops-coffee.cn'})

Middleware

通常對于一個后臺系統(tǒng)來說,每一個頁面都需要登陸才能訪問,這樣我們就需要給每一個view方法添加 @login_required 裝飾器,那么有沒有簡單優(yōu)雅一點(diǎn)的方式呢?可以通過Middleware中間件來實(shí)現(xiàn)

中間件位于用戶請求和程序響應(yīng)之間,當(dāng)用戶訪問一個url之后并不是直接交給了view去處理,而是先經(jīng)過中間件處理,然后再到了view,路線是這樣的:user-->middleware-->view,所以針對全局所有view的操作就非常適合放在中間件里去處理

Django的中間件都定義在settings的 MIDDLEWARE 配置下,默認(rèn)就添加了諸如auth、csrf之類的中間件

需要注意的是Django的中間件是有先后順序的,對于接收到的請求默認(rèn)從上到下依次執(zhí)行,關(guān)于Django的中間件這里不過多介紹,查詢相關(guān)文檔即可

對于優(yōu)雅處理用戶訪問view驗(yàn)證登陸的需求,我們就可以通過添加自定義的中間件來處理,方法非常簡單

先來編寫中間件類,代碼如下:

from django.shortcuts import redirect
from django.conf import settings

class LoginRequiredMiddleware:
 def __init__(self, get_response):
  self.get_response = get_response
  self.login_url = settings.LOGIN_URL
  self.open_urls = [self.login_url] + getattr(settings, 'OPEN_URLS', [])

 def __call__(self, request):
  if not request.user.is_authenticated and request.path_info not in self.open_urls:
   return redirect(self.login_url + '?next=' + request.path)

  return self.get_response(request)

__init__ 和 __call__ 為middleware的固定格式

__init__ 函數(shù),初始化了幾個變量。需要注意的是定義了一個變量 open_urls ,這是一個list,包含所有不需要驗(yàn)證登陸的頁面,提供了更強(qiáng)的靈活性,在這個列表里的url都不會驗(yàn)證是否登陸,默認(rèn)將 login_url 添加到了 open_urls 列表中

__call__ 函數(shù)會判斷當(dāng)用戶沒有登陸且請求的URL不在 open_urls 列表中時,就直接給重定向到登陸頁面

代碼比較簡單,這里不做過多解釋

然后在setting配置文件的MIDDLEWARE中添加上邊這個中間件的方法就可以了

MIDDLEWARE = [
 'coffee.middleware.loginrequired.LoginRequiredMiddleware',
]

LoginRequiredMiddleware 中間件放在最后一行即可,前邊為中間件類的路徑, coffee 作為一個app,需要包含在 INSTALLED_APPS 內(nèi),目錄結(jié)構(gòu)大概如下:

webapp 
 - coffee
  - middleware
   - __init__.py
   - loginrequired.py
  - views.py
 - webapp
  - __init__.py
  - settings.py
  - urls.py
 - manage.py

當(dāng)我們有需要排除,不用檢查是否登陸的URL時,只需要在settings配置文件中添加 OPEN_URLS 配置即可

OPEN_URLS = ['/devops/', '/webssh/']

至此,完美解決了所有view都需要添加 @login_required 的問題

中間件的合理運(yùn)用,能幫助我們簡化很多操作,編寫優(yōu)雅的代碼,例如記錄系統(tǒng)審計(jì)日志就可以通過中間件來方便的實(shí)現(xiàn),試想一下,還有哪些地方可以用到呢?

總結(jié)

到此這篇關(guān)于Django全局啟用登陸驗(yàn)證login_required的方法的文章就介紹到這了,更多相關(guān)django登陸驗(yàn)證login_required內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python編寫一個Lisp語言的解釋器

    使用Python編寫一個Lisp語言的解釋器

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個簡單的Lisp語言的解釋器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 解決python ThreadPoolExecutor 線程池中的異常捕獲問題

    解決python ThreadPoolExecutor 線程池中的異常捕獲問題

    這篇文章主要介紹了解決python ThreadPoolExecutor 線程池中的異常捕獲問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python numpy函數(shù)中的linspace創(chuàng)建等差數(shù)列詳解

    python numpy函數(shù)中的linspace創(chuàng)建等差數(shù)列詳解

    numpy.linspace是用于創(chuàng)建一個一維數(shù)組,并且是等差數(shù)列構(gòu)成的一維數(shù)組,下面這篇文章主要給大家介紹了關(guān)于python numpy函數(shù)中的linspace創(chuàng)建等差數(shù)列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-10-10
  • 基于Python中單例模式的幾種實(shí)現(xiàn)方式及優(yōu)化詳解

    基于Python中單例模式的幾種實(shí)現(xiàn)方式及優(yōu)化詳解

    下面小編就為大家分享一篇基于Python中單例模式的幾種實(shí)現(xiàn)方式及優(yōu)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Python 編碼處理-str與Unicode的區(qū)別

    Python 編碼處理-str與Unicode的區(qū)別

    本文主要介紹Python 編碼處理的問題,這里整理了相關(guān)資料,并詳細(xì)說明如何處理編碼問題,有需要的小伙伴可以參考下
    2016-09-09
  • Python內(nèi)置函數(shù)詳細(xì)解析

    Python內(nèi)置函數(shù)詳細(xì)解析

    這篇文章主要介紹了Python內(nèi)置函數(shù)詳細(xì)解析,Python?自帶了很多的內(nèi)置函數(shù),極大地方便了我們的開發(fā),下文小編總結(jié)了一些內(nèi)置函數(shù)的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析

    ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析

    這篇文章主要介紹了ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 使用 NumPy 和 Matplotlib 繪制函數(shù)圖

    使用 NumPy 和 Matplotlib 繪制函數(shù)圖

    Matplotlib 是 Python 的繪圖庫。 它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。 它也可以和圖形工具包一起使用,如 PyQt 和 wxPython
    2021-09-09
  • python調(diào)用Matplotlib繪制分布點(diǎn)圖

    python調(diào)用Matplotlib繪制分布點(diǎn)圖

    這篇文章主要為大家詳細(xì)介紹了python調(diào)用Matplotlib繪制分布點(diǎn)圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 一文帶你搞懂Python中的pyc文件

    一文帶你搞懂Python中的pyc文件

    Python是一門解釋性語言,沒有嚴(yán)格意義上的編譯和匯編過程。Pyc文件是py編譯過程中產(chǎn)生的字節(jié)碼文件,可以由虛擬機(jī)直接執(zhí)行,是python將目標(biāo)源碼編譯成字節(jié)碼以后在磁盤上的文件形式。本文就來聊聊pyc文件的寫入等只是,感興趣的可以了解一下
    2022-12-12

最新評論