欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Django中的urls和視圖views怎么實(shí)現(xiàn)-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)13年的服務(wù)器租用、西部信息服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn),已先后獲得國(guó)家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、虛擬主機(jī)申請(qǐng)域名、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。

本篇文章給大家分享的是有關(guān)Django中的urls和視圖views怎么實(shí)現(xiàn),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

說(shuō)到關(guān)于請(qǐng)求方法的分支,讓我們來(lái)看一下可以用什么好的方法來(lái)實(shí)現(xiàn)它。 考慮這個(gè) URLconf/view 設(shè)計(jì):

# urls.py
 
from django.conf.urls.defaults import *
from mysite import views
 
urlpatterns = patterns('',
  # ...
  (r'^somepage/$', views.some_page),
  # ...
)
# views.py
 
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render_to_response
 
def some_page(request):
  if request.method == 'POST':
    do_something_for_post()
    return HttpResponseRedirect('/someurl/')
  elif request.method == 'GET':
    do_something_for_get()
    return render_to_response('page.html')
  else:
    raise Http404()

在這個(gè)示例中,`` some_page()`` 視圖函數(shù)對(duì)`` POST`` 和`` GET`` 這兩種請(qǐng)求方法的處理完全不同。 它們唯一的共同點(diǎn)是共享一個(gè)URL地址: `` /somepage/.``正如大家所看到的,在同一個(gè)視圖函數(shù)中對(duì)`` POST`` 和`` GET`` 進(jìn)行處理是一種很初級(jí)也很粗糙的做法。 一個(gè)比較好的設(shè)計(jì)習(xí)慣應(yīng)該是,用兩個(gè)分開(kāi)的視圖函數(shù)——一個(gè)處理`` POST`` 請(qǐng)求,另一個(gè)處理`` GET`` 請(qǐng)求,然后在相應(yīng)的地方分別進(jìn)行調(diào)用。

我們可以像這樣做:先寫(xiě)一個(gè)視圖函數(shù)然后由它來(lái)具體分派其它的視圖,在之前或之后可以執(zhí)行一些我們自定的程序邏輯。 下邊的示例展示了這個(gè)技術(shù)是如何幫我們改進(jìn)前邊那個(gè)簡(jiǎn)單的`` some_page()`` 視圖的:

# views.py
 
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import render_to_response
 
def method_splitter(request, GET=None, POST=None):
  if request.method == 'GET' and GET is not None:
    return GET(request)
  elif request.method == 'POST' and POST is not None:
    return POST(request)
  raise Http404
 
def some_page_get(request):
  assert request.method == 'GET'
  do_something_for_get()
  return render_to_response('page.html')
 
def some_page_post(request):
  assert request.method == 'POST'
  do_something_for_post()
  return HttpResponseRedirect('/someurl/')
# urls.py
 
from django.conf.urls.defaults import *
from mysite import views
 
urlpatterns = patterns('',
  # ...
  (r'^somepage/$', views.method_splitter, {'GET': views.some_page_get, 'POST': views.some_page_post}),
  # ...
)

讓我們從頭看一下代碼是如何工作的:

我們寫(xiě)了一個(gè)新的視圖,`` method_splitter()`` ,它根據(jù)`` request.method`` 返回的值來(lái)調(diào)用相應(yīng)的視圖??梢钥吹剿鼛в袃蓚€(gè)關(guān)鍵參數(shù),`` GET`` 和`` POST`` ,也許應(yīng)該是* 視圖函數(shù)* 。如果`` request.method`` 返回`` GET`` ,那它就會(huì)自動(dòng)調(diào)用`` GET`` 視圖。 如果`` request.method`` 返回的是`` POST`` ,那它調(diào)用的就是`` POST`` 視圖。 如果`` request.method`` 返回的是其它值(如:`` HEAD`` ),或者是沒(méi)有把`` GET`` 或`` POST`` 提交給此函數(shù),那它就會(huì)拋出一個(gè)`` Http404`` 錯(cuò)誤。

在URLconf中,我們把`` /somepage/`` 指到`` method_splitter()`` 函數(shù),并把視圖函數(shù)額外需要用到的`` GET`` 和`` POST`` 參數(shù)傳遞給它。

最終,我們把`` some_page()`` 視圖分解到兩個(gè)視圖函數(shù)中`` some_page_get()`` 和`` some_page_post()`` 。這比把所有邏輯都擠到一個(gè)單一視圖的做法要優(yōu)雅得多。

