最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Python的Django框架中包裝視圖函數(shù)

 更新時(shí)間:2015年07月20日 10:38:55   投稿:goldensun  
這篇文章主要介紹了在Python的Django框架中包裝視圖函數(shù)的方法,即requires_login的相關(guān)方法,需要的朋友可以參考下

我們最終的視圖技巧利用了一個(gè)高級(jí)python技術(shù)。 假設(shè)你發(fā)現(xiàn)自己在各個(gè)不同視圖里重復(fù)了大量代碼,就像 這個(gè)例子:

def my_view1(request):
  if not request.user.is_authenticated():
    return HttpResponseRedirect('/accounts/login/')
  # ...
  return render_to_response('template1.html')

def my_view2(request):
  if not request.user.is_authenticated():
    return HttpResponseRedirect('/accounts/login/')
  # ...
  return render_to_response('template2.html')

def my_view3(request):
  if not request.user.is_authenticated():
    return HttpResponseRedirect('/accounts/login/')
  # ...
  return render_to_response('template3.html')

這里,每一個(gè)視圖開(kāi)始都檢查request.user是否是已經(jīng)認(rèn)證的,是的話,當(dāng)前用戶已經(jīng)成功登陸站點(diǎn)否則就重定向/accounts/login/ (注意,雖然我們還沒(méi)有講到request.user,但是14章將要講到它.就如你所想像的,request.user描述當(dāng)前用戶是登陸的還是匿名)

如果我們能夠叢每個(gè)視圖里移除那些 重復(fù)代,并且只在需要認(rèn)證的時(shí)候指明它們,那就完美了。 我們能夠通過(guò)使用一個(gè)視圖包裝達(dá)到目的。 花點(diǎn)時(shí)間來(lái)看看這個(gè):

def requires_login(view):
  def new_view(request, *args, **kwargs):
    if not request.user.is_authenticated():
      return HttpResponseRedirect('/accounts/login/')
    return view(request, *args, **kwargs)
  return new_view

函數(shù)requires_login,傳入一個(gè)視圖函數(shù)view,然后返回一個(gè)新的視圖函數(shù)new_view.這個(gè)新的視圖函數(shù)new_view在函數(shù)requires_login內(nèi)定義 處理request.user.is_authenticated()這個(gè)驗(yàn)證,從而決定是否執(zhí)行原來(lái)的view函數(shù)

現(xiàn)在,我們可以從views中去掉if not request.user.is_authenticated()驗(yàn)證.我們可以在URLconf中很容易的用requires_login來(lái)包裝實(shí)現(xiàn).

from django.conf.urls.defaults import *
from mysite.views import requires_login, my_view1, my_view2, my_view3

urlpatterns = patterns('',
  (r'^view1/$', requires_login(my_view1)),
  (r'^view2/$', requires_login(my_view2)),
  (r'^view3/$', requires_login(my_view3)),
)

優(yōu)化后的代碼和前面的功能一樣,但是減少了代碼冗余 現(xiàn)在我們建立了一個(gè)漂亮,通用的函數(shù)requires_login()來(lái)幫助我們修飾所有需要它來(lái)驗(yàn)證的視圖
包含其他URLconf

如果你試圖讓你的代碼用在多個(gè)基于Django的站點(diǎn)上,你應(yīng)該考慮將你的URLconf以包含的方式來(lái)處理。

在任何時(shí)候,你的URLconf都可以包含其他URLconf模塊。 對(duì)于根目錄是基于一系列URL的站點(diǎn)來(lái)說(shuō),這是必要的。 例如下面的,URLconf包含了其他URLConf:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
  (r'^weblog/', include('mysite.blog.urls')),
  (r'^photos/', include('mysite.photos.urls')),
  (r'^about/$', 'mysite.views.about'),
)

admin模塊有他自己的URLconf,你僅僅只需要在你自己的代碼中加入include就可以了.

這里有個(gè)很重要的地方: 例子中的指向 include() 的正則表達(dá)式并 不 包含一個(gè) $ (字符串結(jié)尾匹配符),但是包含了一個(gè)斜桿。 每當(dāng)Django遇到 include() 時(shí),它將截?cái)嗥ヅ涞腢RL,并把剩余的字符串發(fā)往包含的URLconf作進(jìn)一步處理。

繼續(xù)看這個(gè)例子,這里就是被包含的URLconf mysite.blog.urls :

from django.conf.urls.defaults import *

urlpatterns = patterns('',
  (r'^(\d\d\d\d)/$', 'mysite.blog.views.year_detail'),
  (r'^(\d\d\d\d)/(\d\d)/$', 'mysite.blog.views.month_detail'),
)

