zoukankan      html  css  js  c++  java
  • drf的安装与设计风格

    drf安装与使用

    restframework官网

    安装drf:

    pip3 install djangorestframework

    drf的配置分析

    # 1)安装drf:pip3 install djangorestframework
    # 2)settings.py注册app:INSTALLED_APPS = [..., 'rest_framework']
    # 3)基于cbv完成满足RSSTful规范的接口
    # 视图层
    from rest_framework.views import APIView
    from rest_framework.response import Response
    user_list = [{'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Tom'}]
    class Users(APIView):
        def get(self, request, *args, **kwargs):
            return Response({
                'status': 0,
                'msg': 'ok',
                'results': user_list
            })
        def post(self, request, *args, **kwargs):
            # request对formdata,urlencoded,json三个格式参数均能解析
            name = request.data.get('name')
            id = len(user_list) + 1
            user = {'id': id, 'name': name}
            user_list.append(user)
            return Response({
                'status': '0',
                'msg': 'ok',
                'results': user
            })
    # 路由层
    from app import views
    urlpatterns = [
        url(r'^users/', views.Users.as_view()),
    ]
    

    drf的封装风格

    1. 设计风格,某一个功能就在工具包下面,所有的模块都在功能名字内
    from rest_framework.views import APIView  # 视图
    from rest_framework.request import Request  # 请求
    from rest_framework.response import Response  # 响应
    from rest_framework.filters import SearchFilter  # 过滤器
    from rest_framework.pagination import PageNumberPagination  # 分页
    from rest_framework.exceptions import APIException  # 异常
    from rest_framework.authentication import BaseAuthentication  # 认证
    from rest_framework.permissions import IsAuthenticated  # 校验认证
    from rest_framework.throttling import SimpleRateThrottle  # 频率认证
    from rest_framework.settings import APISettings  # 设置
    from rest_framework import status  # 状态码  点进去之后名字是对状态码的描述
    

    request源码分析

    # as_view()
        # 核心走了父类as_view
        view = super(APIView, cls).as_view(**initkwargs)
        # 返回的是局部禁用csrf认证的view视图函数
        return csrf_exempt(view)
        
    # dispatch(self, request, *args, **kwargs)
        # 二次封装request对象
        request = self.initialize_request(request, *args, **kwargs)
        # 自定义request规则
        self.initial(request, *args, **kwargs)
        
    # initialize_request(self, request, *args, **kwargs)
        # 原生request封装在request._request
        
    # initial(self, request, *args, **kwargs)
        # 认证
        self.perform_authentication(request)
        # 权限
        self.check_permissions(request)
        # 频率
        self.check_throttles(request)
    
  • 相关阅读:
    cdoj 841 休生伤杜景死惊开 逆序数/树状数组
    Codeforces Round #296 (Div. 1) B. Clique Problem 贪心
    【NOIP2014】联合权值 树上dp
    【NOIP2014】生活大爆炸版石头剪刀布
    BZOJ 2756: [SCOI2012]奇怪的游戏 网络流/二分
    BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
    BZOJ 1036: [ZJOI2008]树的统计Count 树链剖分
    BZOJ 1854: [Scoi2010]游戏 并查集
    BZOJ 1008 [HNOI2008]越狱 排列组合
    BZOJ 1003 物流运输trans dijstra+dp
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11893305.html
Copyright © 2011-2022 走看看