• 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.(清楚优于含糊)
  • 相关阅读:
    数据结构和算法(Golang实现)(9)基础知识-算法复杂度及渐进符号
    基于深度学习方法的dota2游戏数据分析与胜率预测(python3.6+keras框架实现)
    基于CBOW网络手动实现面向中文语料的word2vec
    《Machine Learning Yearing》读书笔记
    使用神经网络预测航班起飞准点率
    使用LSTM-RNN建立股票预测模型
    基于selenium+phantomJS的动态网站全站爬取
    TensorFlow保存、加载模型参数 | 原理描述及踩坑经验总结
    学习笔记--python中使用多进程、多线程加速文本预处理
    通过外汇对冲手段稳定获利的可行性验证
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13969607.html
Copyright © 2020-2023  润新知