zoukankan      html  css  js  c++  java
  • REST-Framework: 响应器

    Rest-Framework之前有篇博客有专门介绍解析器和响应的我们在这里介绍怎么应用Rest-Framewor中的响应器组件,他们的应用并不广泛, 只是在有需求的项目中才会出现,一般用默认的就可以了

    一 作用

    根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件。
    用户请求URL:
        http://127.0.0.1:8000/test/?format=json
        http://127.0.0.1:8000/test.json

    二 内置渲染器

    显示json格式:JSONRenderer

    访问URL:

    • http://127.0.0.1:8000/test/?format=json

    • http://127.0.0.1:8000/test.json

    • http://127.0.0.1:8000/test/

    默认显示格式:BrowsableAPIRenderer(可以修改它的html文件)

    访问URL:

    • http://127.0.0.1:8000/test/?format=api

    • http://127.0.0.1:8000/test.api

    • http://127.0.0.1:8000/test/

    表格方式:AdminRenderer

    访问URL:

    • http://127.0.0.1:8000/test/?format=admin

    • http://127.0.0.1:8000/test.admin

    • http://127.0.0.1:8000/test/

    form表单方式:HTMLFormRenderer

    访问URL:

    • http://127.0.0.1:8000/test/?format=form

    • http://127.0.0.1:8000/test.form

    • http://127.0.0.1:8000/test/

    三 局部使用

    from rest_framework.renderers import HTMLFormRenderer,BrowsableAPIRenderer
    
    class BookDetailView(APIView):
    
    renderer_classes = [HTMLFormRenderer,BrowsableAPIRenderer ]
    
    def get(self,request,pk):
    
    book_obj=models.Book.objects.filter(pk=pk).first()
    
    bs=BookSerializers(book_obj,many=False)
    
    return Response(bs.data)
    
    def put(self,request,pk):
    
    book_obj = models.Book.objects.filter(pk=pk).first()
    
    
    
    bs=BookSerializers(data=request.data,instance=book_obj)
    
    if bs.is_valid():
    
    bs.save() # update
    
    return Response(bs.data)
    
    else:
    
    return Response(bs.errors)
    
    def delete(self,request,pk):
    
    models.Book.objects.filter(pk=pk).delete()
    
    
    
    return Response("")

    四 全局使用

    settings里配置:

    REST_FRAMEWORK = {
    
    'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer']
    
    }

    五 自定义显示模版

    from rest_framework.renderers import TemplateHTMLRenderer
    
    class BookDetailView(APIView):
    
    renderer_classes = [TemplateHTMLRenderer]
    
    def get(self,request,pk):
    
    book_obj=models.Book.objects.filter(pk=pk).first()
    
    bs=BookSerializers(book_obj,many=False)
    
    return Response(bs.data,template_name='aa.html')
    <!DOCTYPE html>
    
    <html lang="en">
    
    <head>
    
    <meta charset="UTF-8">
    
    <title>Title</title>
    
    </head>
    
    <body>
    
    {{ title }}
    
    {{ publishDate }}
    
    </body>
    
    </html>

     封装response对象

    1 以后都使用自己封装的response
    class APIResponse(Response):
        def __init__(self, code=100, msg='成功', data=None, status=None, headers=None, content_type=None, **kwargs):
            dic = {'code': code, 'msg': msg}
            if data:
                dic['data'] = data
    
            dic.update(kwargs) # 这里使用update
            super().__init__(data=dic, status=status,
                             template_name=None, headers=headers,
                             exception=False, content_type=content_type)
    2 使用:
        return APIResponse(code=100,msg='查询成功',data=ser.data,count=200,next='http://wwwa.asdfas')
    View Code
    每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
  • 相关阅读:
    打印杨辉三角
    插值排序
    各种冒泡排序法
    Linux系统命令符01
    2.1博客系统 |基于form组件和Ajax实现注册登录
    python面试笔试题,你都会了吗?快来复习
    1.2博客系统 |登录页| 验证码
    1.1博客系统| 表结构
    第五章:5.2面向对象-绑定方法和非绑定方法| 内置方法 |元类
    11.Django|中间件
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13969607.html
Copyright © 2011-2022 走看看