关键词:
视图组件涉及的路由补充:
from rest_framework.viewsets import ViewSetMixin
对路由进行了重新的分发,重写了as_view() 方法,重新封装了请求方法
from rest_framework.viewsets import ViewSetMixin
class ViewSetMixin(object):
"""
This is the magic.
Overrides `.as_view()` so that it takes an `actions` keyword that performs
the binding of HTTP methods to actions on the Resource.
For example, to create a concrete view binding the ‘GET‘ and ‘POST‘ methods
to the ‘list‘ and ‘create‘ actions...
view = MyViewSet.as_view(‘get‘: ‘list‘, ‘post‘: ‘create‘)
"""
@classonlymethod
def as_view(cls, actions=None, **initkwargs):
# actions就是传入的字典
def view(request, *args, **kwargs):
self = cls(**initkwargs)
self.action_map = actions
# 循环字典"get":"list"
for method, action in actions.items():
# self是定义的视图类
handler = getattr(self, action)
# 将self.get 改为 self.list
setattr(self, method, handler)
if hasattr(self, ‘get‘) and not hasattr(self, ‘head‘):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
# 重新执行分发
return self.dispatch(request, *args, **kwargs)
return csrf_exempt(view)
# APIView
def dispatch(self, request, *args, **kwargs):
try:
self.initial(request, *args, **kwargs)
# 重新封装分发
# self.get已经是self.list
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
response = handler(request, *args, **kwargs)
except Exception as exc:
response = self.handle_exception(exc)
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response
路由组件
from rest_framework.routers import DefaultRouter
# urls.py
from django.conf.urls import url
from rest_framework.routers import DefaultRouter
from .view4 import BookView
# 实例化路由对象
router = DefaultRouter()
# 注册路由和视图
router.register(r‘book_list‘,BookView)
urlpatterns = [
]
# 添加到路由列表中
urlpatterns += router.urls
自动生成的路由
默认生成的路由都是带参数的!
^admin/
^api/book/ ^book_list/$ [name=‘book-list‘]
^api/book/ ^book_list.(?P<format>[a-z0-9]+)/?$ [name=‘book-list‘]
^api/book/ ^book_list/(?P<pk>[^/.]+)/$ [name=‘book-detail‘]
^api/book/ ^book_list/(?P<pk>[^/.]+).(?P<format>[a-z0-9]+)/?$ [name=‘book-detail‘]
^api/book/ ^$ [name=‘api-root‘]
^api/book/ ^.(?P<format>[a-z0-9]+)/?$ [name=‘api-root‘]
05drf路由组件(代码片段)
一.路由Routers对于视图集ViewSet,我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息。RESTframework提供了两个routerSimpleRouterDefaultRouter1.1使用方法1)创建router对象,并... 查看详情
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框架(代码片段)
DRF框架知识总览一、接口(api):什么是接口接口文档接口规范二、FBV=>CBV:Function|ClassBaseViewCBV的请求生命周期CBV比FBV的优势三、drf框架的基础试图类APIView:请求模块、解析模块、渲染模块、响应模块、异常模块四、drf核心组件... 查看详情
drf框架认证组件(代码片段)
DRF框架的认证组件核心代码: self.perform_authentication(request) 框架自带模块: fromrest_frameworkimportauthentication 认证组件的返回值:request.user自定义的认证组件的钩子方法authenticator.authenticate(self);返... 查看详情
drf框架之serializers序列化组件(代码片段)
...学了序列化工具json工具,就是吧信息存为类字典形式2.DRF框架自带序列化的工具:serializers 3.DRF框架serializers分为:第一种Serializer 第二种ModelSerializer 第一种用法之Serializerfromdjango.dbimportmodels#Createyourmod 查看详情
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-路由和认证(代码片段)
drf-路由目录drf-路由1路由1.1路由router的使用1.2action的使用2认证2.1认证的写法2.2源码分析2.3认证组件的使用1路由针对视图集ViewSet,我们出来可以自己手动指明请求方式与执行函数间的对应关系,还可以使用Routers来快速实现路由... 查看详情
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#必须完成该配置... 查看详情
django-rest-framework---总结(代码片段)
目录drf回顾总结drf基础1.drf框架安装2.接口3.restful接口规范4.基于restful规范的原生Django接口drf五大模块1.请求模块:request对象2.渲染模块:浏览器和Postman请求结果渲染数据的方式不一样3.解析模块4.异常模块5.响应模块序列化组件... 查看详情
drf框架知识总览(代码片段)
DRF框架知识总览"""1)接口(api):什么是接口接口文档接口规范2)FBV=>CBV:Function|ClassBaseViewCBV的请求生命周期CBV比FBV的优势3)drf框架的基础试图类APIView:请求模块、解析模块、渲染模块、响应模块、异常模块4)drf... 查看详情
drf框架之路由routers(代码片段)
...到路由表中urlpatterns+=router.urls当我们定义好Routers后,DRF框架会使用Routers为我们自动创建好路由信息,但是自定义的action并不会自动创建路由信息。2.为自定义action自动创建路由信息在视图集中,如果想要让Router自动帮助我们为... 查看详情
drf认证组件权限组件jwt认证签发jwt框架使用(代码片段)
...user对象九、drf项目的jwt认证开发流程(重点)十、drf-jwt框架基本使用安装(终端)签发token校验token(认证组件)设置需要登录才能访问的接口进行测试(views.py)测试访问登录认证接口(Postman)一、注册接口urls.pyrouter.register('... 查看详情
drf框架——drf-jwt手动签发与校验过滤组件筛选组件排序组件分页组件(代码片段)
自定义drf-jwt手动签发和校验签发token源码入口前提:给一个局部禁用了所有认证与权限的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面获取提交的username和password1)rest_framework_jwt.views.ObtainJSONWebToken的父... 查看详情
drf4视图与路由组件(代码片段)
...st,新的request是我们这个Request类 我们用了rest_framework框架以后,我们的request是重新封装的Request类request.query_params存放的是我们get请求的参数request.data存 查看详情
drf框架8系统权限类使用用户中心信息自查token刷新机制认证组件项目使用:多方式登录权限组件项目使用:vip用户权限频率组件异常组件项目使用(代码片段)
系统权限类使用图书接口:游客只读,用户可增删改查权限使用fromrest_framework.permissionsimportIsAuthenticatedOrReadOnlyclassBookViewSet(ModelViewSet):#游客只读,用户可增删改查permission_classes=[IsAuthenticatedOrReadOnly]queryset=models.Book.objects.all()seriali... 查看详情
视图组件,路由组件(代码片段)
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 查看详情
drf序列化(代码片段)
一、安装Django RESTframework框架使用命令:pipinstalldjangorestframework二、在setings里面注册INSTALLED_APPS=["rest_framework"]Serializers序列化组件 查看详情