初识Django Rest Framework

Django REST framework是基于Django实现的一个RESTful风格API框架,适用于前后端分离的项目。

官网:https://www.django-rest-framework.org/
中文文档:https://q1mi.github.io/Django-REST-framework-documentation/

  • Django REST framework安装与配置
    • 安装: pip3 install djangorestframework
    • 配置: 需要将 rest_framework 注册到项目的INSTALL_APPS中
      # settings.py
      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'rest_framework', # rest_framework 注册到项目的INSTALL_APPS中
      ]
      

Django 与 Django REST framework 的视图函数

Django: 基本视图类为View from django.views import View

Django REST framework: APIView是REST framework提供的所有视图的基类,继承自Django的View父类。from rest_framework.views import APIView

生命周期

初识Django Rest Framework_第1张图片
前端发送请求–>Django的wsgi–>中间件–>路由系统( 调用as_view()方法,执行内部的dispatch函数进行分配 )–>视图–>ORM数据库操作–>模板–>返回数据给用户。

Django REST framework 会在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。重要的功能是在APIView的dispatch中触发

  • 路由
    # 路由
    from django.urls import path
    from test import views # 导入项目目录下的视图views.py文件
    
    urlpatterns = [
        path('', views.TestView.as_view(), name='test'),
        ]
    
  • django 视图
    # drf是通过json的格式进行数据交互的,所以这里也返回json数据
    import json
    from django.views.generic.base import View
    from django.core import serializers
    from django.http import HttpResponse,JsonResponse
    from .models import Course
    
    class TestView(View):
        def get(self, request):
            """
            通过django的view实现课程列表页
            """
            courses = Course.objects.all()[:10]
            json_data = serializers.serialize('json', Courses)
            json_data = json.loads(json_data)
            return JsonResponse(json_data, safe=False)
    
  • Django Rest Framework视图
    from rest_framework.views import APIView
    from rest_framework.response import Response
    # 这个serializers是在其他文件自定义的
    from .serializers import CourseSerializer
    
    class CourseListView(APIView):
        def get(self, request, format=None):
            """
            通过APIView实现课程列表页
            """
            courses = Course.objects.all()
            serializer = CourseSerializer(courses, many=True)
            return Response(serializer.data)
    

APIView与View的不同之处:

① 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象;
② 视图方法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;
③ 任何APIException异常都会被捕获到,并且处理成合适的响应信息;
④ 在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
⑤ 支持定义的属性:
authentication_classes 列表或元祖,身份认证类
permissoin_classes 列表或元祖,权限检查类
throttle_classes 列表或元祖,流量控制类


参考文章:
django-rest-framework框架 第四篇 认证Authentication

Django Rest Framework(认证、权限、限制访问频率)

django-rest-framework(概念篇)——apiview&viewset

关于Rest Framework中View、APIView与GenericAPIView的对比分析

你可能感兴趣的:(python,新手上路,技术)