亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Django REST framework學習筆記(3)-請求和響應

                Django REST framework在Django原有的基礎上,新增了一個request對象繼承了APIView視圖類,并在原有的HttpResponse響應類的基礎上實現(xiàn)了一個子類Response響應類,這2個類,都是基于內容協(xié)商來完成數(shù)據(jù)的格式轉換的。

                REST framework傳入視圖的request對象不再是Django默認的HttpRequest對象,而是REST framework提供的擴展了HttpRequest類的Request類的對象。

                REST framework提供了Parser解析器,在接收到請求后會自動根據(jù)Content-Type指明的請求數(shù)據(jù)類型(如JSON、表單等)將請求數(shù)據(jù)進行parse解析,解析為類字典[QueryDict]對象保存到Request對象中。

                request -> parser ->識別客戶端請求頭中的Content-Type來完成數(shù)據(jù)轉換成->類字典(QueryDict,字典的子類)

                Response -> renderer ->識別客戶端請求頭的Accept來提取客戶期望的返回數(shù)據(jù)格式,轉換成客戶端的期望格式數(shù)據(jù)

                Request

                REST framework引入了一個擴展常規(guī)HttpRequest的Request對象,并提供了更靈活的請求解析。允許你使用JSON data或 其他media types像通常處理表單數(shù)據(jù)一樣處理請求。

                常用屬性

                1 request.data返回請求主題的解析內容。這跟標準的request.POST和request.FILES類似,并且還具有以下特點:

                • 包括所有解析的內容,文件(file) 和 非文件(non-file inputs)。
                • 支持解析POST以外的HTTP method , 比如 PUT, PATCH。
                • 更加靈活,不僅僅支持表單數(shù)據(jù),傳入同樣的JSON數(shù)據(jù)一樣可以正確解析,并且不用做額外的處理(意思是前端不管提交的是表單數(shù)據(jù),還是JSON數(shù)據(jù),.data都能夠正確解析)。

                request.POST # 只處理表單數(shù)據(jù) 只適用于’POST’方法 request.data # 處理任意數(shù)據(jù) 適用于’POST’,’PUT’和’PATCH’方法

                2 request.query_params等同于request.GET,不過其名字更加容易理解。為了代碼更加清晰可讀,推薦使用request.query_params ,而不是Django中的request.GET,這樣能夠讓你的代碼更加明顯的體現(xiàn)出任何HTTP method類型都可能包含查詢參數(shù)(query parameters),而不僅僅只是GET請求。

                3 request._request獲取django封裝的Request對象

                由于REST framework的Request擴展于Django的HttpRequest,所有其他標準屬性和方法也可用。例如request.META和 request.session字典都可以正常使用。

                #基本使用 from rest_framework.views import APIView #from rest_framework.request import Request from rest_framework.response import Response class StuAPIView(APIView): def post(self, request): “””獲取請求體數(shù)據(jù)””” print(f”drf.request.data={request.data}”) # 接受的數(shù)據(jù)會解析成字典 # json: drf.request.data={‘name’: ‘you1’, ‘desc’: ‘hello world’} # form表單: drf.request.data= “””獲取查詢參數(shù)””” print(f”drf.request.query_params={request.query_params}”) # return Response({“msg”: “ok”})

                Response

                REST框架還引入了一個Response對象,使用該類構造響應對象時,響應的具體數(shù)據(jù)內容會被轉換(render渲染)成符合前端需求的類型。

                REST framework提供了renderer渲染器,用來根據(jù)請求頭中的Accept(接收數(shù)據(jù)類型聲明)來自動轉換響應數(shù)據(jù)到對應格式,如果前端請求中未聲明Accept,則采用Content-Type方式處理響應數(shù)據(jù)。

                # 由于是默認的配置,所以settings配置文件中可以不配置以下選項 REST_FRAMEWORK = { ‘DEFAULT_RENDERER_CLASSES’: [ #默認響應渲染類 ‘rest_framework.renderers.JSONRenderer’, #json渲染器 ‘rest_framework.renderers.BrowsableAPIRenderer’, #瀏覽器渲染器,有調試界面 ] } #構造方法 Response(data, status=None, template_name=None, headers=None, content_type=None) #參數(shù): data: 響應的序列化數(shù)據(jù)。 status: 響應的狀態(tài)代碼。默認為200。 template_name: 選擇 HTMLRenderer 時使用的模板名稱。 headers: 設置 HTTP header,字典類型。 content_type: 響應的內容類型,通常渲染器會根據(jù)內容協(xié)商的結果自動設置,但有些時候需要手動指定。 #比較完整的使用 response={‘code’:100,’msg’:’查詢成功’,’result’:ser.data} return Response(response,status=status.HTTP_201_CREATED,headers={‘xxx’:”xxx”})

                常用屬性

              1. .data:還沒有渲染,但已經序列化的響應數(shù)據(jù)。
              2. .status_code:狀態(tài)碼
              3. .content:將會返回的響應內容,必須先調用 .render() 方法,才能訪問 .content
              4. .template_name:只有在 response 的渲染器是 HTMLRenderer 或其他自定義模板渲染器時才需要提供
              5. .accepted_renderer:用于將會返回的響應內容的渲染器實例從視圖返回響應之前由 APIView 或 @api_view 自動設置。
              6. .accepted_media_type:內容協(xié)商階段選擇的媒體類型從視圖返回響應之前由 APIView 或 @api_view 自動設置。
              7. .renderer_context:將傳遞給渲染器的 .render() 方法的附加的上下文信息字典從視圖返回響應之前由 APIView 或 @api_view 自動設置。
              8. 狀態(tài)碼

                為了方便設置狀態(tài)碼,REST framewrok在rest_framework.status模塊中提供了常用狀態(tài)碼常量。

                from rest_framework import status #1.信息告知 – 1xx HTTP_100_CONTINUE HTTP_101_SWITCHING_PROTOCOLS #2.成功 – 2xx HTTP_200_OK HTTP_201_CREATED HTTP_202_ACCEPTED HTTP_203_NON_AUTHORITATIVE_INFORMATION HTTP_204_NO_CONTENT HTTP_205_RESET_CONTENT HTTP_206_PARTIAL_CONTENT HTTP_207_MULTI_STATUS #3.重定向 – 3xx HTTP_300_MULTIPLE_CHOICES HTTP_301_MOVED_PERMANENTLY HTTP_302_FOUND HTTP_303_SEE_OTHER HTTP_304_NOT_MODIFIED HTTP_305_USE_PROXY HTTP_306_RESERVED HTTP_307_TEMPORARY_REDIRECT #4.客戶端錯誤 – 4xx HTTP_400_BAD_REQUEST HTTP_401_UNAUTHORIZED HTTP_402_PAYMENT_REQUIRED HTTP_403_FORBIDDEN HTTP_404_NOT_FOUND HTTP_405_METHOD_NOT_ALLOWED HTTP_406_NOT_ACCEPTABLE HTTP_407_PROXY_AUTHENTICATION_REQUIRED HTTP_408_REQUEST_TIMEOUT HTTP_409_CONFLICT HTTP_410_GONE HTTP_411_LENGTH_REQUIRED HTTP_412_PRECONDITION_FAILED HTTP_413_REQUEST_ENTITY_TOO_LARGE HTTP_414_REQUEST_URI_TOO_LONG HTTP_415_UNSUPPORTED_MEDIA_TYPE HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE HTTP_417_EXPECTATION_FAILED HTTP_422_UNPROCESSABLE_ENTITY HTTP_423_LOCKED HTTP_424_FAILED_DEPENDENCY HTTP_428_PRECONDITION_REQUIRED HTTP_429_TOO_MANY_REQUESTS HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS #5.服務器錯誤 – 5xx HTTP_500_INTERNAL_SERVER_ERROR HTTP_501_NOT_IMPLEMENTED HTTP_502_BAD_GATEWAY HTTP_503_SERVICE_UNAVAILABLE HTTP_504_GATEWAY_TIMEOUT HTTP_505_HTTP_VERSION_NOT_SUPPORTED HTTP_507_INSUFFICIENT_STORAGE HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

                封裝Response

                參考鏈接:https://www.jianshu.com/p/c0be24752584

                #1.response.py from rest_framework.response import Response class APIResponse(Response): def __init__(self, code=100, msg=’成功’, data=None, status=None, headers=None, exception=False, content_type=None, **kwargs): dic = {‘code’: code, ‘msg’: msg} if data: #如果data有值,說明要往里面放東西 dic[‘data’] = data if kwargs: #自定義傳的參數(shù)會添加到字典里 dic.update(kwargs) super().__init__(data=dic, status=status, headers=headers, exception=exception, content_type=content_type) #2.在視圖中使用 from .response import APIResponse return APIResponse(data={‘name’: ‘fana’, ‘age’: 19})

                解析器

                REST framework 包含許多內置的解析器類,允許接受各種媒體類型(media types)的請求。還支持自定義解析器,這使你可以靈活地設計 API 接受的媒體類型。

                #1.settings.py #查看默認解析器 from rest_framework import settings REST_FRAMEWORK = { ‘DEFAULT_RENDERER_CLASSES’: [ #渲染器 ‘rest_framework.renderers.JSONRenderer’, ‘rest_framework.renderers.TemplateHTMLRenderer’, ], ‘DEFAULT_PARSER_CLASSES’: [ #解析器 ‘rest_framework.parsers.JSONParser’, ‘rest_framework.parsers.FormParser’, ‘rest_framework.parsers.MultiPartParser’, ], }

                YAML

                GitHub:https://jpadilla.github.io/django-rest-framework-yaml

                REST framework YAML提供YAML解析和渲染支持。它以前直接包含在REST framework包中,現(xiàn)在作為第三方包

                #1.安裝模塊 pip install djangorestframework-yaml #2.settings.py REST_FRAMEWORK = { ‘DEFAULT_PARSER_CLASSES’: ( ‘rest_framework_yaml.parsers.YAMLParser’, ), ‘DEFAULT_RENDERER_CLASSES’: ( ‘rest_framework_yaml.renderers.YAMLRenderer’, ), }

                XML

                GitHub:https://jpadilla.github.io/django-rest-framework-xml/

                REST Framework XML提供了一種簡單的非正式XML格式。它以前直接包含在REST framework包中,現(xiàn)在作為第三方包。

                #1.安裝模塊 pip install djangorestframework-xml #2.settings.py REST_FRAMEWORK = { ‘DEFAULT_PARSER_CLASSES’: ( ‘rest_framework_xml.parsers.XMLParser’, ), ‘DEFAULT_RENDERER_CLASSES’: ( ‘rest_framework_xml.renderers.XMLRenderer’, ), }

                鄭重聲明:本文內容及圖片均整理自互聯(lián)網,不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年7月4日 21:15
                下一篇 2022年7月4日 21:15

                相關推薦

                • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應該怎么發(fā))

                  對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

                  2022年11月27日
                • 短視頻策劃內容的3個要點(短視頻策劃內容怎么做)

                  短視頻在制作時,內容框架非常重要。如果直奔主題,然后結束,聚卓告訴你,這樣的短視頻已經過時了。現(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

                  2022年11月27日
                • 《寶可夢朱紫》夢特性怎么獲得?隱藏特性獲取方法推薦

                  寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

                  2022年11月25日
                • 《寶可夢朱紫》奇魯莉安怎么進化?奇魯莉安進化方法分享

                  寶可夢朱紫中的奇魯莉安要怎么進化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進化方法分享 奇魯莉安…

                  2022年11月25日
                • 小紅書平臺的一些機制及玩法詳解(小紅書玩法有哪些)

                  關于小紅書 一:小紅書平臺的一些機制 1. 筆記內容的CES評分機制 2. 筆記流量入口與長尾效應 二:小紅書優(yōu)質筆記的特點(分維度、類型分析) 1.筆記的本身架構組成 維度 2.…

                  2022年11月25日
                • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

                  CPA渠道 CPA指的是按照指定的行為結算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實名認證,可以是付費,可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

                  2022年11月25日
                • 博客營銷的3大優(yōu)勢解析(博客營銷怎么做)

                  不知不覺已經寫了24篇文章,加上這篇是第25篇了,都是自己這幾年來用過的營銷方法,如果遇到有些不懂的,我會咨詢我的朋友和同事幫忙,盡量讓每一篇有價值,哪怕是對大家有一點點幫助也行,…

                  2022年11月25日
                • 什么是內容營銷策略如何策劃一套成功的內容營銷策略

                  很多時候,營銷人員會在創(chuàng)作營銷內容時感到沮喪,這也是很多企業(yè)至今沒用好數(shù)字化營銷工具的重要原因之一。 舉個例子,您可能會花上數(shù)小時期待制作一些令人驚嘆的東西,實際卻是得到很少的受眾…

                  2022年11月25日
                • 直播帶貨詳細腳本(直播文案策劃怎么寫)

                  短視頻運營策劃方案怎么寫?涉及哪幾個方面? 我在網上看到好多千篇一律的文章,關于【短視頻運營策劃方案】這一塊,基本都是在講賬號的內容本身。 你內容做得再好,卻不掌握算法的規(guī)律,能有…

                  2022年11月25日
                • 閑魚上怎么賣東西快?閑魚賺錢必知技巧(怎么在閑魚里面賣東西)

                  自從閑魚這個平臺出現(xiàn)以后,隨著這些年的發(fā)展,閑魚也成為了很多人開店賺錢的重要途徑。一些新人也想在閑魚上試試水,看看能不能賺到錢。如今閑魚上既可以賣二手閑置物品,也可以賣一些新品,那…

                  2022年11月25日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息