欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)

 更新時(shí)間:2021年08月17日 09:42:32   作者:季布,  
本文主要介紹了Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié),用戶(hù)發(fā)送請(qǐng)求時(shí)攜帶的參數(shù)后端需要使用,而不同的發(fā)送參數(shù)的方式對(duì)應(yīng)了不同的提取參數(shù)的方式,本文就詳細(xì)的介紹一下

用戶(hù)發(fā)送請(qǐng)求時(shí)攜帶的參數(shù)后端需要使用,而不同的發(fā)送參數(shù)的方式對(duì)應(yīng)了不同的提取參數(shù)的方式

利用HTTP協(xié)議向服務(wù)器傳參有幾種途徑?

1.查詢(xún)字符串?dāng)?shù)據(jù)(query string):

形如:?key1=value1&key2=value2
比如:http://127.0.0.1:8000/?name =lx&age=0中的?name =lx

1)獲取請(qǐng)求路徑中的查詢(xún)字符串參數(shù),形如:?k1=v1&k2=v2
2)可以通過(guò)request.GET屬性獲取,并返回QueryDict類(lèi)型的對(duì)象

class TestQuery(View):

    def get(self, request):
        # 獲取查詢(xún)字符串參數(shù)name、age
        name = request.GET.get('name', 'lx')
        age = request.GET.get('age', '0')

        return HttpResponse('查詢(xún)字符串參數(shù):%s  %s' % (name, age))

在這里插入圖片描述

重要提示:
提取查詢(xún)字符串參數(shù)不區(qū)分請(qǐng)求方式,即使客戶(hù)端進(jìn)行POST方式的請(qǐng)求,依然可以通過(guò)request.GET獲取請(qǐng)求中的查詢(xún)字符串參數(shù)。

QueryDict補(bǔ)充:
1)QueryDict是由Django自己封裝的一個(gè)數(shù)據(jù)類(lèi)型,繼承自python的字典Dict,它被定義在django.http.QueryDict中專(zhuān)門(mén)用來(lái)存儲(chǔ)請(qǐng)求中提取的查詢(xún)字符串參數(shù)和請(qǐng)求體參數(shù).即,HttpRequest對(duì)象中的屬性GET、POST都是QueryDict類(lèi)型的數(shù)據(jù)

2. 提取請(qǐng)求體數(shù)據(jù)

1)可以發(fā)送請(qǐng)求體數(shù)據(jù)的請(qǐng)求方式有:POST、PUT、PATCH、DELETE
2)請(qǐng)求體數(shù)據(jù)格式不固定,常見(jiàn)的有:表單類(lèi)型數(shù)據(jù)和JSON字符串類(lèi)型,我們應(yīng)區(qū)別對(duì)待

2.1 表單類(lèi)型請(qǐng)求體數(shù)據(jù)(Form Data)

前端發(fā)送的表單類(lèi)型的請(qǐng)求體數(shù)據(jù),可以通過(guò)request.POST屬性獲取,并返回QueryDict對(duì)象。

class TestQuery(View):

    def post(self, request):
        # 獲取表單類(lèi)型請(qǐng)求體參數(shù)中的username、password
        username = request.POST.get('username')
        password = request.POST.get('password')

        return HttpResponse('表單類(lèi)型請(qǐng)求體參數(shù):%s  %s' % (username, password))

重要提示:

request.POST只能用來(lái)獲取POST表單發(fā)送的請(qǐng)求體數(shù)據(jù)

在這里插入圖片描述

2.2 非表單類(lèi)型請(qǐng)求體數(shù)據(jù)(Non-Form Data):JSON

1)非表單類(lèi)型的請(qǐng)求體數(shù)據(jù),Django無(wú)法自動(dòng)解析,可以通過(guò)request.body屬性獲取最原始的請(qǐng)求體數(shù)據(jù)
2)request.body獲取的是bytes類(lèi)型的請(qǐng)求體原始數(shù)據(jù)

class TestQuery(View):

    def post(self, request):
        # 獲取請(qǐng)求體中原始的JSON數(shù)據(jù)
        json_str = request.body
        # 使用json模塊將原始的JSON數(shù)據(jù)轉(zhuǎn)字典
        json_dict = json.loads(json_str)
        # 請(qǐng)求體參數(shù)中的username、password
        username = json_dict.get('username')
        password = json_dict.get('password')

        return HttpResponse('表單類(lèi)型請(qǐng)求體參數(shù):%s  %s' % (username, password))

結(jié)果展示:

在這里插入圖片描述

3. URL路徑參數(shù):提取URL路徑中的特定部分?jǐn)?shù)據(jù)

