DRF之初识接口设计

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)

  1. from django.views import View

  2. 在视图类种继承 View 类 class StudentView(View):pass

  3. urls.py 中定义路由关系

    1. from django.urls import re_path
      from classbasedview import views

    urlpatterns = [

    ​ re_path(“login/”, views.LoginView.as_view()),

    ]

  4. Django启动时加载路由系统,会读取urlpatterns中的对应关系

  5. 执行as_view(),或得器返回值,该函数返回一个view视图函数

  6. 此时绑定关系建立好了,当用户请求过来时,就会执行url对应得view视图函数

  7. 该视图函数得返回值是self.dispatch()

  8. self.dispatch()会找到http_method_names变量里面得函数,并执行,并最终返回

APIView源码分析

封装自己的东西,用到view得方法

  1. 安装djangorestframework
    pip install djangorestframework

  2. 在views.py中
    from rest_framework.view import APIView

  3. 在视图类继承APIView

    class StudentView(APIView):
        def get(self, request):
            pass
        def post(self, request):
            pass
        
    
  4. urls.py 中保持不变

  5. Django启动时加载路由系统,会读取 urlpatterns 中的对应关系

    from django.urls import path
    from api.view import views
    urlpatterns = [
        path("login/", views.LoginView.as_view()),
    ]
    
  6. 此时绑定关系已经建立好了,当用户请求过来时,就会执行 url 对应的 View 视图函数

  7. 请求到来,执行View视图函数

  8. 最后执行 dispatch(),获取返回值,返回给用户

  9. Django RestFramework 自定制的内容就在重写的 as_view 函数里面以及 dispatch() 方法

上一篇:restful规范与rest_framework


下一篇:APIView和View的区别