Django框架的使用教程路由請(qǐng)求響應(yīng)的方法
路由
路由可以定義在工程的目錄下(看你的需求),也可以定義在各個(gè)應(yīng)用中來(lái)保存應(yīng)用的路由,用主路文件urls中使用include()包含各個(gè)應(yīng)用的子路由的數(shù)據(jù)
路由的解析順序
Django接收到請(qǐng)求后,從主路由文件urlpatterns中的路由從上倒下順序查找,如果有include包含,則進(jìn)入子應(yīng)用的urls中的urlpatterns中查找(從上而下)
路由的結(jié)尾斜線
Django有/結(jié)尾路由,用戶(hù)不需要加/,就可以直接重定向到/結(jié)尾的路徑上
路由命名(可以避免不同應(yīng)用使用相同名字發(fā)生沖突)
如:
# 主路由 from django.conf.urls import url,include from django.contrib import admin import django_test.urls urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^users/',include(django_test.urls ,namespace='users')) ]
reverser反解析(子應(yīng)用的路由都需要命名)
注意點(diǎn):
- 對(duì)于未指明namespace的,reverse(路由name)
- 對(duì)于指明namespace的,reverse(命名空間namespace:路由name)
請(qǐng)求(POST,PUT,PATCH,DELETE)默認(rèn)開(kāi)啟CSRF防護(hù)
post請(qǐng)求那些需要到postman測(cè)試工具里面測(cè)試
先把CSRF防護(hù)注釋掉
向服務(wù)器傳遞參數(shù)的方式
URL:直接在URL中傳遞數(shù)據(jù)
查詢(xún)字符串:key1=value1&key2=value2;
請(qǐng)求體:在body中傳遞數(shù)據(jù),常見(jiàn)有表單,json,xml
請(qǐng)求頭:在http報(bào)文頭中
URL參數(shù)傳遞
未定義參數(shù)順序傳遞
子應(yīng)用的路由設(shè)置
urlpatterns = [ # 這邊定義子應(yīng)用的路由 url(r'^index/$',views.index,name='index'), url(r'^show/$',views.show,name='show'), url(r'^parameter/([a-z]+)/(\d{4})$',views.parameter,name='parameter'), ]
定義視圖函數(shù)
# name,和age參數(shù)位置調(diào)換會(huì)影響下面的輸出結(jié)果 def parameter(request,name, age): print('age=%s'%age) print('name=%s' % name) return HttpResponse('OK')
命名參數(shù)按照名字傳遞
子路由
urlpatterns = [ # 這邊定義子應(yīng)用的路由 url(r'^index/$',views.index,name='index'), url(r'^show/$',views.show,name='show'), url(r'^parameter/(?P<name>[a-z]+)/(?P<age>\d{4})$',views.parameter,name='parameter'), ]
視圖函數(shù)
# age 和name位置改變值不變 def parameter(request,age, name): print('age=%s'%age) print('name=%s' % name) return HttpResponse('OK')
查詢(xún)字符串(傳遞參數(shù))
注意:查詢(xún)字符串不區(qū)分請(qǐng)求方式,即假使客戶(hù)端進(jìn)行POST方式的請(qǐng)求,依然可以通過(guò)request.GET獲取請(qǐng)求中的查詢(xún)字符串?dāng)?shù)據(jù)。
子路由
url(r'^qust/$',views.qust),
視圖函數(shù)
def qust(request): a = request.GET.get('a') b = request.GET.get('b') alist = request.GET.getlist('a') print(a) # 3 print(b) # 2 print(alist) # ['1', '3'] return HttpResponse('OK')
運(yùn)行(后面在加)
請(qǐng)求體(傳遞參數(shù))
表單類(lèi)
路由設(shè)置
url(r'^get_form/$', views.get_form)
視圖函數(shù)
def get_form(request): name = request.POST.get('name') age = request.POST.get('age') alist = request.POST.getlist('name') print(name) print(age) print(alist) return HttpResponse('OK')
運(yùn)行
非表單類(lèi)
路由
url(r'^get_body_json/$', views.get_body_json),
視圖
def get_body_json(request): json_str = request.body json_str = json_str.decode() # python3.6 無(wú)需執(zhí)行此步 req_data = json.loads(json_str) print(req_data['a']) print(req_data['b']) return HttpResponse('OK')
運(yùn)行
請(qǐng)求頭(傳遞參數(shù))
可以通過(guò)request.META屬性獲取請(qǐng)求頭headers的數(shù)據(jù)
路由
url(r'^get_head/$', views.get_head)
視圖函數(shù)
def get_head(request): print(request.META['CONTENT_TYPE']) return HttpResponse('OK')
運(yùn)行
常見(jiàn)的請(qǐng)求頭
CONTENT_LENGTH
– The length of the request body (as a string).
CONTENT_TYPE
– The MIME type of the request body.
HTTP_ACCEPT
– Acceptable content types for the response.
HTTP_ACCEPT_ENCODING
– Acceptable encodings for the response.
HTTP_ACCEPT_LANGUAGE
– Acceptable languages for the response.
HTTP_HOST
– The HTTP Host header sent by the client.
HTTP_REFERER
– The referring page, if any.
HTTP_USER_AGENT
– The client's user-agent string.
QUERY_STRING
– The query string, as a single (unparsed) string.
REMOTE_ADDR
– The IP address of the client.
REMOTE_HOST
– The hostname of the client.
REMOTE_USER
– The user authenticated by the Web server, if any.
REQUEST_METHOD
– A string such as "GET"
or "POST"
.
SERVER_NAME
– The hostname of the server.
SERVER_PORT
– The port of the server (as a string).
響應(yīng)
- HttpResponse提供一系列子類(lèi)
- HttpResponseRedirect 301
- HttpResponsePermanentRedirect 302
- HttpResponseNotModified 304
- HttpResponseBadRequest 400
- HttpResponseNotFound 404
- HttpResponseForbidden 403
- HttpResponseNotAllowed 405
- HttpResponseGone 410
- HttpResponseServerError 500
案例 # HttpResponse(content=響應(yīng)體,content_type=響應(yīng)數(shù)據(jù)類(lèi)型,status=狀態(tài)碼)
# content:表示返回的內(nèi)容 # status_code:返回的HTTP響應(yīng)狀態(tài)碼 # content_type: 指定返回?cái)?shù)據(jù)的MIME類(lèi)型 from django_http import HttpResponse def index(request): return HttpResponse('歡迎來(lái)到Gaidy博客', status=202)
JsonResponse(返回的json數(shù)據(jù))
from django.http import JsonResponse def index(request): return JsonResponse({'name': 'gaidy', 'age': '25'})
運(yùn)行結(jié)果
redirect重定向
from django.shortcuts import redirect # django_test是路由的空間命名 def show(request): # 重定向 return redirect(reverse('django_test:index'))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python基于Gensim實(shí)現(xiàn)文本相似度/匹配/查重
Gensim是基于Python語(yǔ)言的自然語(yǔ)言處理庫(kù),用來(lái)主題建模、文本相似度等文本處理任務(wù),下面我們就來(lái)看看如何使用Gensim實(shí)現(xiàn)文本相似度/匹配/查重等操作吧2024-03-03django框架面向?qū)ο驩RM模型繼承用法實(shí)例分析
這篇文章主要介紹了django框架面向?qū)ο驩RM模型繼承用法,結(jié)合實(shí)例形式分析了Django框架ORM模型抽象類(lèi)繼承、多表繼承及代理模型繼承三種繼承方式實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07Python編程實(shí)現(xiàn)的圖片識(shí)別功能示例
這篇文章主要介紹了Python編程實(shí)現(xiàn)的圖片識(shí)別功能,涉及Python PIL模塊的安裝與使用技巧,需要的朋友可以參考下2017-08-08Python使用pymupdf實(shí)現(xiàn)PDF內(nèi)容搜索并顯示功能
在日常工作和學(xué)習(xí)中,我們可能需要查找和提取PDF文件中的特定內(nèi)容,本文將介紹如何使用pymupdf實(shí)現(xiàn)PDF內(nèi)容搜索并顯示的功能,需要的可以參考下2023-08-08python中字符串類(lèi)型json操作的注意事項(xiàng)
這篇文章主要給大家介紹了python中字符串類(lèi)型json操作的一些注意事項(xiàng),文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05python range()函數(shù)取反序遍歷sequence的方法
今天小編就為大家分享一篇python range()函數(shù)取反序遍歷sequence的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Django+Django-Celery+Celery的整合實(shí)戰(zhàn)
這篇文章主要介紹了Django+Django-Celery+Celery的整合實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01用tensorflow實(shí)現(xiàn)彈性網(wǎng)絡(luò)回歸算法
這篇文章主要介紹了用tensorflow實(shí)現(xiàn)彈性網(wǎng)絡(luò)回歸算法2018-01-01