电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:21日期:2024-11-25 09:35:27
目錄1.查詢字符串數(shù)據(jù)(query string):2. 提取請求體數(shù)據(jù)2.1 表單類型請求體數(shù)據(jù)(Form Data)2.2 非表單類型請求體數(shù)據(jù)(Non-Form Data):JSON3. URL路徑參數(shù):提取URL路徑中的特定部分數(shù)據(jù)3.1 path()提取路徑參數(shù)3.2 re_path()提取路徑參數(shù)3.3 path()和re_path()如何選擇?4. 請求頭5. 其他常用HttpRequest對象屬性

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

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

1.查詢字符串數(shù)據(jù)(query string):

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

1)獲取請求路徑中的查詢字符串參數(shù),形如:?k1=v1&k2=v22)可以通過request.GET屬性獲取,并返回QueryDict類型的對象

class TestQuery(View): def get(self, request):# 獲取查詢字符串參數(shù)name、agename = request.GET.get(’name’, ’lx’)age = request.GET.get(’age’, ’0’)return HttpResponse(’查詢字符串參數(shù):%s %s’ % (name, age))

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

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

QueryDict補充:1)QueryDict是由Django自己封裝的一個數(shù)據(jù)類型,繼承自python的字典Dict,它被定義在django.http.QueryDict中專門用來存儲請求中提取的查詢字符串參數(shù)和請求體參數(shù).即,HttpRequest對象中的屬性GET、POST都是QueryDict類型的數(shù)據(jù)

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

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

2.1 表單類型請求體數(shù)據(jù)(Form Data)

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

class TestQuery(View): def post(self, request):# 獲取表單類型請求體參數(shù)中的username、passwordusername = request.POST.get(’username’)password = request.POST.get(’password’)return HttpResponse(’表單類型請求體參數(shù):%s %s’ % (username, password))

重要提示:

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

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

2.2 非表單類型請求體數(shù)據(jù)(Non-Form Data):JSON

1)非表單類型的請求體數(shù)據(jù),Django無法自動解析,可以通過request.body屬性獲取最原始的請求體數(shù)據(jù)2)request.body獲取的是bytes類型的請求體原始數(shù)據(jù)

class TestQuery(View): def post(self, request):# 獲取請求體中原始的JSON數(shù)據(jù)json_str = request.body# 使用json模塊將原始的JSON數(shù)據(jù)轉(zhuǎn)字典json_dict = json.loads(json_str)# 請求體參數(shù)中的username、passwordusername = json_dict.get(’username’)password = json_dict.get(’password’)return HttpResponse(’表單類型請求體參數(shù):%s %s’ % (username, password))

結(jié)果展示:

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

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

1)在定義路由時,可以從URL中獲取特定部分的路徑參數(shù)2)Django的路由系統(tǒng)會將提取的路徑參數(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/提取路徑中的手機號18500000000

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

測試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ù)是在路由中完成的,因為路徑是在路由系統(tǒng)中處理的print(’提取的路徑傳參:’,age)return HttpResponse(’path()提取普通路徑參數(shù):%s’ % age)

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

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

位置在django.urls.converters.py

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

源碼解析:

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

實現(xiàn)需求2

http://127.0.0.1:8000/pratice/register/18500000000/提取路徑中的手機號18500000000

問題:1)默認的路由轉(zhuǎn)換器中,沒有專門用來匹配手機號的路由轉(zhuǎn)換器2)所以在使用path()實現(xiàn)需求2時,就無法直接使用默認的路由轉(zhuǎn)換器解決方案:如果默認的路由轉(zhuǎn)換器無法滿足需求時,我們就需要自定義路由轉(zhuǎn)換器

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

from django.urls import path, register_converterfrom . import viewsclass MobileConverter: '''自定義路由轉(zhuǎn)換器:匹配手機號''' # 匹配手機號碼的正則 regex = ’1[3-9]d{9}’ def to_python(self, value): # 將匹配結(jié)果傳遞到視圖內(nèi)部時使用 return int(value) def to_url(self, value): # 將匹配結(jié)果用于反向解析傳值時使用 return str(value)# 注冊自定義路由轉(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ù)是在路由中完成的,因為路徑是在路由系統(tǒng)中處理的print(’提取的路徑傳參:’,phone_num)return HttpResponse(’path()提取普通路徑參數(shù):%s’ % phone_num)

效果展示

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

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ù)是在路由中完成的,因為路徑是在路由系統(tǒng)中處理的print(’提取的路徑傳參:’,phone_num)return HttpResponse(’path()提取普通路徑參數(shù):%s’ % phone_num)3.3 path()和re_path()如何選擇?

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

4. 請求頭

可以通過request.META屬性獲取請求頭headers中的數(shù)據(jù),request.META為字典類型。常見的請求頭如:

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): '''提取請求頭參數(shù)''' def get(self, request):# 獲取請求頭中文件的類型ret = request.META.get(’CONTENT_TYPE’)return http.HttpResponse(’go’)5. 其他常用HttpRequest對象屬性

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

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

標簽: Django
相關(guān)文章:
主站蜘蛛池模板: 华溶溶出仪-Memmert稳定箱-上海协烁仪器科技有限公司 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 运动木地板_体育木地板_篮球馆木地板_舞台木地板-实木运动地板厂家 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 升降炉_真空气氛炉_管式电阻炉厂家-山东中辰电炉有限公司 | 喷播机厂家_二手喷播机租赁_水泥浆洒布机-河南青山绿水机电设备有限公司 | 防渗膜厂家|养殖防渗膜|水产养殖防渗膜-泰安佳路通工程材料有限公司 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 合肥礼品公司-合肥礼品定制-商务礼品定制公司-安徽柏榽商贸有限公司 | 楼承板-开闭口楼承板-无锡海逵楼承板 | 陕西鹏展科技有限公司| 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 |