关键字assert
断言结果,如果不是就抛异常
a = 10
## assert 后写条件,只要不符合条件,就会抛AssertionError异常,后面写异常信息
assert a == 11, ("不等于11,报错了")
# 等同于---》上面只要一行代码,源码中喜欢用
if not a == 11:
raise Exception('不等于11,报错了')
# 源码中使用
assert value is not None, '.validate() should return the validated data'
方式一:局部配置
必须在继承APIview及其子类的视图中配置
from rest_framework.parsers import JSONParser,FormParser,MultiPartParser
class BookView(APIView):
parser_classes = [JSONParser,]
方式二:全局配置
在配置文件中配置(影响所有,全局配置)
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser', # 默认json默认
'rest_framework.parsers.FormParser', # 默认urlencoded编码
'rest_framework.parsers.MultiPartParser', # 默认form_data编码
],
}
方式三
如果全局配了1个,某个视图类想要3个,如何配置?
1.全局配置不用动,只需要在视图类中配置能够解析前端数据的3种编码格式
2.视图类中,查询的顺序:视图类自身——>项目drf配置——>drf默认配置
drf是django的一个app,所有要先注册的,drf的响应,如果使用浏览器和postman访问同一个接口,返回格式是不一样的
方式一: 在视图类中写-----局部配置
# 响应格式
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
class BookView(APIView):
renderer_classes=[JSONRenderer,]
方式二:在项目配置文件中写—全局配置
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
}
方式三:
使用顺序(一般就用内置的即可)
使用顺序:视图类自身配置——>项目drf配置——>drf默认内置的配置
源码解析
from rest_framework.response import Response
视图类的方法返回时,retrun Response ,走它的__init__方法,init中可以传参数
属性或方法
1.__init__方法
def __init__(self,
data=None,
status=None,
template_name=None,
headers=None,
exception=False,
content_type=None)
super().__init__(None, status=status)
if isinstance(data, Serializer):
msg = (.....)
raise AssertionError(msg)
self.data = data
self.template_name = template_name
self.exception = exception
self.content_type = content_type
if headers:
for name, value in headers.items():
self[name] = value
参数解析
1.data
前面写的ser.data,可以是字典/列表/字符串,序列化后返回给前端,前端在响应体中看到就是ser.data序列化后的格式
2.status
http响应的状态码,默认是200----可以修改
-drf在status包下,把所有http响应状态码都写了一遍,常量
-from rest_framework.status import HTTP_200_OK
-Response('dddd',status=status.HTTP_200_OK)
3.template_name方法
上述方法了解即可,它修改响应模板的样子,BrowsableAPIRenderer定死的样子,后期公司可以自己定制。
4.headers
响应头,http响应的响应头
如何在原生的django的响应头添加东西
# 四件套 render redirect HttpResponse JsonResponse
obj=HttpResponse('aa')
obj['xxx']='yyy'
return obj
5.content_type
响应编码格式,一般不动