Python Django進階教程(一)(高階檢視和URL配置)
Django版本:1.11
作業系統:Windows
Python:3.5
歡迎加入學習交流QQ群:657341423
高階檢視和URL配置
首先回顧一下url和views的基礎寫法。
url.py
url(r'^search/$', views.Search),
def Search(request):
if request.method == 'POST':
if 'q' in request.POST:
message = 'POST You searched for: %r' % request.POST['q']
else:
message = 'POST You submitted an empty form.'
return HttpResponse(message)
else:
if 'g' in request.GET and request.GET['g']:
q = request.GET['g']
name = Publisher.objects.filter(country=q)
return render_to_response('results.html',
{'name': name, 'query': q})
else:
return render_to_response('Search.html', {'error': True})
這種寫法是最基礎的。但是對於web開發而言,面對複雜的系統設計,這基礎的寫法就有點有心無力了。例如,如果不同的url上,所指向的views的功能是一樣的情況下,那麼我們就只能寫2個views的方法,而且裡面的程式碼是很多重複性的。這樣就造成程式碼的冗餘了。
以下介紹urls帶引數使用:
1.地址上帶引數:
urls.py
url(r'^time/(?P<day>\d+)/$', views.current_datetime),
可以看到(?P<day>\d+)
為一個引數。一個為urls的引數。如果多個引數,可以是這樣r'^time/(?P<day>\d+)/(?P<mouth>\d+)/$'
views.py
def current_datetime(request,day,mouth):
只要在定義方法的時候,引數寫上urls上的對應引數即可。
注意:引數的數目一定要對應,儘管你可能在def裡面用不到這個引數,但命名的時候一定寫上,不然會報錯。
2.urls的額外引數
urls.py
url(r'^time/(?P<day>\d+)/$', views.current_datetime,{'mouth':'03'}),
可以看到,對比1來說,我們在後面加了{'mouth':'03'}
這也是對這個url提供引數,在views.py的用法和上述的用法一樣。
對比1而言,2這種用法就比較常用。而1的用法就比較小用到。
對於2這用法,除了引數之外,還能將模版,模型作為引數傳遞。
url(r'^now/$',views.now,{'temp':'aa.html','model':models.Publisher}),
url(r'^nowtime/$',views.now,{'temp':'current_datetime.html','model':models.Bolg}),
同樣地在views.py的用法也是一樣
def now(request,temp,model):
return render_to_response(temp,{'current_date': "aaa"})
urls帶引數使用大致上就是這兩種用法,在這兩種用法上,可以延伸到很多設計方法。比如:
這裡的url和我上述說的不一樣,因為這個url的引數沒有命名引數名稱,所以在def是按照順序生成即可。個人不建議這種使用方式。
以下介紹檢視函式的高階使用
首先是views.py裡面的函式帶額外的引數。上面已講述過。如
def now(request,temp,model):
在檢視中,對於html的post和get處理,普通寫法都是在一個方法函式裡實現:如下:
這種寫法就是將post和get的全部邏輯都在一個函式實現
如果將其分離,如:
其中return GET(request)
和return POST(request)
裡面的post和get代指的是對應的some_page_get
和 some_page_post
主要通過method_splitter
判斷post和get,然後返回對應的處理方法。簡單來說就是方法函式裡面呼叫其他方法函式。
常用情景:大部分網站都是有登記檢測,比如我們常見的個人資訊管理,購物車結算等等都要使用者登入才能進行操作的。如果在使用者沒有登入的情況下會自動檢測是否登入,然後跳到登入介面,完成登入才能操作下一步操作。
舉個例子:
總結:url和檢視大致上就這幾種常用方法。簡單來說,url實現引數傳遞,檢視實現函式之間的呼叫。
相關文章
- Django進階之路由層和檢視層Django路由
- django模板怎麼配置檢視和urlDjango
- Python高階 -- 09 MySQL高階之事務、檢視、索引、賬戶管理、主從配置PythonMySql索引
- Django進階之路(一)Django
- Rust 程式設計視訊教程(進階)——027_1 高階特性Rust程式設計
- Python 函式進階-高階函式Python函式
- Rust 程式設計視訊教程(進階)——027_2 高階特性 2Rust程式設計
- Rust 程式設計視訊教程(進階)——027_3 高階特性 3Rust程式設計
- Python3影片零基礎進階高階運維Django爬蟲專案實戰2017全套教程Python運維Django爬蟲
- Rust 程式設計視訊教程(進階)——026_1 高階 trait1Rust程式設計AI
- Rust 程式設計視訊教程(進階)——026_2 高階 trait2Rust程式設計AI
- Rust 程式設計視訊教程(進階)——026_3 高階 trait3Rust程式設計AI
- Rust 程式設計視訊教程(進階)——026_4 高階 trait4Rust程式設計AI
- Kotlin 進階教程(一)Kotlin
- Flask URL和檢視(一)Flask
- DllImport進階:引數配置與高階主題探究Import
- Python進階:切片的誤區與高階用法Python
- jsp進階教程和ServletJSServlet
- Django 進階之 celeryDjango
- 高階前端進階(三)前端
- 高階前端進階(七)前端
- 高階前端進階(五)前端
- Django高階之-快取Django快取
- [Django高階之forms元件]DjangoORM元件
- Python進階教程5——物件導向Python物件
- CSS使用的一些小技巧/高階進階CSS
- React 進階(三) 高階元件React元件
- Typescript 高階語法進階TypeScript
- 高階前端進階系列 - webview前端WebView
- Rust 程式設計影片教程(進階)——027_1 高階特性Rust程式設計
- python-進階教程-對切片進行命名Python
- 檢查字串是否包含多個關鍵字的高階進階字串
- 【進階之路】執行緒池配置與調優的一些高階選項(一)執行緒
- 資料視覺化設計的小白高階進階攻略視覺化
- Python進階Python
- 【Python學習教程】Python的5種高階用法!Python
- Arthas 進階教程
- Rust 程式設計影片教程(進階)——027_2 高階特性 2Rust程式設計
- Rust 程式設計影片教程(進階)——027_3 高階特性 3Rust程式設計