drf框架路由组件(代码片段)

st-st st-st     2023-02-04     687

关键词:

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

  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(rbook_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]

 

05drf路由组件(代码片段)

一.路由Routers对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。RESTframework提供了两个routerSimpleRouterDefaultRouter1.1使用方法1)创建router对象,并... 查看详情

drf路由组件(代码片段)

...个视图有list、create、retrieve、update、destroy所有的功能,路由组件可以用DRF自带的routers简写项目总路由:pro/urls.pyfromdjango.contribimportadminfromdjango.urlsimportpath,includeurlpatterns=[path(‘admin/‘,admin.site.urls),path(‘books/‘,include(‘books.urls‘... 查看详情

drf框架(代码片段)

DRF框架知识总览一、接口(api):什么是接口接口文档接口规范二、FBV=>CBV:Function|ClassBaseViewCBV的请求生命周期CBV比FBV的优势三、drf框架的基础试图类APIView:请求模块、解析模块、渲染模块、响应模块、异常模块四、drf核心组件... 查看详情

drf框架认证组件(代码片段)

DRF框架的认证组件核心代码:    self.perform_authentication(request) 框架自带模块:   fromrest_frameworkimportauthentication 认证组件的返回值:request.user自定义的认证组件的钩子方法authenticator.authenticate(self);返... 查看详情

drf框架之serializers序列化组件(代码片段)

...学了序列化工具json工具,就是吧信息存为类字典形式2.DRF框架自带序列化的工具:serializers 3.DRF框架serializers分为:第一种Serializer 第二种ModelSerializer 第一种用法之Serializerfromdjango.dbimportmodels#Createyourmod 查看详情

drf--路由组件和版本控制(代码片段)

路由组件先来看下我们前面写的路由fromdjango.conf.urlsimporturl,includefrom.viewsimportBookModelViewurlpatterns=[url(r‘^book/$‘,BookModelView.as_view("get":"list","post":"create")),url(r‘^book/(?P<pk>d+)‘,BookModelView.as_view("get":"retrieve","put":"update","delete":"des... 查看详情

drf-路由和认证(代码片段)

drf-路由目录drf-路由1路由1.1路由router的使用1.2action的使用2认证2.1认证的写法2.2源码分析2.3认证组件的使用1路由针对视图集ViewSet,我们出来可以自己手动指明请求方式与执行函数间的对应关系,还可以使用Routers来快速实现路由... 查看详情

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

准备工作models.pyfromdjango.dbimportmodels#基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的classBaseModel(models.Model):is_delete=models.BooleanField(default=False)updated_time=models.DateTimeField(auto_now_add=True)classMeta:abstract=True#必须完成该配置... 查看详情

django-rest-framework---总结(代码片段)

目录drf回顾总结drf基础1.drf框架安装2.接口3.restful接口规范4.基于restful规范的原生Django接口drf五大模块1.请求模块:request对象2.渲染模块:浏览器和Postman请求结果渲染数据的方式不一样3.解析模块4.异常模块5.响应模块序列化组件... 查看详情

drf框架知识总览(代码片段)

DRF框架知识总览"""1)接口(api):什么是接口接口文档接口规范2)FBV=>CBV:Function|ClassBaseViewCBV的请求生命周期CBV比FBV的优势3)drf框架的基础试图类APIView:请求模块、解析模块、渲染模块、响应模块、异常模块4)drf... 查看详情

drf框架之路由routers(代码片段)

...到路由表中urlpatterns+=router.urls当我们定义好Routers后,DRF框架会使用Routers为我们自动创建好路由信息,但是自定义的action并不会自动创建路由信息。2.为自定义action自动创建路由信息在视图集中,如果想要让Router自动帮助我们为... 查看详情

drf认证组件权限组件jwt认证签发jwt框架使用(代码片段)

...user对象九、drf项目的jwt认证开发流程(重点)十、drf-jwt框架基本使用安装(终端)签发token校验token(认证组件)设置需要登录才能访问的接口进行测试(views.py)测试访问登录认证接口(Postman)一、注册接口urls.pyrouter.register('... 查看详情

drf框架——drf-jwt手动签发与校验过滤组件筛选组件排序组件分页组件(代码片段)

自定义drf-jwt手动签发和校验签发token源码入口前提:给一个局部禁用了所有认证与权限的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面获取提交的username和password1)rest_framework_jwt.views.ObtainJSONWebToken的父... 查看详情

drf4视图与路由组件(代码片段)

...st,新的request是我们这个Request类 我们用了rest_framework框架以后,我们的request是重新封装的Request类request.query_params存放的是我们get请求的参数request.data存 查看详情

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

系统权限类使用图书接口:游客只读,用户可增删改查权限使用fromrest_framework.permissionsimportIsAuthenticatedOrReadOnlyclassBookViewSet(ModelViewSet):#游客只读,用户可增删改查permission_classes=[IsAuthenticatedOrReadOnly]queryset=models.Book.objects.all()seriali... 查看详情

视图组件,路由组件(代码片段)

DRF的视图APIView我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们两个有什么不同呢~~~?urlpatterns=[    url(r‘^book$‘,BookView.as_view()),    url(r‘^book/(?P<id> 查看详情

drf路由(代码片段)

"在urls.py文件中按照如下步骤写,即可正确使用DRF的内置路由.from.viewsimportBookModel#1.导入我们的视图fromrest_framework.routersimportDefaultRouter#2.导入rest_framework内置的路由方法router=DefaultRouter()#3.首先,实例化一个DefaultRouter对象router 查看详情

drf序列化(代码片段)

一、安装Django RESTframework框架使用命令:pipinstalldjangorestframework二、在setings里面注册INSTALLED_APPS=["rest_framework"]Serializers序列化组件 查看详情