自动生成路由和action的使用

自动生成路由

普通cbv视图形式的路由:

    path('books4/', views.Book4View.as_view()),
    re_path('books4/(?P<pk>\d+)', views.Book4DetailView.as_view())

继承了ViewSetMixin及其子类的视图路由:

    path('books5/', views.Book5View.as_view(actions={'get':'list','post':'create'})), #当路径匹配,又是get请求,会执行Book5View的list方法
    re_path('books5/(?P<pk>\d+)', views.Book5View.as_view(actions={'get':'retrieve','put':'update','delete':'destroy'})),

继承自视图类,ViewSetMixin及其子类的路由写法(自动生成路由):

        # 第一步:导入routers模块
        from rest_framework import routers
        # 第二步:有两个类,实例化得到对象
        # routers.DefaultRouter 生成的路由更多,一般用第二种就行
        # routers.SimpleRouter
        router=routers.DefaultRouter()
        # 第三步:注册
        # router.register('路由前缀','继承自ModelViewSet视图类','别名')
        router.register('books',views.BookViewSet) # 不要加斜杠了

        # 第四步
        # router.urls # 自动生成的路由,加入到原路由中
        # print(router.urls)
        # urlpatterns+=router.urls

action装饰器

导入:from rest_framework.decorators import action

# action干什么用?为了给继承自ModelViewSet的视图类中定义的函数也添加路由
# 使用
class BookViewSet(ModelViewSet):
    queryset =Book.objects.all()
    serializer_class = BookSerializer
    # methods第一个参数,传一个列表,列表中放请求方式,
    # ^books/get_1/$ [name='book-get-1'] 当向这个地址发送get请求,会执行下面的函数
    # detail:布尔类型 如果是True
    #^books/(?P<pk>[^/.]+)/get_1/$ [name='book-get-1']
    @action(methods=['GET','POST'],detail=True)
    def get_1(self,request,pk):
        print(pk)
        book=self.get_queryset()[:2]  # 从0开始截取一条
        ser=self.get_serializer(book,many=True)
        return Response(ser.data)
    
# 装饰器,放在被装饰的函数上方,method:请求方式,detail:是否带pk

# action里的其他参数:
url_path: 控制生成的/user/后的路径是什么,如果不写,默认以方法名命名   /user/login/,一般跟函数名同名即可
url_name:别名,用于反向解析

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:自动生成路由和action的使用 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 关于编辑器和解释型编译型语言

    各种语言用到的编辑器 python开发:pycharm(收费),vscode(免费),sublintext, go开发:goland(收费),vscode,国产的 java:idea(收费),eclipse(免费),MyEclipse(收费) android:androidstudio(免费),eclipse+adt 前端:webstorm(收费) php:…

    Python开发 2023年4月2日
    00
  • 线程

    1. 什么是线程 线程就是进程里面的执行单位,每一个进程肯定都自带一个线程,真正被cpu执行的是线程,线程是代码的执行过程,该过程中需要的资源都找对应的进程要 进程是资源的单位,线程是执行单位! 补充:同一个进程里面的多个线程资源是共享的! 2. 为啥要有线程 一个进程里面可以开设多个线程,而开设线程是不需要申请内存空间的(进程需要),因此,开设线程的消耗远…

    2023年4月2日
    00
  • 登录功能

    思路分析 登录页面,我们还是采用ajax的方式提交用户数据 唯一需要学习的是如何制作图片验证码! 具体的登录页面效果图如下: 如何制作图片验证码 推导步骤1:在img标签的src属性里放上验证码的请求路径 补充1.img的src属性: 1.图片路径 2.url 3.图片的二进制数据 补充2:字体样式 我们计算机上之所以可以输出各种各样的字体样式,其内部其实对…

    2023年4月2日
    00
  • 计算机介绍和五大组成

    1. 什么是计算机 计算机俗称‘电脑’,通电的人脑。其实,计算机所有的组成部分,都是模仿人的某一个功能或者器官。 2. 为什么要有计算机 为了执行人类通过编程语言编写的文件程序,从而把人类解放出来。 3.计算机的组成部分 计算机有五大组成部分:控制器、运算器、存储器、输入设备、输出设备。 3.1 控制器 它是计算机的指挥系统,负责控制计算机其他的组件如何进行…

    2023年4月2日
    00
  • 迭代器与生成器

    1.什么是迭代器 迭代器是用来迭代取值的工具,而迭代的意思是一个重复的过程,每一次的重复都是基于上一次的结果继续的,单纯的重复并不是迭代 2.为何要有迭代器 在python中涉及到需要把多个值循环取出来的类型有:字符串、列表、元组、字典、集合、打开文件等,我们可以考虑使用while循环的方式来循环取出多个值,例如: list=[‘egon’,’lin’,11…

    Python开发 2023年4月2日
    00
  • 实时展示用户上传的头像

    实时展示用户上传的头像 总体思路 “”” 1.首先需要给对应的上传头像input框绑定一个文本域变化事件 (当检测到用户对该文件框上传了头像就会触发一系列操作) 2.再生成一个文件阅读器对象 3.再获取用户上传的文件头像 4.把用户上传的文件头像交给文件阅读器对象FileReader读取 5.利用文件阅读器把读取的文件头像结果展示到前端页面 (修改img的s…

    Python开发 2023年4月2日
    00
  • python中的三大主流wed框架简介

    1.django 特点:大而全,自带的功能特别特别多,类似于航空母舰 不足之处:有时候过于笨重 django中web框架的三个部分: socket部分:用的wsgiref模块路由与视图函数的对应关系:自己写的模板语法:自己写的 2.flask 特点:小而精,自带的功能特别少,类似于轻骑兵 但是它的第三方模块特别特别的多,如果把第三方模块加起来完全可以盖过dj…

    Python开发 2023年4月2日
    00
  • bbs项目前期准备和表设计

    一、前期准备 1.新建一个django项目 2.连接mysql数据库(注意需要在init文件里面书写import pymysql),告诉django使用pymysql连接数据库 3.静态文件路径在settings里配置一下,并且在项目文件夹下新建一个静态文件夹 4.将需要用到bootstrap的css和js文件添加到static文件夹内 二、bbs项目表设计…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部