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

django如何通過類視圖使用裝飾器

 更新時間:2019年07月24日 10:25:35   作者:苦瓜爆炒牛肉  
這篇文章主要介紹了django如何設計裝飾器過濾黑名單,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

需求:當我們想禁止ip黑名單訪問我們的某些頁面時,例如注冊頁面。應該怎么操作呢?

解決方案:這時候我們可以設計一個裝飾器,過濾ip黑名單。

裝飾器的寫法如下:

from functools import wraps


def ban_ip(func):
 @wraps(func)
 def wrapper(request,*args,**kwargs):
 IP = request.META.get("REMOTE_ADDR")
 if IP in ["127.0.0.1"]: # 可以添加ip黑名單到列表里
  return HttpResponse("禁止訪問")
 return func
 return wrapper

如果不是類視圖,可以這樣使用:

@ban_ip
def get_register(request):
 return render(request,"注冊頁面.html")


def post_resiger(request):
 name = request.POST.get("name")
 password = request.POST.get("password")
 print(name)
 print(password)
 return HttpResponse("注冊成功")

這樣就可以達到一個效果。如果ip在黑名單里,那么訪問注冊頁面時會彈出“禁止訪問”。

需求:但是,問題來了,當我們使用類視圖時,定義視圖函數(shù)時還有一個self參數(shù)。因為裝飾器沒有傳這個參,所以會報錯。應該怎么辦呢?

解決辦法:

(1)給類視圖中特定的方法

class register(View):
 @method_decorator(ban_ip)
 def get(self,request):
 return render(request,"注冊頁面.html")

 def post(self,request):
 name = request.POST.get("name")
 password = request.POST.get("password")
 print(name)
 print(password)
 return HttpResponse("注冊成功")

解讀:

  • 注意:針對函數(shù)定義的裝飾器,不能直接應用到類視圖的方法中,因為少了一個self參數(shù)
  • 解決:可以使用method_decorator裝飾器,為函數(shù)裝飾器補充第一個self參數(shù),使它可以應用到類的方法中。

(2)給所有類視圖的所有方法應用裝飾器

類視圖的實現(xiàn)是通過as_view()這個方法來分發(fā)不同的請求來實現(xiàn)了。我們可以利用這點來給類視圖的所有方法都應用裝飾器。

一個比較簡單但是不實用的辦法就是在項目的urls.py上面來實現(xiàn)。在分發(fā)請求的前面加上裝飾器。

url(r'^register$',ban_ip(views.register.as_view()))

雖然這樣比較方便,但是太不美觀了。裝飾器的優(yōu)雅都被它破壞了,那我們應該怎么辦呢?

解決辦法:把as_view()的方法重寫一下,給它加入裝飾器的功能。

class register(View):
 
 # 重寫請求分發(fā)方法,as_view()的核心語句
 @method_decorator(ban_ip)
 def dispatch(self, request, *args, **kwargs):
 return super().dispatch(request, *args, **kwargs)

 def get(self,request):
 return render(request,"注冊頁面.html")

 def post(self,request):
 name = request.POST.get("name")
 password = request.POST.get("password")
 print(name)
 print(password)
 return HttpResponse("注冊成功")

(3)對類視圖的某個方法應用裝飾器

@method_decorator(ban_ip,name='get')
class register(View):

 def get(self,request):
 return render(request,"post.html")

 def post(self,request):
 title = request.POST.get("title")
 content = request.POST.get("content")
 print(title)
 print(content)
 return HttpResponse("發(fā)布成功")

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python練習之曾經(jīng)很火的小人畫愛心表白代碼

    python練習之曾經(jīng)很火的小人畫愛心表白代碼

    小編有個好兄弟最近在追妹子,跟妹子打得火熱!就差臨門一腳了,這一jio我?guī)兔ρa上去了!他問有沒有什么酷炫的表白方式,可以給人心動的趕jio,表白的方式有許多種今天小編來教大家一個之前很火的小人畫愛心表白代碼
    2021-09-09
  • 支持python的分布式計算框架Ray詳解

    支持python的分布式計算框架Ray詳解

    Ray是一種分布式執(zhí)行框架,便于大規(guī)模應用程序和利用先進的機器學習庫,今天給大家分享支持python的分布式計算框架Ray詳解,感興趣的朋友一起看看吧
    2021-07-07
  • Python中方法定義與方法調(diào)用舉例詳解

    Python中方法定義與方法調(diào)用舉例詳解

    在Python中,方法調(diào)用是編寫程序時經(jīng)常會涉及到的一個重要概念,下面這篇文章主要給大家介紹了關于Python中方法定義與方法調(diào)用的相關資料,文章通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • Python實現(xiàn)的redis分布式鎖功能示例

    Python實現(xiàn)的redis分布式鎖功能示例

    這篇文章主要介紹了Python實現(xiàn)的redis分布式鎖功能,結合實例形式分析了Python操作redis分布式鎖與解鎖功能相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • Django中的用戶身份驗證示例詳解

    Django中的用戶身份驗證示例詳解

    這篇文章主要給大家介紹了關于Django中用戶身份驗證的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL Django具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • Centos下實現(xiàn)安裝Python3.6和Python2共存

    Centos下實現(xiàn)安裝Python3.6和Python2共存

    這篇文章主要介紹了Centos下實現(xiàn)安裝Python3.6和Python2共存,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解如何使用Python和正則表達式處理XML表單數(shù)據(jù)

    詳解如何使用Python和正則表達式處理XML表單數(shù)據(jù)

    在日常的Web開發(fā)中,處理表單數(shù)據(jù)是一個常見的任務,而XML是一種常用的數(shù)據(jù)格式,用于在不同的系統(tǒng)之間傳遞和存儲數(shù)據(jù),本文通過闡述一個技術問題并給出解答的方式,介紹如何使用Python和正則表達式處理XML表單數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • Python利用capstone實現(xiàn)反匯編

    Python利用capstone實現(xiàn)反匯編

    Capstone是一個輕量級的多平臺、多架構的反匯編框架,該模塊支持目前所有通用操作系統(tǒng),反匯編架構幾乎全部支持。本文就將利用他實現(xiàn)反匯編,感興趣的可以了解下
    2022-04-04
  • python 遍歷列表提取下標和值的實例

    python 遍歷列表提取下標和值的實例

    今天小編就為大家分享一篇python 遍歷列表提取下標和值的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • django中賬號密碼驗證登陸功能的實現(xiàn)方法

    django中賬號密碼驗證登陸功能的實現(xiàn)方法

    這篇文章主要介紹了django中賬號密碼驗證登陸功能的實現(xiàn)方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論