1)在定義路由時(shí),可以從URL中獲取特定部分的路徑參數(shù)
2)Django的路由系統(tǒng)會(huì)將提取的路徑參數(shù)傳遞到視圖的內(nèi)部
3)path()和re_path()都可以提取路徑參數(shù)

需求1:http://127.0.0.1:8000/pratice/register/18/
提取路徑中的數(shù)字18
需求2:http://127.0.0.1:8000/pratice/register/18500000000/
提取路徑中的手機(jī)號(hào)18500000000

3.1 path()提取路徑參數(shù)

測(cè)試path()提取普通路徑參數(shù):http://127.0.0.1:8000/pratice/register/18/
path(‘pratice/register/int:age/', views.URLParam1View.as_view()),

class TestQuery(View):

    def get(self, request, age):
        #提取路徑參數(shù)是在路由中完成的,因?yàn)槁窂绞窃诼酚上到y(tǒng)中處理的
        print('提取的路徑傳參:',age)
        return HttpResponse('path()提取普通路徑參數(shù):%s' % age)

在這里插入圖片描述

路由中提取路徑參數(shù)時(shí),使用的關(guān)鍵字,必須跟視圖中參數(shù)名一致
思考:
實(shí)現(xiàn)需求1時(shí)提取age數(shù)字的int:age是什么?
路由轉(zhuǎn)換器
Django默認(rèn)封裝了一些正則表達(dá)式,用于在path()中要提取路徑參數(shù)時(shí)使用
默認(rèn)的路由轉(zhuǎn)換器:

位置在django.urls.converters.py

DEFAULT_CONVERTERS = {
    'int': IntConverter(), # 匹配正整數(shù),包含0
    'path': PathConverter(), # 匹配任何非空字符串,包含了路徑分隔符
    'slug': SlugConverter(), # 匹配字母、數(shù)字以及橫杠、下劃線組成的字符串
    'str': StringConverter(), # 匹配除了路徑分隔符(/)之外的非空字符串,這是默認(rèn)的形式
    'uuid': UUIDConverter(), # 匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00
}

源碼解析:

在這里插入圖片描述

實(shí)現(xiàn)需求2

http://127.0.0.1:8000/pratice/register/18500000000/
提取路徑中的手機(jī)號(hào)18500000000

問(wèn)題:
1)默認(rèn)的路由轉(zhuǎn)換器中,沒(méi)有專(zhuān)門(mén)用來(lái)匹配手機(jī)號(hào)的路由轉(zhuǎn)換器
2)所以在使用path()實(shí)現(xiàn)需求2時(shí),就無(wú)法直接使用默認(rèn)的路由轉(zhuǎn)換器
解決方案:
如果默認(rèn)的路由轉(zhuǎn)換器無(wú)法滿(mǎn)足需求時(shí),我們就需要自定義路由轉(zhuǎn)換器

在任意可以被導(dǎo)入的python文件中,都可以自定義路由轉(zhuǎn)換器

from django.urls import path, register_converter
from . import views
class MobileConverter:
  """自定義路由轉(zhuǎn)換器:匹配手機(jī)號(hào)"""
  # 匹配手機(jī)號(hào)碼的正則
  regex = '1[3-9]\d{9}'

  def to_python(self, value):
      # 將匹配結(jié)果傳遞到視圖內(nèi)部時(shí)使用
      return int(value)

  def to_url(self, value):
      # 將匹配結(jié)果用于反向解析傳值時(shí)使用
      return str(value)

# 注冊(cè)自定義路由轉(zhuǎn)換器
# register_converter(自定義路由轉(zhuǎn)換器, '別名')
register_converter(MobileConverter, 'mobile')

urlpatterns = [
    # path('pratice/register/<‘路由轉(zhuǎn)換器':<變量>, views.TestQuery.as_view()),
    # path('pratice/register/<int:age>', views.TestQuery.as_view()),
    path('pratice/register/<mobile:phone_num>', views.TestQuery.as_view()),
]
class TestQuery(View):

    def get(self, request,phone_num):
        #提取路徑參數(shù)是在路由中完成的,因?yàn)槁窂绞窃诼酚上到y(tǒng)中處理的
        print('提取的路徑傳參:',phone_num)
        return HttpResponse('path()提取普通路徑參數(shù):%s' % phone_num)

效果展示

在這里插入圖片描述

3.2 re_path()提取路徑參數(shù)

re_path(r'^pratice/register/(?P<phone_num>1[3-9]\d{9})/$', views.TestQuery.as_view()),
class TestQuery(View):

    def get(self, request,phone_num):
        #提取路徑參數(shù)是在路由中完成的,因?yàn)槁窂绞窃诼酚上到y(tǒng)中處理的
        print('提取的路徑傳參:',phone_num)
        return HttpResponse('path()提取普通路徑參數(shù):%s' % phone_num)

