真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

02_Django-路由配置-HTTP協(xié)議的請求和響應(yīng)

02_Django-路由配置-HTTP協(xié)議的請求和響應(yīng)

視頻????:https://www.bilibili.com/video/BV1vK4y1o7jH
博客????:https://blog.csdn.net/cpen_web

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比宜章網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式宜章網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋宜章地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。


一. 路由配置

settings.py中的 `ROOT_URLCONF` 指定了主路由配置列表 urlpatterns 的文件位置

# file: <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    path('page/2003/', views.page_2003_view),
    ... # 此處配置主路由
]

path()

path()函數(shù)

path()函數(shù)

導(dǎo)入 - from django.urls import path

語法 - path(route, views, name=None)

參數(shù):

? 1.route: 字符串類型,匹配的請求路徑

? 2.views: 指定路徑所對應(yīng)的視圖處理函數(shù)的名稱

? 3.name: 為地址起 別名,在模塊中地址反向解析時(shí)使用

練習(xí) - 建立一個(gè)小網(wǎng)站:

? 輸入網(wǎng)址:http://127.0.0.1:8000, 在網(wǎng)頁中輸出:這是我的首頁

? 輸入網(wǎng)址:http://127.0.0.1:8000/page/1, 在網(wǎng)頁中輸出:這是編號為1的網(wǎng)頁

? 輸入地址:http://127.0.0.1:8000/page/2, 在網(wǎng)頁中輸出:這是編號為2的網(wǎng)頁

http://127.0.0.1:8000
http://127.0.0.1:8000/page/1
http://127.0.0.1:8000/page/2
 <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    #http://127.0.0.1:8000
    path('', views.index_view),
    #http://127.0.0.1:8000/page/1
    path('page/1', views.page1_view),
    #http://127.0.0.1:8000/page/2
    path('page/2', views.page2_view)
]

 <項(xiàng)目同名文件夾下>/views.py
def index_view(request):
    html = '這是我的首頁'
    return HttpResponse(html)

def page1_view(request):
    html = '這是編號為1的網(wǎng)頁'
    return HttpResponse(html)

def page2_view(request):
    html = '這是編號為2的網(wǎng)頁'
    return HttpResponse(html)

思考

建立如上一百個(gè)網(wǎng)頁該怎么辦?

例如:

? http://127.0.0.1:8000/page/3

? http://127.0.0.1:8000/page/4

? ...

? http://127.0.0.1:8000/page/100

path轉(zhuǎn)換器

語法:<轉(zhuǎn)換器類型: 自定義名>

作用:若轉(zhuǎn)換器類型匹配到對應(yīng)類型的數(shù)據(jù),則將數(shù)據(jù)按照關(guān)鍵字傳參的方式傳遞給視圖函數(shù)

例子:path(‘page/’, view.xxx)

轉(zhuǎn)換器類型:str、int、slug、path

http://127.0.0.1:8000/page/30

 <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    #http://127.0.0.1:8000/page/3-100
    path('page/', views.pagen_view)
]

 <項(xiàng)目同名文件夾下>/views.py
def pagen_view(request, pg):
    html = '這是編號為%s的網(wǎng)頁!'%(pg)
    return HttpResponse(html)

練習(xí):小計(jì)算器

? 定義一個(gè)路由的格式為:

? http://127.0.0.1:8000/整數(shù)/操作字符串[add/sub/mul]/整數(shù)

? 從路由中提取數(shù)據(jù),做相應(yīng)的操作后返回給瀏覽器

? 效果如下:

? 輸入:127.0.0.1:8000/100/add/200

? 頁面顯示結(jié)果:300

http://127.0.0.1:8000/100/add/200
結(jié)果為:300

 <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    #http://127.0.0.1:8000/整數(shù)/操作符/整數(shù)
    path('//', views.cal_view)
]

 <項(xiàng)目同名文件夾下>/views.py
def cal_view(request, n, op, m):
    if op not in ['add', 'sub', 'mul']:
        return HttpResponse('Your op is wrong')
    result = 0
    if op == 'add':
        result = n + m
    elif op == 'sub':
        result = n - m
    elif op == 'mul':
        result = n * m
    return HttpResponse('結(jié)果為:%s'%(result))

re_path()

re_path()函數(shù)

re_path()函數(shù)

在 url 的匹配過程中可以使用正則表達(dá)式進(jìn)行精確匹配

語法:

? re_path(reg, view, name=xxx)

? 正則表達(dá)式為命名分組模式(?Ppattern); 匹配提取參數(shù)后用關(guān)鍵字傳參方式傳遞給視圖函數(shù)

樣例
# 可匹配 http://127.0.0.1:8000/20/mul/40
# 不可匹配 http://127.0.0.1:8000/200/mul/400

http://127.0.0.1:8000/10/add/20  ->  x:10 op:add y:20

 <項(xiàng)目同名文件夾下>/urls.py
from django.urls import path, re_path

urlpatterns = [
    #http://127.0.0.1:8000/整數(shù)2/操作符/整數(shù)2
    re_path(r'^(?P\d{1,2})/(?P\w+)/(?P\d{1,2})$', views.cal2_view),
]		# \d 整數(shù); \w 字符

 <項(xiàng)目同名文件夾下>/views.py
def cal2_view(request, x, op, y):
    html = 'x:%s op:%s y:%s'%(x, op, y)
    return HttpResponse(html)

練習(xí)

訪問地址:

? http://127.0.0.1:8000/birthday/四位數(shù)字/一到兩位數(shù)字/一到兩位數(shù)字

