目录
断言
断言
使用关键字assert
作用
断言结果,如果不是就抛异常
eg1:
# 断言
name = 'rose'
if name == 'kiki':
print('你是管理员,可以执行该操作')
else:
# print('你不是管理员,没有该权限')
raise Exception('你不是kiki,主动抛异常')
eg2:
name = 'kimi'
assert name == 'kiki' # 断定是,如果不是就抛异常
print('后续代码执行')
drf之请求
-
Request 能够解析前端传入的编码格式
方式一 局部配置
在继承APIView及其子类的的视图类中配置
from rest_framework.parsers import JSONParser,FormParser,MultiPartParser class BookView(APIView): parser_classes = [JSONParser,]
方式二全局配置
在配置文件中配置(影响所有,全局配置)
-
django项目有默认配置,每个项目有独立的一个配置文件
from django.conf import settings from djangoday01 import settings
-
drf有默认配置,每个项目有独立的一个配置文件---->>>django的配置文件中
from rest_framework import settings from drf_day05 import settings
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默认配置
-
-
Request类有哪些属性和方法
视图类方法中的
request
# 方法 1.__getattr__ 在视图类的方法中,执行request.method,新生的request是没有method的,就触发了新的Request的__getattr__方法的执行 def __getattr__(self, attr): try: # 从老的request中反射出 要取得属性 return getattr(self._request, attr) except AttributeError: return self.__getattribute__(attr) 2.request.data 包装了数据属性 无论是post/put请求,放在了body中提交的数据,都是从request.data中取,取出来就是字典 所有编码格式都可以 3.request.query_params 包装了数据属性 get请求携带的参数,以后从这里取 query_params:查询参数 ----->restful规范请求地址中带查询参数 4.request.FILES 包装了数据属性 前端提交的文件,从request.FILES 取
drf之响应
drf
是django
的一个app,所有要先注册的,drf
的响应,如果使用浏览器和postman
访问同一个接口,返回格式是不一样的
浏览器的响应
postman响应
-
Response能够响应的编码格式
方式一
在视图类中写-----局部配置
# 响应格式 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默认内置的配置
-
Resposne的源码属性或方法
源码分析
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 响应编码格式,一般不动