码迷,mamicode.com
首页 > Web开发 > 详细

rest-framework之url控制

时间:2019-07-05 19:08:58      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:匹配   url   lis   通过   include   click   全自动   记录   cat   

一 自定义路由(原始方式)

from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r^books/$, views.BookView.as_view()),
    url(r^books/(?P<pk>\d+)$, views.BookDetailView.as_view()),
]
技术图片
class BookView(APIView):

    def get(self, request):
        book_list = models.Book.objects.all()
        bs = BookSerializers(book_list, many=True)
        return Response(bs.data)

    def post(self, request):
        # 添加一条数据
        print(request.data)

        bs=BookSerializers(data=request.data)
        if bs.is_valid():
            bs.save()  # 生成记录
            return Response(bs.data)
        else:

            return Response(bs.errors)

class BookDetailView(APIView):
    def get(self,request,pk):
        book_obj=models.Book.objects.filter(pk=pk).first()
        bs=BookSerializers(book_obj,many=False)
        return Response(bs.data)
    def put(self,request,pk):
        book_obj = models.Book.objects.filter(pk=pk).first()

        bs=BookSerializers(data=request.data,instance=book_obj)
        if bs.is_valid():
            bs.save() # update
            return Response(bs.data)
        else:
            return Response(bs.errors)
    def delete(self,request,pk):
        models.Book.objects.filter(pk=pk).delete()

        return Response("")
技术图片

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

技术图片
from django.conf.urls import url
from app01 import views
urlpatterns = [
    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

三 全自动路由(自动生成路由)

技术图片
from django.conf.urls import url,include
from app01 import views
from rest_framework import routers
router=routers.DefaultRouter()
# 两个参数,一个是匹配的路由,一个是视图中写的CBV的类
router.register(publish,views.PublishView)
urlpatterns = [
    # http://127.0.0.1:8000/publish/format=json(渲染器通过这个判断,返回渲染的页面)
    # url(r‘^publish/‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})),
    # http://127.0.0.1:8000/publish.json(渲染器通过这个判断,返回渲染的页面)
    # url(r‘^publish\.(?P<format>\w+)$‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})),
    
    # 可以用 以下方式访问
    # 1 http://127.0.0.1:8000/publish/
    # 2 http://127.0.0.1:8000/publish.json
    # 3 http://127.0.0.1:8000/publish/3
    # 4 http://127.0.0.1:8000/publish/3.json   
    url(r‘‘,include(router.urls))
]
技术图片
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

 

rest-framework之url控制

标签:匹配   url   lis   通过   include   click   全自动   记录   cat   

原文地址:https://www.cnblogs.com/ZKPython/p/11140114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!