Django REST Framework框架介绍以及简单使用

一、 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装饰器

  必须手动指定允许的请求方法

原文地址:https://www.cnblogs.com/erlang-/p/14158103.html