首页 > 其他分享 >路由Routers

路由Routers

时间:2022-12-12 17:36:42浏览次数:33  
标签:get models Routers rest framework import 路由

路由Routers

对于视图集ViewSet,除了可以自己手动指明请求方式与动作action之间,还可以使用Routers来快速实现路由信息

rest framework提供了两个router

  • SimpleRouter
  • DefaultRouter
#1.在urls.py中配置
path('books/', views.BookView.as_view()),
re_path('book/(?P<pk>\d+)', views.BookDetailView.as_view()),

#2.一旦视图类,继承了ViewSetMixin,路由
  path('books5/', views.Book5View.as_view(actions={'get': 'list', 'post': 'create'})),
re_path('books5/(?P<pk>\d+)',views.Book5View.as_view(actions={'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

#3.继承自视图类,ModelViewSet的路由写法(自动生成路由)

1、自动生成路由

# urls.py

# 第一步,导入routers模块
	from rest_framework import routers
# 第二部,有两个类,实例化得到对象
    # routers.DefaultRouter:生成的路由更多,
    # routers.SimpleRouter
	router = routers.SimpleRouter()
# 第三步,注册
    # router.register(prefix='前缀', viewset=继承自ModelViewSet视图类,basename='别名')
    router.register(prefix='books', viewset=views.BookViewSet)
# 第四步,自动生成路由
	# print(router.urls)
    urlpatterns += router.urls
#models.py
from django.db import models
class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_places=3)
    publish = models.CharField(max_length=32)

#ser.py
from rest_framework import serializers
from app01.models import Book
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'
               
#views.py
from rest_framework.viewsets import ModelViewSet
from app01.models import Book
from app01.serializer import BookSerializer
class BookViewSet(ModelViewSet):
    queryset = Book.objects
    serializer_class = BookSerializer

2、action的使用

为了给继承自ModelsViewSet的视图类中自定义的函数也添加路由
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework.decorators import action  # 装饰器
from app01.models import Book
from app01.serializer import BookSerializer

class BookViewSet(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    # methods传一个列表,列表中放请求方式,
    # detail,布尔类型,
    #
    @action(methods=['get'], detail=False)
    # ^books/get_1/$ [name='book-get-1'] # 朝这个地址发送get请求,会执行下面的函数
    def get_1(self, request):
        book_obj = self.get_queryset()[:2]  # 从0开始截取一条
        ser = self.get_serializer(book_obj, many=True)
        return Response(ser.data)

    @action(methods=['get'], detail=True)
    # 生成  ^books/(?P<pk>[^/.]+)/get_1/$ [name='book-get-1']
    def get_2(self, request, pk):
        book_obj = self.get_queryset()[:2] 
        ser = self.get_serializer(book_obj, many=True)
        return Response(ser.data)
    
#装饰器放在被装饰的函数中,methods:请求方式,detail:是否带pk

image-20221208183641841

image-20221208183956318

image-20221208183826571

标签:get,models,Routers,rest,framework,import,路由
From: https://www.cnblogs.com/zaosong/p/16976686.html

相关文章

  • Vue 路由传参加密
    首先,创建一个base64.jsconstBase64={//加密encode(str){returnbtoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,function......
  • 思科路由器关联RADIUS服务器配置命
    Cisco(config)#aaanew-model //全局启动aaa1.关联Tacacs+服务器Cisco(config)#tacacsservers2Cisco(config-server-tacacs)#addCisco(config-server-tacacs)#addr......
  • Django路由层
    路由层当⽤户在您的Web应⽤程序上发出⻚⾯请求时,Django会获取url中请求路径(端⼝之后的部分),然后通过urls.py⽂件查找与路径相匹配的视图,然后返回HTML响应或404未找到的错......
  • 路由query拼接format函数
    //query制作小工具,不需要手动拼接,直接传入json格式数据即可urlformat.ts//FIXME:当参数为数组或二级对象时,请按自己的需求进行修改typeVal=any;interfaceQ......
  • 网络路由-3路由器及netstat及ip
    netstatsocket: ip命令:......
  • 配置交换机、路由器…等提示:% Unrecognized command found at '^' position.原因和解
    对于路由器、防火墙、交换机……等网络设备初学者在调试配置的时候经常会遇到英文错误提示:%Unrecognizedcommandfoundat'^'position.不知道是什么原因,到底是命令输入......
  • 基础网络-配置动态路由
    rip根据路由数量;ospf路由带宽大小bgp用于公网yuminstalquaggarpm-qlquaggasystemctlstartospfdss-tnlls/etc/quagga地址固化ll/etc/sysconfig/ne......
  • 网络路由
    网络路由分类:主机路由:机器之间的网络路由网段路由:默认路由:未知网络优先级:主机路由》网络路由》》默认路由路由表组成:route-n(类似4*100接力,关注目标地址)1、目......
  • 【Vue】 vue-element-admin 路由菜单配置
     路由说明见官方文档:https://panjiachen.gitee.io/vue-element-admin-site/zh/guide/essentials/router-and-nav.html  组件渲染的数据来源这里先说明侧边栏组......
  • Blazor和Vue对比学习(进阶.路由导航四):路由传参
    客户端路由传参,主要通过两种方式:(1)路径参数(route),如/student-detial/1,其中/student为路由,1为传递的参数;(2)查询参数(query),如/student-detail?id=1&name=zs&age=18&sex=男。......