注意,在技術(shù)上這些視圖函數(shù)就不用再去檢查`` request.method`` 了,因?yàn)閌` method_splitter()`` 已經(jīng)替它們做了。 (比如,`` some_page_post()`` 被調(diào)用的時(shí)候,我們可以確信`` request.method`` 返回的值是`` post`` 。)當(dāng)然,這樣做不止更安全也能更好的將代碼文檔化,這里我們做了一個(gè)假定,就是`` request.method`` 能象我們所期望的那樣工作。

現(xiàn)在我們就擁有了一個(gè)不錯(cuò)的,可以通用的視圖函數(shù)了,里邊封裝著由`` request.method`` 的返回值來(lái)分派不同的視圖的程序。關(guān)于`` method_splitter()`` 就不說(shuō)什么了,當(dāng)然,我們可以把它們重用到其它項(xiàng)目中。

然而,當(dāng)我們做到這一步時(shí),我們?nèi)匀豢梢愿倪M(jìn)`` method_splitter`` 。從代碼我們可以看到,它假設(shè)`` Get`` 和`` POST`` 視圖除了`` request`` 之外不需要任何其他的參數(shù)。那么,假如我們想要使用`` method_splitter`` 與那種會(huì)從URL里捕捉字符,或者會(huì)接收一些可選參數(shù)的視圖一起工作時(shí)該怎么辦呢?

為了實(shí)現(xiàn)這個(gè),我們可以使用Python中一個(gè)優(yōu)雅的特性 帶星號(hào)的可變參數(shù) 我們先展示這些例子,接著再進(jìn)行解釋

def method_splitter(request, *args, **kwargs):
  get_view = kwargs.pop('GET', None)
  post_view = kwargs.pop('POST', None)
  if request.method == 'GET' and get_view is not None:
    return get_view(request, *args, **kwargs)
  elif request.method == 'POST' and post_view is not None:
    return post_view(request, *args, **kwargs)
  raise Http404

這里,我們重構(gòu)method_splitter(),去掉了GET和POST兩個(gè)關(guān)鍵字參數(shù),改而支持使用*args和和**kwargs(注意*號(hào)) 這是一個(gè)Python特性,允許函數(shù)接受動(dòng)態(tài)的、可變數(shù)量的、參數(shù)名只在運(yùn)行時(shí)可知的參數(shù)。 如果你在函數(shù)定義時(shí),只在參數(shù)前面加一個(gè)*號(hào),所有傳遞給函數(shù)的參數(shù)將會(huì)保存為一個(gè)元組. 如果你在函數(shù)定義時(shí),在參數(shù)前面加兩個(gè)*號(hào),所有傳遞給函數(shù)的關(guān)鍵字參數(shù),將會(huì)保存為一個(gè)字典

例如,對(duì)于這個(gè)函數(shù)

def foo(*args, **kwargs):
  print "Positional arguments are:"
  print args
  print "Keyword arguments are:"
  print kwargs

看一下它是怎么工作的

>>> foo(1, 2, 3)
Positional arguments are:
(1, 2, 3)
Keyword arguments are:
{}
>>> foo(1, 2, name='Adrian', framework='Django')
Positional arguments are:
(1, 2)
Keyword arguments are:
{'framework': 'Django', 'name': 'Adrian'}

回過(guò)頭來(lái)看,你能發(fā)現(xiàn)我們用method_splitter()和*args接受**kwargs函數(shù)參數(shù)并把它們傳遞到正確的視圖。any 但是在我們這樣做之前,我們要調(diào)用兩次獲得參數(shù)kwargs.pop()GETPOST,如果它們合法的話。 (我們通過(guò)指定pop的缺省值為None,來(lái)避免由于一個(gè)或者多個(gè)關(guān)鍵字缺失帶來(lái)的KeyError)

以上就是Django中的urls和視圖views怎么實(shí)現(xiàn),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

網(wǎng)頁(yè)題目:Django中的urls和視圖views怎么實(shí)現(xiàn)-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://aaarwkj.com/article20/gigjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄響應(yīng)式網(wǎng)站、定制開(kāi)發(fā)、Google、關(guān)鍵詞優(yōu)化網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
新人妻一区二区在线视频| 日本 影院 一区 二区| 免费在线观看成人av| 亚洲精品视频久久免费| 国产精品99久久久久久宅男九| 国产精品久久中文字幕亚洲| 色婷婷综合激情一区二区| 久久精品一区二区东京热| 91国产性感美女视频| 国产日韩欧美老年人激情| 内射小美女阴户毛片在线| 日韩在线观看精品亚洲| 日韩二区三区在线观看| 成人又黄又爽大片在线观看| 国产在线高清精品二区| av在线免费观看青青草原| 久久国产麻豆精品电影| 日韩不卡永久免费视频观看| 成人又黄又爽大片在线观看| 一级黄片国产精品久久| 国产在线观看一区二区三区精品| 熟妇人妻精品一区二区三区颏| 国产精品综合久久蜜臀av| 日本熟女中文字幕一区| 成年女人大片免费观看版| 免费亚洲一区二区三区| 久久国产亚洲欧美一区| 国产亚洲加勒比久久精品| 亚洲精品国产熟女高潮| 亚洲成人高清av在线| 男女做爰高清免费视频| 久久夜色精品亚洲国产| 亚洲一区二区三区av蜜桃| 91日韩中文字幕在线观看| 性感美女国产精品一区二区| 亚洲日本一区二区高清| 欧美欧美欧美欧美一区| 操老熟女一区二区三区| 高清不卡av在线播放| 中文字幕成人在线电影| 国产av不卡精品影片|