一、 Django REST framework介绍
Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API。
官网:https://www.django-rest-framework.org/
中文文档:https://q1mi.github.io/Django-REST-framework-documentation/
二、Django REST framework安装和配置
1、安装
pip install djangorestframework
2、配置
如果想要获取一个图形化的页面,需要将 rest_framework 注册到项目的INSTALL_APPS中。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework' 'Api.apps.ApiConfig', ]
三、基于Django实现RESTful API
1、路由
from django.urls import path
from Api.views import Users
app_name = 'Api'
urlpatterns = [
path('users/', Users.as_view(), name='users')
]
2、视图
class Users(View): def get(self, request, *args, **kwargs): data = { 'code': 0, 'data': 'response data' } return JsonResponse(data=data, status=200) def post(self, request, *args, **kwargs): data = { 'code': 0, 'data': 'response data' } return JsonResponse(data=data, status=200)
3、使用postman分别发送get和post请求
(1)、get请求
(2)、post请求
(3)注意:
状态码一般两种写入方式,一种是直接写在data中,但是这种写入不是真正意义上的改变状态码,第二种就是上面中的例子,写入JsonResponse中
另外,发送post请求需要csrf_token豁免。
四、基于Django RESTful Framework框架实现
1、路由
from django.urls import path, include from Api.views import Users, TestView app_name = 'Api' urlpatterns = [ path('users/', Users.as_view(), name='users'), path('test/', TestView.as_view(), name='test') ]
2、视图
from django.http import JsonResponse from django.shortcuts import render from django.views import View from rest_framework.response import Response from rest_framework.views import APIView class TestView(APIView): def dispatch(self, request, *args, **kwargs): """ 请求到来之后,都要请求dispatch方法,dispath方法根据不同的请求方式出发get/post/put等方法 注意:APIView中,dispath方法有好多好多功能 """ return super().dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs): data = { "status": 200, 'data': 'get success' } return Response(data, status=201) def post(self, request, *args, **kwargs): data = { 'status': 200, 'data': 'post success' } return Response(data, status=201)
五、APIView中的方法
1、renderer_classes 渲染的类
2、parser_classes 解析转换的类
3、authentication_classes 认证的类
4、throttle_classes 节流的类,控制请求频率
5、permission_classes 权限的类
6、content_negotiation_class 内容过滤类
7、metadata_class 元信息的类
8、versioning_class 版本控制的类
9、as_view()
调用父类中的as_view ->dispatch方法
dispatch方法被重写
initialize_request 使用django的request构建了一个REST中的Request
initial
perform_authentication
执行用户认证,遍历认证器,如果认证成功返回一个元祖,元祖中的第一个元素就是user,第二个元素就是auth,token
check_permissions
检查权限,遍历我们的权限检测器,只要有一个权限检测没有通过,就直接显示权限被拒绝,所有权限都满足,才算是拥有权限。
check_throttles
检测频率,遍历频率限制器,如果验证不通过,就需要等待
csrf_exempt
所有APIView的自雷都是csrf豁免的
六、错误码
封装status模块中,实际上就是一个常量类
七、针对视图函数的包装
1、CBV
APIView
2、FBV
添加@api_view装饰器
必须手动指定允许的请求方法