ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rest-framework之url控制

2019-07-06 15:01:31  阅读:176  来源: 互联网

标签:url Publish publish pb framework models rest pk class


自定义路由(原始方式)

 url(r'^publish/$', views.Publish.as_view()),
 url(r'^publish/(?P<pk>\d+)$', views.PublishDetailView.as_view()),
class Publish(models.Model):
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
from rest_framework.serializers import ModelSerializer
from app01 import models
from rest_framework.views import APIView
from rest_framework.response import Response
# Create your views here.
class PublishSerializers(ModelSerializer):
    class Meta:
        model = models.Publish
        fields="__all__"

class Publish(APIView):
    def get(self,request):
        publish_list=models.Publish.objects.all()
        pb = PublishSerializers(publish_list,many=True)
        return Response(pb.data)


    def post(self,request):
        pb = PublishSerializers(data=request.data)
        if pb.is_valid():
            pb.save()
            return Response(pb.data)
        else:
            return Response(pb.errors)


class PublishDetailView(APIView):
    def get(self,request,pk):
        publish_obj = models.Publish.objects.filter(pk=pk).first()
        pb =PublishSerializers(publish_obj,many=False)
        return Response(pb.data)

    def put(self,request,pk):
        publish_obj = models.Publish.objects.filter(pk=pk).first()
        pb = PublishSerializers(data=request.data,instance=publish_obj)
        if pb.is_valid():
            pb.save()
            return Response(pb.data)

    def delete(self,request,pk):
        models.Publish.objects.filter(pk=pk).delete()
        return Response("")

半自动路由(视图类继承ModelViewSet)

    # 半自动路由
    url(r'^publish/$', views.PublishView.as_view({'get': 'list', 'post': 'create'})),
    url(r'^publish/(?P<pk>\d+)/$',views.PublishView.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

全自动路由自动生成路由

前提是视图类里面必须继承ModelViewSet

from django.conf.urls import url,include

# SimpleRouter 自动生成两条路由
# DefaultRouter自动生成四条路由
# router=SimpleRouter()
router=DefaultRouter()
# 两个参数,一个是匹配的路由,一个是视图中写的CBV的类 router.register('publish',views.PublishView) url(r'',include(router.urls))
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

 

 SimpleRouter下生成的路由

DefaultRouter下生成的路由

 

 

路径上加上显示的是json格式的信息

这两种都可以

 

标签:url,Publish,publish,pb,framework,models,rest,pk,class
来源: https://www.cnblogs.com/zhengyuli/p/11140048.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有