【DRF框架】路由组件

视图组件涉及的路由补充:

  from rest_framework.viewsets import ViewSetMixin

  对路由进行了重新的分发,重写了as_view() 方法,重新封装了请求方法

from rest_framework.viewsets import ViewSetMixin

class ViewSetMixin(object):
    """
    This is the magic.

    Overrides `.as_view()` so that it takes an `actions` keyword that performs
    the binding of HTTP methods to actions on the Resource.

    For example, to create a concrete view binding the ‘GET‘ and ‘POST‘ methods
    to the ‘list‘ and ‘create‘ actions...

    view = MyViewSet.as_view({‘get‘: ‘list‘, ‘post‘: ‘create‘})
    """

    @classonlymethod
    def as_view(cls, actions=None, **initkwargs):
        # actions就是传入的字典

        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            self.action_map = actions

            # 循环字典{"get":"list"}
            for method, action in actions.items():
                # self是定义的视图类
                handler = getattr(self, action)
                # 将self.get 改为 self.list
                setattr(self, method, handler)

            if hasattr(self, ‘get‘) and not hasattr(self, ‘head‘):
                self.head = self.get

            self.request = request
            self.args = args
            self.kwargs = kwargs

            # 重新执行分发
            return self.dispatch(request, *args, **kwargs)

        return csrf_exempt(view)

# APIView
        def dispatch(self, request, *args, **kwargs):

        try:
            self.initial(request, *args, **kwargs)

            # 重新封装分发
            # self.get已经是self.list
            if request.method.lower() in self.http_method_names:
                handler = getattr(self, request.method.lower(),
                                  self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed

            response = handler(request, *args, **kwargs)

        except Exception as exc:
            response = self.handle_exception(exc)

        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response

路由组件

from rest_framework.routers import DefaultRouter

# urls.py
from django.conf.urls import url
from rest_framework.routers import DefaultRouter
from .view4 import BookView

# 实例化路由对象
router = DefaultRouter()

# 注册路由和视图
router.register(r‘book_list‘,BookView)

urlpatterns = [

]

# 添加到路由列表中
urlpatterns += router.urls

自动生成的路由

默认生成的路由都是带参数的!

^admin/
^api/book/ ^book_list/$ [name=‘book-list‘]
^api/book/ ^book_list\.(?P<format>[a-z0-9]+)/?$ [name=‘book-list‘]
^api/book/ ^book_list/(?P<pk>[^/.]+)/$ [name=‘book-detail‘]
^api/book/ ^book_list/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name=‘book-detail‘]
^api/book/ ^$ [name=‘api-root‘]
^api/book/ ^\.(?P<format>[a-z0-9]+)/?$ [name=‘api-root‘]

原文地址:https://www.cnblogs.com/st-st/p/10124465.html

时间: 2024-07-31 18:54:24

【DRF框架】路由组件的相关文章

drf框架 - 序列化组件

drf框架 - 序列化组件 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 反序列化: 将字符串反序列化成对象用于使用 drf的序列化与反序列化 序列化: 将Model类对象序列化成字符串用户传输 反序列化: 将字符串反序列化成Model对象用于使用 Serializer 序列化准备: 模型层: models.py class User(models.Model): SEX_CHOICES = [ [0, '男'], [1, '女'], ] name = models.CharFiel

drf框架 - 序列化组件 | Serializer

序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer(辅助群改) 序列化与反序列化 序列化: 将对象序列化成字符串用户传输 反序列化: 将字符串反序列化成对象用于使用 drf的序列化与反序列化 序列化: 将Model类对象序列化成字符串用户传输 反序列化: 将字符串反序列化成Model对象用于使用 Serializer 序列化准备: 模型层: models.py class User(models.Model): SE

DRF 之 路由组件

组件路由的步骤 1.先要导入DefaultRouter from rest_framework.routers import DefaultRouter 2.实例化DeaultRouter对象 router = DefaultRouter() 3.注册我们的路由及视图 router.register(匹配路由的前缀r'^book',视图函数名BookModelView) 4.用urlpatterns += router.urls ,会在urlpatterns = [ ]中自动生成标签 原文地址:

drf框架 6 视图集与路由组件(开发最常用、最高级) 三大认证原理 RBAC认证规则

准备工作 models.py from django.db import models # 基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的 class BaseModel(models.Model): is_delete = models.BooleanField(default=False) updated_time = models.DateTimeField(auto_now_add=True) class Meta: abstract = True # 必须完成该配置 cla

DRF框架之 serializers 序列化组件

1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers 分为:第一种 Serializer   第二种 ModelSerializer 第一种用法之 Serializer from django.db import models # Create your models here. class Book(models.Model): nid = mod

drf框架中分页组件

0922自我总结 drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination # 普通分页 class CarPageNumberPagination(PageNumberPagination): # 默认一页的条数 page_size = 3 # 用户可以自定义选择一页的条数,但最多显示5条 page_size_query_param = 'page_s

drf框架 8 系统权限类使用 用户中心信息自查 token刷新机制 认证组件项目使用:多方式登录 权限组件项目使用:vip用户权限 频率组件 异常组件项目使用

系统权限类使用 图书接口:游客只读,用户可增删改查权限使用 from rest_framework.permissions import IsAuthenticatedOrReadOnly class BookViewSet(ModelViewSet): # 游客只读,用户可增删改查 permission_classes = [IsAuthenticatedOrReadOnly] queryset = models.Book.objects.all() serializer_class = se

自定义路由组件,Django的admin后台管理,DRF的三大认证,jwt认证

目录 一.自定义路由组件 1. 为什么要自定义路由组件 2. 自定义路由组件实例 二.Django的admin后台管理 三.DRF的三大认证组件概括 1. 认证组件 2. 权限组件 3. 频率组件 四.Django中的用户权限管理 五.jwt认证 1. jwt认证和普通session认证的区别 2. jwt认证介绍 (1)jwt的原理 (2)jwt三部分的内容 3. jwt的签发算法 (1)第一步:头部算法 (2)第二步:载荷部分的算法 (3)第三步:签名部分的算法 (4)第四步:连接生成tok

drf框架 ----- 接口 cbv生命周期 请求\解析\响应组件 序列化组件 三大认证 其他组件

drf框架 全称: django-rest framework (framework:框架) 理论知识点 大纲 接口 接口: 联系连个物质的媒介, 完成信息交互 web程序中 : 联系前台页面与后台数据库的媒介 web 接口的组成 : url: 统一资源定位符 长得像返回数据的链接 请求参数: 前台按照指定的key 提供数据给后台 响应数据: 后台与数据库交互后将数据反馈给前台 restful接口规范 接口规范:就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据 如何写接口:接口规范