DRF 解析器和渲染器
一,DRF 解析器根据请求头 content-type 选择对应的解析器就请求体内容进行处理。 1. 仅处理请求头content-type为application/json的请求体 django.conf.urls web.views.s5_parser urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">test/<span style="color: #800000;">',TestView.as_view(),name=<span style="color: #800000;">'<span style="color: #800000;">test<span style="color: #800000;">'<span style="color: #000000;">),] rest_framework.views rest_framework.response rest_framework.request rest_framework.parsers <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
parser_classes =<span style="color: #000000;"> [JSONParser,]
?2.?仅处理请求头content-type为application/x-www-form-urlencoded?的请求体 django.conf.urls web.views urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">test/<span style="color: #800000;">',] <div class="cnblogs_code" onclick="cnblogs_code_show('cfbfe370-0b7c-46b0-8032-35bd8563a1e1')"> rest_framework.views rest_framework.response rest_framework.request rest_framework.parsers <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
3.?仅处理请求头content-type为multipart/form-data的请求体
django.conf.urls
rest_framework.views rest_framework.response rest_framework.request rest_framework.parsers <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
parser_classes =<span style="color: #000000;"> [MultiPartParser,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">print<span style="color: #000000;">(request.content_type)
Title
<span style="color: #0000ff;"></ <span style="color: #800000;">form<span style="color: #0000ff;">><span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">> <span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">> 4. 仅上传文件 django.conf.urls web.views urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">test/(?P rest_framework.views rest_framework.response rest_framework.request rest_framework.parsers <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
parser_classes =<span style="color: #000000;"> [FileUploadParser,filename,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">print<span style="color: #000000;">(filename) <span style="color: #0000ff;">print<span style="color: #000000;">(request.content_type)
Title
<span style="color: #0000ff;"></ <span style="color: #800000;">form<span style="color: #0000ff;">><span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">> <span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">> 5. 同时多个Parser 当同时使用多个parser时,rest framework会根据请求头content-type自动进行比对,并使用对应parser django.conf.urls
rest_framework.views rest_framework.response rest_framework.request rest_framework.parsers <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
parser_classes =<span style="color: #000000;"> [JSONParser,MultiPartParser,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">return Response(<span style="color: #800000;">'<span style="color: #800000;">PUT请求,响应内容<span style="color: #800000;">') 6. 全局使用 REST_FRAMEWORK =
}
django.conf.urls
rest_framework.views rest_framework.response <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
<span style="color: #0000ff;">def post(self,**<span style="color: #000000;">kwargs): <span style="color: #0000ff;">return Response(<span style="color: #800000;">'<span style="color: #800000;">PUT请求,响应内容<span style="color: #800000;">') 注意: 个别特殊的值可以通过Django的request对象request._request来进行获取 二,DRF 渲染器根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件。用户请求URL:
用户请求头:
1. json 访问URL:
django.conf.urls web.views urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">^test/$<span style="color: #800000;">'<span style="color: #000000;">,s11_render.TestView.as_view()),url(r<span style="color: #800000;">'<span style="color: #800000;">^test.(?P rest_framework.views rest_framework.response rest_framework <span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> JSONRenderer
<span style="color: #0000ff;">from .. <span style="color: #0000ff;">import<span style="color: #000000;"> models
<span style="color: #0000ff;">class<span style="color: #000000;"> TestSerializer(serializers.ModelSerializer):
<span style="color: #0000ff;">class<span style="color: #000000;"> Meta: model =<span style="color: #000000;"> models.UserInfo fields = <span style="color: #800000;">"<span style="color: #800000;">all<span style="color: #800000;">" <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
2. 表格 访问URL:
rest_framework.views rest_framework.response rest_framework <span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> AdminRenderer
<span style="color: #0000ff;">from .. <span style="color: #0000ff;">import<span style="color: #000000;"> models
<span style="color: #0000ff;">class<span style="color: #000000;"> TestSerializer(serializers.ModelSerializer):
<span style="color: #0000ff;">class<span style="color: #000000;"> Meta: model =<span style="color: #000000;"> models.UserInfo fields = <span style="color: #800000;">"<span style="color: #800000;">all<span style="color: #800000;">" <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView): 3. Form表单 访问URL:
rest_framework.views rest_framework.response rest_framework <span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> JSONRenderer
<span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> AdminRenderer <span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> HTMLFormRenderer <span style="color: #0000ff;">from .. <span style="color: #0000ff;">import<span style="color: #000000;"> models <span style="color: #0000ff;">class<span style="color: #000000;"> TestSerializer(serializers.ModelSerializer): <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView): 4. 自定义显示模板 访问URL:
django.conf.urls
rest_framework.views rest_framework.response rest_framework rest_framework.renderers <span style="color: #0000ff;">from .. <span style="color: #0000ff;">import<span style="color: #000000;"> models
<span style="color: #0000ff;">class<span style="color: #000000;"> TestSerializer(serializers.ModelSerializer):
<span style="color: #0000ff;">class<span style="color: #000000;"> Meta: model =<span style="color: #000000;"> models.UserInfo fields = <span style="color: #800000;">"<span style="color: #800000;">all<span style="color: #800000;">" <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView):
Title
5. 浏览器格式API+JSON 访问URL:
rest_framework.views rest_framework.response rest_framework <span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> JSONRenderer
<span style="color: #0000ff;">from rest_framework.renderers <span style="color: #0000ff;">import<span style="color: #000000;"> BrowsableAPIRenderer <span style="color: #0000ff;">from .. <span style="color: #0000ff;">import<span style="color: #000000;"> models <span style="color: #0000ff;">class<span style="color: #000000;"> TestSerializer(serializers.ModelSerializer): <span style="color: #0000ff;">class<span style="color: #000000;"> CustomBrowsableAPIRenderer(BrowsableAPIRenderer): <span style="color: #0000ff;">class<span style="color: #000000;"> TestView(APIView): 注意:如果同时多个存在时,自动根据URL后缀来选择渲染器。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |