05drf路由组件(代码片段)

bailongcaptain bailongcaptain     2022-12-06     334

关键词:

一.路由Routers

对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。

REST framework提供了两个router

  • SimpleRouter
  • DefaultRouter

1.1 使用方法

1) 创建router对象,并注册视图集,例如

from rest_framework import routers

router = routers.SimpleRouter() #实例化
router.register(r‘router_stu‘, StudentModelViewSet, base_name=‘student‘)

SimpleRouter会产生两个路由:

<URLPattern ‘^books/$‘ [name=‘book-list‘]>, 
<URLPattern ‘^books/(?P<pk>[^/.]+)/$‘[name=‘book-detail‘]>

DefaultRouter会产生六个路由:

^books/$ [name=‘book-list‘]
^books/(?P<pk>[^/.]+)/$ [name=‘book-detail‘]  这两条跟simple一样

^$ [name=‘api-root‘]  根,根路径会显示出所有可以访问的地址
^.(?P<format>[a-z0-9]+)/?$ [name=‘api-root‘]


^books.(?P<format>[a-z0-9]+)/?$ [name=‘book-list‘]  http://127.0.0.1:8000/books.json
^books/(?P<pk>[^/.]+).(?P<format>[a-z0-9]+)/?$ [name=‘book-detail‘]  http://127.0.0.1:8000/books/1.json

2)把生成的路由列表追加到urlpatterns

urlpatterns += router.urls

1.2 action的使用

作用:给继承自ModelViewSet的视图类中定义的函数也添加路由

使用:

装饰器,放在被装饰的函数上方,method:请求方式,detail:是否带pk

class BookViewSet(ModelViewSet):
    queryset =Book.objects.all()
    serializer_class = BookSerializer
    
    @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)
    
    # methods第一个参数,传一个列表,列表中放请求方式,
    # ^books/get_1/$ [name=‘book-get-1‘] 当向这个地址发送get请求,会执行下面的函数
    # detail:布尔类型 如果是True
    #^books/(?P<pk>[^/.]+)/get_1/$ [name=‘book-get-1‘]

drf路由组件(代码片段)

