首页 > 其他分享 >drf请求和响应、GenericAPIView封装、5个视图扩展类

drf请求和响应、GenericAPIView封装、5个视图扩展类

时间:2023-09-04 16:57:09浏览次数:34  
标签:GenericAPIView 响应 res request rest framework 视图 data drf

一、drf 之请求

1、drf 之请求Request类

视图类继承APIView后多了
-0 去除了csrf认证
-1 新的request
   -request.data
   -request.query_params
   -request.其他跟之前一样
   -request._request  是老的
-2 三大认证
-3 全局异常

2、控制前端请求的编码格式

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer

# JSONParser:解析json格式
# FormParser:urlencoded
# MultiPartParser:form-data

局部限制

写一个类属性 parser_classes = [JSONParser或者FormParser、MultiPartParser] 

class BookView(APIView):
    # 类属性
    parser_classes = [JSONParser]

    def get(self, request):
        res = Response(data={123}, status=500, headers={'xxx': 'yyy'})
        print(res.data)
        return res

    def post(self, request):
        print(self.parser_classes)
        print(request.data)
        return Response('新增')

效果:

全局限制

REST_FRAMEWORK = {
#####请求体的限制
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        # 'rest_framework.parsers.MultiPartParser'
    ],
#####响应格式的限制
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
}

补充:

全局使用后,局部再限制---》只需要在视图类上加即可

全局如果用了,局部这样配,优先用局部的,也就是这个类管理的接口,只能接收form-data格式 parser_classes = [MultiPartParser]

二、drf之响应

1、drf之Response对象源码

# from rest_framework.response import Response
### __init__ 中需要传这几个参数,不传也可以
data=None   # 字符串,列表,字典----》放在了响应 体 中 ---》第一个参数是它
status=None, # http响应状态码,默认是200,千万不能写成1xx
headers=None, # http响应头,后期我们可以往响应头中放数据

content_type=None # 响应编码格式(不用管,用浏览器访问就是:text/html,用postman就是:json格式)
template_name=None   # 模版名字  默认是:rest_framework/api.html  了解,可以定制自己返回的页面样子

###补充:后面会用---》通过res.data 就能取到当时放的datga
res=Response(data={},status=500,headers={'xxx':'yyy'})
print(res.data)
return res

### 补充:取当时放的响应头
res.headers 拿不到数据,可以通过下面的方式或得到
print(res['xxx'])
print(res.has_header('zzz'))

2、drf之响应格式

响应有编码格式:默认支持json和text/html(浏览器)

# 修改只支持json

### 局部使用
class BookView(APIView):
   	renderer_classes = [BrowsableAPIRenderer]

### 全局使用
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
}

##局部禁用---》全局已经配置了---》局部想用浏览器的样子
class BookView(APIView):
   	renderer_classes = [BrowsableAPIRenderer]
    
# 如果不配置---》有默认
	-解析:三种编码都能解析
    -响应:浏览器访问看到浏览器的样子,postman访问,看到json格式
    

  

三、

 

标签:GenericAPIView,响应,res,request,rest,framework,视图,data,drf
From: https://www.cnblogs.com/dgp-zjz/p/17677312.html

相关文章

  • drf请求
    drf请求之Request类1、新的request视图层的方法中的request都是这个类(fromrest_framework.requestimportRequest)的对象2、使用request.data取请求体中的数据(之前的Json传值request.body)3、使用request.query_params取请求参数中的数据4、其他属性,用起来和之前一样......
  • Prism视图模型定位器(ViewModelLocator)
    视图模型定位器(ViewModelLocator)依照“标准命名约定”将视图(View)中的数据上下文链接到视图模型(ViewModel)的实例。自动绑定视图模型Prism视图模型定位器(ViewModelLocator)有一个AutoWireViewModel属性:当设置为true时,AutoWireViewModelChanged事件调用类中的ViewMod......
  • 视图开发 命令式 声明式 将视图和数据分离
    10|Widget中的State到底是什么?https://time.geekbang.org/column/article/108576 下述代码分别展示了在Android、iOS及原生Javascript中,如何将一个文本控件的展示文案更改为HelloWorld://Android设置某文本控件展示文案为HelloWorldTextViewtextView=(TextView)f......
  • django+drf开发一些个人的标准化
    最近在改造一下个人的开发风格。特分享一下。子应用我一般放在apps中,每个不同模块的子应用起不同的名字。startapp后自己移动一下,记得修改一下Appconfig中的name即可。子应用中创建services.py或者如有需要可以创建services模块再细分。所有业务放到services中编写。views一律......
  • ORA-01031: insufficient privileges 19c跨用户视图查询 with grant option
    问题概述某客户从11.2.0.1升级迁移到19.16版本后,应用反应部分查询功能无法使用报无权限,数据库中增加了ORA-01031:insufficientprivileges跟踪event进行分析问题复现创建三个测试用户createusertest1identifiedbyoracle123;createusertest2identifiedbyoracle123;......
  • 同时创建作者和作者详情表,ModelSerializer使用,模块与包的使用,反序列化校验源码分析
    1同时创建作者和作者详情表1.1django项目改名字后顺利运行#1先改文件夹名#2改项目名#3改项目内的文件夹名#4替换掉所有文件中的drf_day04---》drf_day05#5命令行中启动:pythonmanage.pyrunserver#6setting--->django--->指定项目根路径1.1作者......
  • 同时创建一对一表关系字段(作者和作者详情为例)、ModelSerializer使用、模块与包的使用
    同时创建一对一表关系字段(作者和作者详情为例)序列化器#作者表序列化类classAuthorSerializer(serializers.Serializer):name=serializers.CharField(max_length=32)age=serializers.IntegerField()sex=serializers.CharField(max_length=16)addr......
  • drf-序列化组件
    一、序列化组件介绍基于原生django写接口:json格式数据要自己序列化,urlencoded:传过来的数据要用for循环来取出值,在定义成字典的形式,比较麻烦。借助于drf提供的序列化组件来完成快速序列化使用步骤:1先在配置文件中注册:INSTALLED_APPS=['rest_fram......
  • drf-day3
    内容回顾1、前端编码格式urlencoded:body体中:username=lqz&password=123 django 的request.POST取出值json格式:body体中:{"username":"lqz","password":"123"} django 的request.POST取不出值,从request.body-->自己做反序列化form-data:body中......
  • Python drf day02
    restful规范restful规范是什么,如何来的?是一种定义WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中的规范RoyFielding的博士论文提出的restful规范的具体内容1.数据的安全保障--》url链接一般都采用https协议进行传输,它比http安全2.接口特征表现--》url中带api......