? http://127.0.0.1:8000/birthday/一到兩位數(shù)字/一到兩位數(shù)字/四位數(shù)字

最終輸出:生日為:xxxx年xx月xx日

效果樣例:

? 輸入網(wǎng)址:http://127.0.0.1:8000/birthday/2015/12/11

? 顯示為:生日為:2015年12月11日

? 輸入網(wǎng)址:http://127.0.0.1:8000/birthday/2/28/2008

? 顯示為:生日為:2008年2月28日

http://127.0.0.1:8000/birthday/1992/01/01
生日為1992年01月01日

 <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    #http://127.0.0.1:8000/birthday/年4/月2/日2
    re_path(r'^birthday/(?P\d{4})/(?P\d{1,2})/(?P\d{1,2})$', views.birthday_view),
    #http://127.0.0.1:8000/birthday/月2/日2/年4
    re_path(r'^birthday/(?P\d{1,2})/(?P\d{1,2})/(?P\d{4})$', views.birthday_view),
]

 <項(xiàng)目同名文件夾下>/views.py
def birthday_view(request, y, m, d):
    html = "生日為%s年%s月%s日"%(y, m, d)
    return HttpResponse(html)

Django Day02

請求和響應(yīng)

GET請求和POST請求

Django的設(shè)計(jì)模式及模板層

模板層 - 變量和標(biāo)簽

模板層 - 過濾器和繼承

url反向解析


二. HTTP協(xié)議的請求和響應(yīng)

定義

? 請求是指瀏覽器端通過HTTP協(xié)議發(fā)送給服務(wù)器端的數(shù)據(jù)

? 響應(yīng)是指服務(wù)器端接收到請求后做相應(yīng)的處理后再回復(fù)給瀏覽器端的數(shù)據(jù)

請求

請求樣例

請求樣例

請求中的方法

根據(jù)HTTP標(biāo)準(zhǔn),HTTP請求可以使用多種請求方法

HTTP1.0定義了三種請求方法:GET,POST和HEAD方法(最常用)

HTTP1.1新增了五種請求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

Django中的請求

請求在Django中實(shí)則就是 視圖函數(shù)的第一個(gè)參數(shù),即HttpRequest對象

Django接收到http協(xié)議的請求后,會根據(jù)請求數(shù)據(jù)報(bào)文創(chuàng)建HttpRequest對象

HttpRequest對象 通過屬性 描述了 請求的 所有相關(guān)信息

·path_info:URL字符串

·method:字符串,表示HTTP請求方法,常用值:`GET`、`POST`

·GETQueryDict查詢字典的對象,包含get請求方法的所有數(shù)據(jù)

·POST:QueryDict查詢字典的對象,包含post請求方式的所有數(shù)據(jù)

·FILES:類似于字典的對象,包含所有的上傳文件信息

·COOKIES:Python字典,包含所有的cookie,鍵和值都為字符串

·session:似于字典的對象,表示當(dāng)前的會話

·body:字符串,請求體的內(nèi)容(POST或PUT)

·scheme:請求協(xié)議('http'/'https')

·request.get_full_path():請求的完整路徑

·request.META:請求中的元數(shù)據(jù)(消息頭)

? - request.META['REMOTE_ADDR']:客戶端IP地址

http://127.0.0.1:8000/test_request?a=1&b=1
test request ok
終端
path info is /test_request
method is GET
querystring is 
full path is /test_request?a=1&b=1
[20/Dec/2021 23:27:09] "GET /test_request?a=1&b=1 HTTP/1.1" 200 15

 <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    path('test_request', views.test_request)
]

 <項(xiàng)目同名文件夾下>/views.py
def test_request(request):
    print('path info is', request.path_info)
    print('method is', request.method)
    print('querystring is', request.GET)
    print('full path is', request.get_full_path())
    return HttpResponse('test request ok')

響應(yīng)

響應(yīng)樣例

響應(yīng)樣例

響應(yīng)狀態(tài)碼

HTTP狀態(tài)碼的英文為HTTP Status Code

下面是常見的HTTP狀態(tài)碼:

- 200 - 請求成功

- 301 - 永久重定向-資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL

- 302 - 臨時(shí)重定向

- 404 - 請求的資源(網(wǎng)頁等)不存在

- 500 - 內(nèi)部服務(wù)器錯誤

HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:

Django中的響應(yīng)對象

構(gòu)造函數(shù)格式:

? HttpResponse(content=響應(yīng)體, content_type=響應(yīng)體數(shù)據(jù)類型, status=狀態(tài)碼)

作用:

? 向客戶端瀏覽器返回響應(yīng),同時(shí)攜帶響應(yīng)體內(nèi)容

常用的Conten-Type如下

- 'text/html'(默認(rèn)的,html文件)

- 'text/plain'(純文本)

- 'text/css'(css文件)

- 'text/javascript'(js文件)

- 'multipart/form-data'(文件提交)

- 'application/json'(json傳輸)

- 'application/xml'(xml文件)

------------------------------------------------------------------

HttpResponse子類

http://127.0.0.1:8000/test_request
  => http://127.0.0.1:8000/page/1

 <項(xiàng)目同名文件夾下>/urls.py
urlpatterns = [
    path('test_request', views.test_request)
]

 <項(xiàng)目同名文件夾下>/views.py
from django.http import HttpResponse, HttpResponseRedirect

def test_request(request):
    return HttpResponseRedirect('/page/1')


本文標(biāo)題:02_Django-路由配置-HTTP協(xié)議的請求和響應(yīng)
網(wǎng)頁鏈接:http://weahome.cn/article/dsojcoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部