3.3 path()和re_path()如何選擇?

1)path()語(yǔ)法相對(duì)簡(jiǎn)潔一些,如果沒(méi)有路徑參數(shù)要提取或者要提取的路徑參數(shù)可以使用默認(rèn)的路由轉(zhuǎn)換器實(shí)現(xiàn)時(shí),就選擇path()。
2)re_path()語(yǔ)法相對(duì)復(fù)雜一些,但是,如果希望在匹配路由時(shí),由自己編寫(xiě)所有的正則式,就選擇re_path()。
需要注意的是,在使用re_path()時(shí),網(wǎng)絡(luò)地址正則表達(dá)式一定要寫(xiě)完整,要有嚴(yán)格的開(kāi)頭和結(jié)尾

4. 請(qǐng)求頭

可以通過(guò)request.META屬性獲取請(qǐng)求頭headers中的數(shù)據(jù),request.META為字典類(lèi)型。
常見(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).
class HeadersParamView(View):
    """提取請(qǐng)求頭參數(shù)"""

    def get(self, request):
        # 獲取請(qǐng)求頭中文件的類(lèi)型
        ret = request.META.get('CONTENT_TYPE')
        return http.HttpResponse('go')

5. 其他常用HttpRequest對(duì)象屬性

method:一個(gè)字符串,表示請(qǐng)求使用的HTTP方法,常用值包括:'GET'、'POST'。
FILES:一個(gè)類(lèi)似于字典的對(duì)象,包含所有的上傳文件。
COOKIES:一個(gè)字符串,包含了瀏覽器自動(dòng)發(fā)送的cookie緩存數(shù)據(jù)。
user:請(qǐng)求中認(rèn)證出來(lái)的用戶(hù)對(duì)象。

到此這篇關(guān)于Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)的文章就介紹到這了,更多相關(guān)Django HTTP協(xié)議向服務(wù)器傳參內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 跟老齊學(xué)Python之有容乃大的list(2)

    跟老齊學(xué)Python之有容乃大的list(2)

    上一篇文章中,我們對(duì)list的操作提到了list.append(x),也就是將某個(gè)元素x 追加到已知的一個(gè)list后邊。今天我們來(lái)繼續(xù)討論list。
    2014-09-09
  • 用Python實(shí)現(xiàn)職工信息管理系統(tǒng)

    用Python實(shí)現(xiàn)職工信息管理系統(tǒng)

    這篇文章主要介紹了用Python實(shí)現(xiàn)職工信息管理系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 基于keras中的回調(diào)函數(shù)用法說(shuō)明

    基于keras中的回調(diào)函數(shù)用法說(shuō)明

    這篇文章主要介紹了基于keras中的回調(diào)函數(shù)用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python hashlib模塊實(shí)例使用詳解

    Python hashlib模塊實(shí)例使用詳解

    這篇文章主要介紹了Python hashlib模塊實(shí)例使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列queue用法詳解

    Python數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級(jí)隊(duì)列queue用法詳解

    queue庫(kù)提供了一個(gè)適用于多線程編程的先進(jìn)先出(FIFO)數(shù)據(jù)結(jié)構(gòu),可以用來(lái)在生產(chǎn)者與消費(fèi)者線程之間安全地傳遞消息或其他數(shù)據(jù),它會(huì)為調(diào)用者處理鎖定,使多個(gè)線程可以安全而更容易地處理同一個(gè)Queue實(shí)例.Queue的大小可能受限,以限制內(nèi)存使用或處理,需要的朋友可以參考下
    2021-05-05
  • Pytest+Yaml+Excel?接口自動(dòng)化測(cè)試框架的實(shí)現(xiàn)示例

    Pytest+Yaml+Excel?接口自動(dòng)化測(cè)試框架的實(shí)現(xiàn)示例

    本文主要介紹了Pytest+Yaml+Excel?接口自動(dòng)化測(cè)試框架,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Django開(kāi)發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門(mén)級(jí))

    Django開(kāi)發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門(mén)級(jí))

    這篇文章主要介紹了Django開(kāi)發(fā)RESTful API實(shí)現(xiàn)增刪改查(入門(mén)級(jí)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python使用json.dumps輸出中文問(wèn)題

    python使用json.dumps輸出中文問(wèn)題

    這篇文章主要介紹了python使用json.dumps輸出中文問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 用python計(jì)算文件的MD5值

    用python計(jì)算文件的MD5值

    這篇文章主要介紹了用python計(jì)算文件的MD5值的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 簡(jiǎn)單了解python的break、continue、pass

    簡(jiǎn)單了解python的break、continue、pass

    這篇文章主要介紹了簡(jiǎn)單了解python的break、continue、pass,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論