通過(guò)這兩個(gè)URLconf,下面是一些處理請(qǐng)求的例子:

  •     /weblog/2007/ :在第一個(gè)URLconf中,模式 r'^weblog/' 被匹配。 因?yàn)樗且粋€(gè) include() ,Django將截掉所有匹配的文本,在這里是 'weblog/' 。URL剩余的部分是 2007/ , 將在 mysite.blog.urls 這個(gè)URLconf的第一行中被匹配到。 URL仍存在的部分為 2007/ ,與第一行的 mysite.blog.urlsURL設(shè)置相匹配。
  •     /weblog//2007/(包含兩個(gè)斜杠) 在第一個(gè)URLconf中,r'^weblog/'匹配 因?yàn)樗幸粋€(gè)include(),django去掉了匹配的部,在這個(gè)例子中匹配的部分是'weblog/' 剩下的部分是/2007/ (最前面有一個(gè)斜杠),不匹配mysite.blog.urls中的任何一行.
  •     /about/ : 這個(gè)匹配第一個(gè)URLconf中的 mysite.views.about 視圖。

相關(guān)文章

  • Windows下搭建python開(kāi)發(fā)環(huán)境詳細(xì)步驟

    Windows下搭建python開(kāi)發(fā)環(huán)境詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了Windows下搭建python開(kāi)發(fā)環(huán)境,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Python 人工智能老照片修復(fù)算法學(xué)習(xí)

    Python 人工智能老照片修復(fù)算法學(xué)習(xí)

    老舊或者破損的照片如何修復(fù)呢?本文主要介紹了一個(gè)非常不錯(cuò)的照片恢復(fù)開(kāi)源項(xiàng)目:Bringing-Old-Photos-Back-to-Life。感興趣的小伙伴快來(lái)看看呀
    2021-11-11
  • python如何制作英文字典

    python如何制作英文字典

    這篇文章主要為大家詳細(xì)介紹了python如何制作英文字典,添加單詞的意思,查詢,退出,建立單詞文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python 統(tǒng)計(jì)列表中不同元素的數(shù)量方法

    python 統(tǒng)計(jì)列表中不同元素的數(shù)量方法

    今天小編就為大家分享一篇python 統(tǒng)計(jì)列表中不同元素的數(shù)量方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python使用pika庫(kù)調(diào)用rabbitmq參數(shù)使用詳情

    python使用pika庫(kù)調(diào)用rabbitmq參數(shù)使用詳情

    這篇文章主要介紹了python使用pika庫(kù)調(diào)用rabbitmq參數(shù)使用詳情,文章通過(guò)展開(kāi)文章主題分享了三種方式,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • Python字符串和文件操作常用函數(shù)分析

    Python字符串和文件操作常用函數(shù)分析

    這篇文章主要介紹了Python字符串和文件操作常用函數(shù),實(shí)例分析了Python中字符串及文件操作的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 詳解運(yùn)行Python的神器Jupyter Notebook

    詳解運(yùn)行Python的神器Jupyter Notebook

    如果我們想要運(yùn)行Python,就是在Python或者IPython的解釋器環(huán)境中進(jìn)行交互式運(yùn)行,或者程序員最喜歡的編寫(xiě).py文件,在文件中編寫(xiě)python代碼,然后運(yùn)行。如果想寫(xiě)一篇Python的文章,里面有代碼,還希望代碼在當(dāng)前頁(yè)面運(yùn)行,那就是使用我們今天要介紹的Jupyter Notebook。
    2021-06-06
  • python PIL中ImageFilter模塊圖片濾波處理和使用方法

    python PIL中ImageFilter模塊圖片濾波處理和使用方法

    這篇文章主要介紹PIL中ImageFilter模塊幾種圖片濾波處理和使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Python遍歷zip文件輸出名稱(chēng)時(shí)出現(xiàn)亂碼問(wèn)題的解決方法

    Python遍歷zip文件輸出名稱(chēng)時(shí)出現(xiàn)亂碼問(wèn)題的解決方法

    這篇文章主要介紹了Python遍歷zip文件輸出名稱(chēng)時(shí)出現(xiàn)亂碼問(wèn)題的解決方法,實(shí)例分析了Python亂碼的出現(xiàn)的原因與相應(yīng)的解決方法,需要的朋友可以參考下
    2015-04-04
  • 對(duì)python以16進(jìn)制打印字節(jié)數(shù)組的方法詳解

    對(duì)python以16進(jìn)制打印字節(jié)數(shù)組的方法詳解

    今天小編就為大家分享一篇對(duì)python以16進(jìn)制打印字節(jié)數(shù)組的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論

西乌珠穆沁旗| 时尚| 红安县| 乐昌市| 湖口县| 治县。| 呼伦贝尔市| 淳安县| 罗源县| 密山市| 黄平县| 将乐县| 青岛市| 澳门| 湘乡市| 鹤岗市| 武功县| 黎城县| 惠州市| 南华县| 鄂托克前旗| 南丰县| 秦安县| 昔阳县| 嘉黎县| 镇雄县| 彰化市| 阜宁县| 桐庐县| 龙陵县| 辉县市| 赤峰市| 纳雍县| 铜鼓县| 莫力| 灵台县| 阿坝县| 曲周县| 中山市| 大田县| 旬阳县|