...个视图有list、create、retrieve、update、destroy所有的功能,路由组件可以用DRF自带的routers简写项目总路由:pro/urls.pyfromdjango.contribimportadminfromdjango.urlsimportpath,includeurlpatterns=[path(‘admin/‘,admin.site.urls),path(‘books/‘,include(‘books.urls‘... 查看详情

drf--路由组件和版本控制(代码片段)

路由组件先来看下我们前面写的路由fromdjango.conf.urlsimporturl,includefrom.viewsimportBookModelViewurlpatterns=[url(r‘^book/$‘,BookModelView.as_view("get":"list","post":"create")),url(r‘^book/(?P<pk>d+)‘,BookModelView.as_view("get":"retrieve","put":"update","delete":"des... 查看详情

drf框架路由组件(代码片段)

视图组件涉及的路由补充:  fromrest_framework.viewsetsimportViewSetMixin  对路由进行了重新的分发,重写了as_view()方法,重新封装了请求方法fromrest_framework.viewsetsimportViewSetMixinclassViewSetMixin(object):"""Thisisthemagic.Overrides`.as_view()`sothati... 查看详情

drf-路由和认证(代码片段)

drf-路由目录drf-路由1路由1.1路由router的使用1.2action的使用2认证2.1认证的写法2.2源码分析2.3认证组件的使用1路由针对视图集ViewSet,我们出来可以自己手动指明请求方式与执行函数间的对应关系,还可以使用Routers来快速实现路由... 查看详情

视图组件,路由组件(代码片段)

DRF的视图APIView我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们两个有什么不同呢~~~?urlpatterns=[    url(r‘^book$‘,BookView.as_view()),    url(r‘^book/(?P<id> 查看详情

drf路由(代码片段)

"在urls.py文件中按照如下步骤写,即可正确使用DRF的内置路由.from.viewsimportBookModel#1.导入我们的视图fromrest_framework.routersimportDefaultRouter#2.导入rest_framework内置的路由方法router=DefaultRouter()#3.首先,实例化一个DefaultRouter对象router 查看详情

drf4视图与路由组件(代码片段)

APIView和View的区别不管是View还是APIView最开始调用的都是as_view()APIView继承了View,并且执行了View中的as_view()方法,最后把view返回了,用csrf_exempt()方法包裹后去掉了csrf的认证。 在View中的as_view方法返回了view函数,而view函数执行... 查看详情

drf视图组件(代码片段)

一基本视图写一个出版社的增删查改resful接口 路由:url(r‘^publish/$‘,views.PublishView.as_view()),url(r‘^publish/(?P<pk>d+)/$‘,views.PublishDetailView.as_view()),视图:classPublishSerializers(serializers.ModelSerializer):classMeta:model=models.Publishfields=‘_... 查看详情

drf框架(代码片段)

...、解析模块、渲染模块、响应模块、异常模块四、drf核心组件序列化组件:将后台的任何数据,进行序列化返回给前台;将前台的数据反序列化成后台model对象再入库三大认证组件:认证组件、权限组件(RBAC)、频率组件视图家族... 查看详情

drf之路由组件

组件路由的步骤1、先要导入DefaultRouter  fromrest_framework.routersimportDefaultRouter2、实例化DeaultRouter对象  router=DefaultRouter()3、注册我们的路由及视图  router.register(匹配路由的前缀r‘^book‘,视图函数名BookModelView)4、用urlpatterns+... 查看详情

drf-解析器组件(代码片段)

DRF之解析器组件引入DjangoRestFramework帮助我们实现了处理application/json协议请求的数据,另外,我们也提到,如果不使用DRF,直接从request.body里面拿到原始的客户端请求的字节数据,经过decode,然后json反序列化之后,也可以得到一... 查看详情

drf视图组件(代码片段)

目录一视图1.1试图配置1.2视图1.2.12个视图基类1.2.1.1APIView2.2.1.2GenericAPIView[通用视图类]get_serializer(self,args,*kwargs)1.2.25个视图扩展类1)ListModelMixin2)CreateModelMixin3)RetrieveModelMixin4)UpdateModelMixin5)DestroyMode 查看详情

drf之路由系统与视图(代码片段)

手动路由编写#路由fromdjango.conf.urlsimporturlfromapp01.viewsimportUserListViewurlpatterns=[#GET请求查询所有#POST请求增加url(r'^users/$',UserListView.as_view()),url(r'^users.(?P<format>w+)/$',Us 查看详情

drf序列化组件(代码片段)

modelsfromdjango.dbimportmodels#Createyourmodelshere.classBook(models.Model):nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)price=models.DecimalField(max_digits=5,decimal_pl 查看详情

drf框架6视图集与路由组件(开发最常用最高级)三大认证原理rbac认证规则(代码片段)

准备工作models.pyfromdjango.dbimportmodels#基类:是抽象的(不会完成数据库迁移),目的是提供共有字段的classBaseModel(models.Model):is_delete=models.BooleanField(default=False)updated_time=models.DateTimeField(auto_now_add=True)classMeta:abstract=True#必须完成该配置... 查看详情

drf的视图和路由(代码片段)

DRF的视图APIView我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们两个有什么不同呢~~~urlpatterns= [    url(r‘^book$‘,BookView.as_view()),    url(r‘^book/(?P<i 查看详情

drf之解析器组件及序列化组件(代码片段)

  通过上一篇博客的学习,我们已经有了一个共识,Django无法处理application/json协议请求的数据,即,如果用户通过application/json协议发送请求数据到达Django服务器,我们通过request.POST获取到的是一个空对象。  DjangoRestFramework... 查看详情

drf-解析器组件源码解析(代码片段)

解析器组件源码解析解析器组件源码解析1执行request.data开始找重装的request中的data方法2在dispatch找到重装的requestdefdispatch(self,request,*args,**kwargs):request=self.initialize_request(request,*args,**kwargs)***这里开始找data3在initialize_req 查看详情