Django


关于 DRF ViewSets

  • REST 框架包含一个用于处理路由的抽象 ViewSets.

  • 当 ViewSet 类被实例化为一组视图时,通常仅在最后一刻将其绑定到一组方法处理程序,通常通过使用一个 Router 类来定义 URL conf 的复杂性

  • ModelViewSet类视图集自动提供listcreate检索retrieveupdatedestroyactions。

  • 默认情况下,使用@action 装饰器的自定义操作将响应 GET 请求。methods 如果我们想要一个响应 POST 请求的动作,则可以使用参数。
    @action(methods=['post'])

  • @action这个装饰可以用来添加不符合标准的任何自定义端点create/ update/ delete风格。

  • 默认情况下,自定义操作的 URL 取决于方法名称本身。如果要更改 url 的构造方式,则可以将其 url_path 作为装饰关键字参数。

示例

models.py

from django.db import models


class Testmethods(models.Model):
    gets = models.CharField(max_length=255)
    posts = models.CharField(max_length=255)
    deletes = models.CharField(max_length=255)
    options = models.CharField(max_length=255)


    def __str__(self):
        return self.gets


    class Meta:
        verbose_name = "测试视图集"
        verbose_name_plural = verbose_name

serializers.py


from rest_framework import serializers
from .models import Testmethods


class TestSerializer(serializers.ModelSerializer):


    class Meta:
        model = Testmethods
        fields = '__all__'

view.py

from rest_framework.decorators import action
from rest_framework import viewsets
from .models import Testmethods
from .serializers import TestSerializer


class methodsviewset(viewsets.ModelViewSet):
    app_model = Testmethods
    queryset = Testmethods.objects.all()
    serializer_class = TestSerializer
    permission_classes = [....]

urls.py

from rest_framework.routers import SimpleRouter
from .views import methodsviewset
from .models import Testmethods


app_name = 'testviewsets'

router = SimpleRouter()
router.register(r'', methodsviewset)
urlpatterns = router.urls

根 urls.py

urlpatterns = [
   path('test/',include("testviewsets.urls")),
]

解析

以上代码可产生以下路由,无需显示指定,默认返回的均为 request 的 data 数据。当需要对返回的数据进行操作时,可显示定义该方法,如def list(self,request):则 list 请求会默认使用这个函数进行处理。

  • methods = GET
获取list
http://127.0.0.1:8000/test/
获取detail
http://127.0.0.1:8000/test/id/
  • methods = POST
create
http://127.0.0.1:8000/test/
{json}
  • methods = PUT
update
http://127.0.0.1:8000/test/id/
{json}
  • methods = DELETE
delete
http://127.0.0.1:8000/test/id/

文章作者: douma
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 douma !
评论
 上一篇
Markdown语法 Markdown语法
标题: #h1 级标题 ##h2 级标题 ###h3 级标题 ####h4 级标题 #####h5 级标题 ######h6 级标题 分割线:三个以上的短线 即可作出分割线 --- 超链接:[连接名称](网址 , 标题) [我是链接名
2020-05-30 douma
下一篇 
Hexo关于文章 Hexo关于文章
Hexo创建新文章hexo new [layout] <title> 本地启动服务hexo s 准备发布hexo clean hexo deploy 只更新 static filehexo generate 复制 publish
2020-05-28 douma
  目录