首页 > 其他分享 >drf-路由组件

drf-路由组件

时间:2023-05-24 22:45:05浏览次数:36  
标签:lqz DefaultRouter 视图 path 组件 router 路由 drf

目录

一 路由Routers

路由写法有多种

-原始写法
-映射的写法:path('books/', BookView.as_view({'get': 'list', 'post': 'create'}))
-自动生成路由

1.1 什么情况下使用自动生成路由

    1 继承了 5个视图扩展类+ViewSetMixin的视图类,能自动生成路由(get:list,get:retrieve..)
    2 我们自己命名的: 方法名:login  send_sms,需要使用装饰器来做
        # 视图类:
        class SMSView(ViewSet):
            @action(methods=['GET'], detail=False, url_path='lqz', url_name='lqz')
            def lqz(self, request):
        # 路由
        router.register('lqz',SMSView,'lqz')
        # 路径是:http://127.0.0.1:8000/api/v1/lqz/lqz/
        
   3 action装饰器的参数

    methods:请求方式
    detail:一个True,一个False,用True,表示生成详情的路径 <int:pk>
    	# True,books/1/方法名/
        # False,books/方法名/
    url_path:路径名字,需要加上前面的路径一起,如果不加,默认以函数名作为路径名
    url_name:反向解析使用的名字(用的不多)

REST framework提供了两个router

  • SimpleRouter
  • DefaultRouter
from rest_framework.routers import SimpleRouter,DefaultRouter
 # 路由类,有两个,用法完全一致,区别是DefaultRouter生成的路径多
    SimpleRouter :用的最多
    DefaultRouter
    # DefaultRouter与SimpleRouter的区别是,DefaultRouter会多附带一个默认的API根视图,返回一个包含所有列表视图的超链接响应数据。

1.2 自动生成路由使用方法

# 第一步:导入一个路由类
from rest_framework.routers import SimpleRouter,DefaultRouter

# 第二步:实例化得到对象
router = DefaultRouter()

# 第三步:注册路由(视图类)
router.register('前缀', 视图类, '起的别名')
router.register('books', BookView, 'books')
# router.register('publish',PublishView,'publish')

# 第四步:加入到路由中
# 4.1 方式一
urlpatterns = []
print(router.urls)
urlpatterns+=router.urls  # 列表的相加


# 4.2 使用include
path('api/v1/', include(router.urls)),

from django.urls import path, include
urlpatterns = [
    path('api/v1/', include(router.urls)),
    # api/v1/是路径的前缀,可以省略不写,直接写空 ''
    # path('lqz/', SMSView.as_view({'get': 'lqz'})),  # 我们都会,使用自动生成,如何做

]

1.3 代码演示

自定义方法,自动生成路由

视图函数

from rest_framework.viewsets import ModelViewSet, ViewSet, ViewSetMixin
from rest_framework.views import APIView

# 自己写的类,想要自动生成路由
# 需要使用装饰器 ---> 做映射
from rest_framework.decorators import action


# 参数:methods=None, detail=None, url_path=None, url_name=None
# class SMSView(ViewSetMixin,APIView):
class SMSView(ViewSet):
    @action(methods=['GET'], detail=True, url_name='xxx')
    def lqz(self, request):
        return Response('你好')
    
    

class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerialzier

    @action(methods=['GET'], detail=False)
    def login(self, request):
        # print(pk)
        return Response('登录成功')

路由

from app01.views import SMSView
# 第一步:导入一个路由类
from rest_framework.routers import SimpleRouter

# 第二步:实例化得到对象
router = SimpleRouter()

# 第三步:注册路由(视图类)
# http://127.0.0.1:8000/api/v1/lqz/xxx/
# lqz:router.register的前缀
# xxx:@action的参数url_name中指定的值,如果没有指定,就会使用方法名
router.register('lqz', SMSView, 'lqz')

# 第四步:加入到路由中
# 4,1 方式一
# urlpatterns = []
# urlpatterns+=router.urls
# 4.2 使用include
urlpatterns = [
    path('api/v1/', include(router.urls)),
]

标签:lqz,DefaultRouter,视图,path,组件,router,路由,drf
From: https://www.cnblogs.com/zjyao/p/17429725.html

相关文章

  • drf之登录功能,认证组件,权限组件,频率组件
    目录一、登录功能表模型视图类回顾路由二、认证组件认证组件使用步骤(固定用法)三、权限组件权限类的使用步骤四、频率组件频率类的使用步骤一、登录功能表模型classUserInfo(models.Model):name=models.CharField(max_length=32)password=models.CharField(max_......
  • drf与视图类
    drf与视图类模块与包的使用#模块与包 模块:一个py文件,被别的py文件导入使用就是模块,直接右键运行就是脚本文件包:一个文件夹里面有__init__.py文件#模块与包的导入问题 '''导入模块有相对导入和绝对导入,绝对的路径是从环境变量开始的导入任何模块,如果使用绝......
  • django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件
    django配置文件作用:    drf登录功能:view内:from.modelsimportUserInfo,UserTokenfromrest_framework.viewsetsimportViewSetimportuuidfromrest_framework.responseimportResponsefromrest_framework.decoratorsimportactionclassUser......
  • jmeter--定时器组件
    工作中,用jmeter写接口测试脚本、性能测试脚本时,通常也会用到定时器组件,一般用的比较多的还是固定定时器、同步定时器。对于其他的定时器了解的不是特别深,为了更系统更深入的学习jmeter工具和工具中的定时器组件,自己对一些经常使用的定时器组件进行了学习、探索,并记录了一些知识点......
  • Java Web三大组件之Filter过滤器
    JavaWeb三大组件(Servlet、Filter、Listener)1、Filter过滤器概念生活中的过滤器:净水器,空气净化器,大山里的土匪等JavaWeb中的过滤器:当浏览器访问服务器资源时,过滤器就会拦截浏览器发过来的请求,实现一些特别的功能作用:一般用于完成通用的操作,如登录验证,身份验证,统一字符编码和敏感字......
  • drf频率的使用
    频率,按ip地址,用户id,限制1写一个类,继承SimpleRateThrottle2写一个方法,get_cache_key-可以返回ip或者用户idreturnrequest.META.get("REMOTE_ADDR")-返回什么,就用什么做频率限制3写一个类属性scope='lqz'4在配置文件中配置'DEFAULT_THROTTLE_RATES':{......
  • vs2019打包程序时添加自定义的系统必备组件
     若要创建引导程序包,必须创建产品清单产品清单 product.xml包清单 package.xml 将文件复制到引导程序文件夹位置C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\SDK\Bootstrapper\Packages文件夹下    ......
  • vue2实现高度过渡效果,函数式组件
    1.首先创建src下创建utils文件夹,创建transition.js文件封装过渡组件consttransitionStyle='0.3sheightease-in-out'constTransition={//进入前设置el元素的transition,高度0beforeEnter(el){el.style.transition=transitionStyleel.style.height......
  • drf配置文件和三大认证
    0django转换器,配置文件作用#django转换器:django2.x以后,为了取代re_path -intpath('books/<str:name>')---->/books/1----》name=1---》当参数传入视图类的方法中-str-path-slug-uuid#django配置文件 1djagno项目要运行,优先执行配置文......
  • 【服务治理】基于SpringCloudAlibaba微服务组件的灰度发布设计(二)
    一.背景在上文中,灰度发布遇到了些问题,例如:1.动态修改Nacos配置中心的元数据信息,如何同步到Nacos注册中心对应服务的列表中2.管理后台业务调用其它服务灰度实例时的路由规则二.解决方案//TODO ......