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

chao666 chao666     2023-04-20     476

关键词:

对于视图集,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。

REST framework提供了两个router

  • SimpleRouter
  • DefaultRouter

1. 使用方法:

1. 创建路由对象

# 定义一个路由器对象
router = DefaultRouter()

2. 注册路由信息

# 将序列化器的视图进行注册
router.register(r路由前缀, 视图集, basename=‘命名空间‘)

3. 将路由信息保存到urlpatterns中

# 将注册后的路由信息添加到路由表中
urlpatterns += router.urls

当我们定义好Routers后,DRF框架会使用Routers为我们自动创建好路由信息,但是自定义的action并不会自动创建路由信息。

2. 为自定义action自动创建路由信息

在视图集中,如果想要让Router自动帮助我们为自定义的动作生成路由信息,需要使用rest_framework.decorators.action装饰器。

action装饰器可以接收两个参数:

  • methods: 声明该action对应的请求方式,列表传递
  • detail: 声明该action的路径是否与单一资源对应
    • True 表示路径格式是xxx/<pk>/action方法名/
    • False 表示路径格式是xxx/action方法名/

案例代码:

class BookInfoViewSet(ModelViewSet):
    """增删改查图书信息"""

    # 指定查询集
    queryset = BookInfo.objects.all()
    # 指定序列化器
    serializer_class = BookInfoModelSerializer

    # detail为False 表示路径名格式应该为 books/latest/,其中不包含pk
    @action(methods=[get], detail=False)
    def latest(self, request):
        """
        自定义action动作
        返回最后一条图书信息
        """
        book = BookInfo.objects.latest(id)
        serializer = self.get_serializer(book)
        return Response(serializer.data)

这样,DRF框架就会使用路由Routers为我们自动的将自定义的action的路由信息也创建出来。

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

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

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

...手动指明请求方式与执行函数间的对应关系,还可以使用Routers来快速实现路由信息Rest-framework提供了两个router:SimpleRouter和DefaultRouter。前者较为简洁,后者产生 查看详情

drf路由组件(代码片段)

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

drf之路由系统与视图(代码片段)

手动路由编写#路由fromdjango.conf.urlsimporturlfromapp01.viewsimportUserListViewurlpatterns=[#GET请求查询所有#POST请求增加url(r'^users/$',UserListView.as_view()),url(r'^users.(?P<format>w+)/$',Us 查看详情

pythondjangorest_framework框架视图集与路由routers详解(图文并茂版)(代码片段)

视图集与路由Routers详解视图集ViewSet视图集代码实现GenericViewSet视图集代码实现ModelViewSet视图集ReadOnlyModelViewSet视图集路由Routers使用方法具体实现操作视图集中附加action的声明视图集ViewSet视图集继承自APIView与ViewSetMixin,作用... 查看详情

drf-路由

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

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

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

drf框架serializer之视图优化(代码片段)

一、create优化在serializer序列化中,我们通过创建序列化器对象的方式大大地简化了视图函数的代码,前端传入的数据通过反序列化操作进行了各种数据校验,代码如下:fromdjango.httpimportJsonResponsefromdjango.viewsimportViewfromdjango.dbimpor... 查看详情

drf框架之mixins(代码片段)

一、ListModelMixin提供list(request,*args,**kwargs)方法获取已存在的列表数据(获取多条记录)获取成功,则返回200OK1.引入方式fromrest_framework.mixinsimportListModelMixin2.源码对比我们可以发现,两处的代码基本一致,因此我们直接拿到使用来... 查看详情

drf框架serializer之modelserializer(代码片段)

...性,因此会选择一种更为简洁的序列化器类来帮我们优化框架代码,简化序列化器类中字段的创建常规序列化器类示例:fromrest_frameworkimportserializersfromrest_frameworkimpo 查看详情

drf之渲染(代码片段)

实例:#路由fromdjango.conf.urlsimporturl,includefromapp01.viewsimportTestViewurlpatterns=[url(r'^test/$',TestView.as_view()),url(r'^test.(?P<format>[a-z0-9]+)',TestView.as_view()),]# 查看详情

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

视图组件涉及的路由补充:  fromrest_framework.viewsetsimportViewSetMixin  对路由进行了重新的分发,重写了as_view()方法,重新封装了请求方法fromrest_framework.viewsetsimportViewSetMixinclassViewSetMixin(object):"""Thisisthemagic.Overrides`.as_view()`sothati... 查看详情

drf框架之自定义action(代码片段)

一、自定义action使用action装饰器methods支持的请求方式,为一个列表,默认为[‘get‘]detail必传参数,要处理的是否是详情资源对象(即是否通过url路径获取主键)True表示需要传递主键id,使用通过URL获取的主键对应的数据对象Fal... 查看详情

drf框架之用户登录状态保持(代码片段)

   本篇主要介绍用户状态保持的两种的方案--session和jwt_token,以及这两种方案的实现方式,及优缺点对比。  引入:HTTP协议是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码进行用户认证... 查看详情

pythondjangorest_framework框架视图集与路由routers详解(图文并茂版)(代码片段)

视图集与路由Routers详解视图集ViewSet视图集代码实现GenericViewSet视图集代码实现ModelViewSet视图集ReadOnlyModelViewSet视图集路由Routers使用方法具体实现操作视图集中附加action的声明视图集ViewSet视图集继承自APIView与ViewSetMixin,作用... 查看详情

drf框架之视图的扩展类简介(代码片段)

这里呢,我将为大家介绍一下DRF框架,为我们提供的试图扩展类的使用方法即作用。在使用视图扩展类时,需要将mixins模块导入到view文件中。fromrest_frameworkimportmixins并且,在使用视图扩展类时,必须结合GenericAPIView基类一起使用... 查看详情

drf之jwt傻瓜式启动说明书(代码片段)

...User在Terminal中做数据库迁移,createsuperuser创建超级用户在路由中导入jwt的模块#urls.pyfromdjango.urlsimportpath,include,re 查看详情

Django - 使用 drf-nested-routers 反向嵌套 url

】Django-使用drf-nested-routers反向嵌套url【英文标题】:Django-reversenestedurlwithdrf-nested-routers【发布时间】:2020-11-1508:15:30【问题描述】:我将我的apiurl配置为localhost:port/app_name/students/student_id/macro/macro_id/lto使用drf-nested-routers扩展。基... 查看详情