学习笔记-Python-Django REST Framework-视图
- 视图
- DRF的视图从处理任务,处理流程等跟Django基本一致
- 此视图基本是Django视图的扩展
- Request
- 把请求解析成一个request实例
- 属于DRF的,跟Django的HttpRequest不太一样
- 在得到Request之前有一个Parse对传入的数据请求进行解析
- data属性
- 请求数据体,类似于Django的request.POST, request.FILES
- 在DRF中主要指的是json
- query_params
- 所有传入的关键字,举例如下面的url参数name
api.tulingxueyuan.com/student/?name='liu'
# 使用案例
# name = self.request.query_params['name'] # 不建议使用如果不存在name会崩溃
name = self.request.query_params.get('name', None)
- user
- 登陆后的用户信息都在user中
- 如果没有登陆,则是anoymous,无名用户
- 可以用来判断用户是否登陆成功
- Response
- from rest_framework.response import Response
- 用Renderer渲染器对返回内容进行渲染
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASS':(
# 下面是默认响应的渲染类
'rest_framework.renderers.JSONRenderere', # json渲染类
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器访问后台用到
)
}
- 返回的构造方式
- return Response(data, status=None, template_name=None, headers=None, content_type=None)
- data:返回的数据
- status表示http协议里返回的状态码
- 1xx:信息告知
- 2xx:成功
- 3xx:重定向
- 4xx:请求错误(前端)
- 5xx:服务器错误
- 视图类
- APIView
- from rest_framework.views import APIView
- 是django中View的子类
- 跟View有不同的地方
- 传入传出数据用的是DRF的请求和返回类
- 会引发并处理APIException
- 在dispatch之前,会进行身份验证、权限检查、流量控制
- 支持的属性有
- authentication_classes:列表或者元祖,身份验证类
- permisson_classes:进行权限验证
- throttle_classes:流量控制类
- 对API的访问提供了一些方便
- HTTP-Method + 名词
- 默认对HttpMethod常用方法提供了支持
- 案例:StudentAPIView
- API调试工具
- chrome - postman
- firefox - RESTClient
- GenericAPIView
- APIView的子类
- 支持的属性
- queryset:查询结果集
- serializer_class:视图使用的序列化器
- panination_class:分页控制器
- filter_backends:过滤器后端
- lookup_field:查询条件字段,默认为pk也就是主键,默认id
- get_queryset:返回查询结果集集合,经常需要重写
- get_serializer_class:得到序列化器类(得到一个类)
- get_serializer:得到序列化器(得到一个实例)
- ListModelMixin:查全部
- list(request, *args, **kwargs)
- RetrieveModelMixin:查指定的一个
- retrieve(request, *args, **kwargs)
- CreateModelMixin:增加
- create(request, *args, **kwargs)
- UpdateModelMixin:修改
- update(request, *args, **kwargs)
- DestroyModelMixin:删除
- destroy(request, *args, **kwargs)
- ViewSet
- 把一系列操作打包放入一个类中
- list:GET
- retrieve:GET + id
- destroy:DELETE
- update:UPDATE
- create:POST