DRF(django rest framework)
简述DRF(Django restframework)就是一个Django中使用 rest 接口规范的模块。什么rest接口规范?就是对于我们书写前后端分离时,定义接口的一种规范,列举如下规范:
请求方式 | url 设计(接口) | 请求内容 | 响应内容 |
---|---|---|---|
GET | 127.0.0.1:8000/books/ | 获取所有书本的信息 | [ {书的id,name,…} , {}, {} …] |
GET | 127.0.0.1:8000/books/{ id } | 获取单条数据据 | 单条数据{ 书的 id,name…. } |
POST | 127.0.0.1:8000/books/ | 增加单条数据 | 添加成功的数据{ ‘mesage’:‘ok’} |
DELETE | 127.0.0.1:8000/books/{ id } | 删除单条数据 | 返回空“ ” |
PUT | 127.0.0.1:8000/books/{ id } | 修改数据 | 更新后完整的数据{ } |
从结构上看,比我们一般设计的 url 地址更加简洁明了,方便程序员维护还有错误处理
错误处理:{ “error” : “message” }
如何在 Django 中实现 rest接口规范?
安装 DRF
pip install django
pip install djangorestframework
完成之后可以进行学习了以下内容:
- APIView
- 解析器组件
- 序列化组件
- 视图组件
- 认证组件
- 权限组件
- 频率控制组件
- 分页组件
- 响应器组件
- url 控制器
Django 中View视图函数使用有些不是很方便,所以封装了APIView
class LoginView(View):
def get(self, request):
return render(request, 'login.html')
def post(self, request):
print(request.POST)
# 此时Ajax发送的请求无法被识别
return HttpResponse("ok")
APIView的使用
class LoginView(APIview):
def get(self, request):
return render(request, 'login.html')
def post(self, request):
print(request.data)
# APIView中的解析器就帮我们做到了解析的功能
return HttpResponse("ok")
View源码分析CBV(django classbasedview)
-
from django.views import View
-
在视图类种继承 View 类 class StudentView(View):pass
-
urls.py 中定义路由关系
- from django.urls import re_path
from classbasedview import views
urlpatterns = [
re_path(“login/”, views.LoginView.as_view()),
]
- from django.urls import re_path
-
Django启动时加载路由系统,会读取urlpatterns中的对应关系
-
执行as_view(),或得器返回值,该函数返回一个view视图函数
-
此时绑定关系建立好了,当用户请求过来时,就会执行url对应得view视图函数
-
该视图函数得返回值是self.dispatch()
-
self.dispatch()会找到http_method_names变量里面得函数,并执行,并最终返回
APIView源码分析
封装自己的东西,用到view得方法
-
安装djangorestframework
pip install djangorestframework -
在views.py中
from rest_framework.view import APIView -
在视图类继承APIView
class StudentView(APIView): def get(self, request): pass def post(self, request): pass
-
urls.py 中保持不变
-
Django启动时加载路由系统,会读取 urlpatterns 中的对应关系
from django.urls import path from api.view import views urlpatterns = [ path("login/", views.LoginView.as_view()), ]
-
此时绑定关系已经建立好了,当用户请求过来时,就会执行 url 对应的 View 视图函数
-
请求到来,执行View视图函数
-
最后执行 dispatch(),获取返回值,返回给用户
-
Django RestFramework 自定制的内容就在重写的 as_view 函数里面以及 dispatch() 方法