首页 > 其他分享 >路由

路由

时间:2022-12-08 21:58:27浏览次数:25  
标签:get models rest framework import 路由

路由

目录
对于视图集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.一旦视图类,继承了ViewSerMixin,路由
  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,rest,framework,import,路由
From: https://www.cnblogs.com/zaosong/p/16967447.html

相关文章

  • gin源码学习-路由注册(2)
    gin框架主要是在标准库net/http的基础上对路由进行改写,本文将从net/http与gin的路由注册分享路由方面的一些理解。1.net/http的路由注册1.1路由注册首先来个demo:pack......
  • 同步导航菜单与路由,并在关闭标签(或浏览器)后重新时,维持离开时的路由
    简介PC端路由跳转除了各种点击事件外,还经常会通过前进后退键触发,此时,为了确保导航菜单与路由地址的同步关系,就需要在菜单点击事件的基础上,新增对路由的侦听。同时,若是希......
  • laravel9-原生注解路由插件-laravel-route-notes
    laravel-route-noteslaravel框架扩展,原生注解生成路由优点是直接生成路由文件,不在运行中解析路由,提升效率使用环境[PHP]>=8.0[Laravel]>=9.0如何安装直接使用co......
  • vue路由基础 (个人)
    首先要有一个路由的js文件import{createRouter,createWebHashHistory}from"vue-router";importappHomefrom'../views/Home.vue'importitemMusicfro......
  • 华为路由器配置telnet与ssh远程登录
     2022.12.8--1.12分享华为路由器配置telnet与ssh远程登录1、interfaceGigabitEthernet0/0/0ipaddress192.168.1.1255.255.255.02、stelnetserverenable3......
  • vue 路由重复点击,报错处理
    路由重复点击,控制台会弹出提醒//在VueRouter上配置路由跳转,在router中的index.js中加上以下代码,注意加在use之前constrouterPush=VueRouter.prototype.push;VueR......
  • express 为所有路由添加 405 method not allowd 响应
    背景知识HTTPStatusCode405405MethodnotallowedTheresourcewasrequestedusingamethodthatisnotallowed.Forexample,requestingaresourceviaaP......
  • vue 多级嵌套路由,页面不变化问题解决
      component:{render(c){returnc('router-view')}},redirect:'/set/origin',在二级路由出添加上面的代码,并重定向二级路由页面就可以了......
  • React后台管理系统06 路由
     在src目录下新建2views文件夹,用来存放组件,这里我们新建2个路由组件HomeAbout,如下所示:创建好这两个路由组件之后,在src目录里面我们新建一个router路由文件夹,然后命名......
  • 路由器无线SSID、BSSID
    背景考勤wifi打卡使用绑定无线ssid、bssid以及gps位置定义1、笼统来说,BSSID等价于MAC地址2、如果在一个基础架构网络中,该BSSID的默认就是对应的网卡MAC(如手机开无线......