django框架、断言、请求与响应

发布时间:2023年12月24日

断言

关键字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'

drf之请求

Request能够解析前端传入的编码格式

方式一:局部配置
必须在继承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之响应

drf是django的一个app,所有要先注册的,drf的响应,如果使用浏览器和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
    响应编码格式,一般不动
文章来源:https://blog.csdn.net/shiyaopeng11/article/details/135182561
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。