APIView视图类 在DRF中,推荐使用类视图,因为类视图可以通过继承的方式把一些重复性的工作抽取出来,而使得代码更加简洁。...单局部改 群全局改、群局部改(这2个用的非常少) 单查、群查操作 注意:如果我们做的删除操作是逻辑删除,单查群查的时候,需要先过滤数据,比如过滤掉被删除的,再返回给前台 class Students(APIView...else: return Response({ "status": 1, "message": "失败", }) 总结 APIView...视图类就是做增删改查的操作,当然APIView中还继承了一些常用的属性,比如authentication_classes、permission_classes、throttle_classes等。
一、DRF 框架所有视图类 最基础:django 自带的 views 类 DRF 框架最基础的视图类:views.APIView DRF 框架中工具视图:generics GenericAPIView...partial_update 单局部修改 DestroyModelMixin:destroy 单删 viewsets 视图集 以上视图都是基于 django 自带的 views 进行相关方法的封装 二、APIView...# 列表或元组,权限检查类 permission_classes # 列表或元组,流量控制类 throttle_classes from rest_framework.views import APIView...rest_framework.response import Response # url(r'^books/$', views.BookListView.as_view()), class BookListView(APIView
APIView APIView是Django REST framework提供的所有视图的基类,继承自Django的View类。...使用方式: from rest_framework.views import APIView APIView与View的不同之处在于: 传入到视图方法中的是Django REST framework的Request...APIView与View的使用基本相同,像往常一样。依旧是get方法处理get请求,post方法处理post请求。除此之外,APIView增加了一些可插入的属性。最常用的是下面三个。...的视图可能如下所示: from rest_framework.response import Response from rest_framework.views import APIView from...class BookInfoView(APIView): """书籍信息视图""" def get(self, request, *args, **kwargs): objs
APIview的请求生命周期源码分析 Django项目启动=>加载settings文件=>加载models、views、urls文件,执行urls文件,调用视图类的as_view()方法。 ?...APIview的as_view()方法继承父类的as_view()方法,并增加了局部禁用csrf中间件的功能 def as_view(cls, **initkwargs): """...# #局部禁用csrf认证 return csrf_exempt(view) APIview的父类就是Django的视图类view,as_view...里面查找,APIview的dispatch方法是对view类的dispatch方法的重写,对view类的dispatch方法进行了优化,具体优化一起来看APIview的dispatch方法源码: def..._request 3.重新格式化请求数据存放位置 拼接参数:request.query_params 数据包参数:request.data # 源码分析: # 入口:APIVIew的dispatch方法的
目录 用APIview实现的功能 路由 model 序列化文件 view视图 查询全部数据 新增数据 根据pk查询一条数据 根据pk进行修改一条数据 删除一条数据 用APIview实现的功能 """.../books// 提供指定id的记录 PUT /books// 修改指定id的记录 DELETE /books// 删除指定id的记录 APIView...序列化器 """ 路由 # 列表视图的路由APIView url(r'^books/$', views.BookListAPIView.as_view()), # 详情视图的路由...APIView url(r'^books/(?...的视图""" class BookListAPIView(APIView): """列表视图""" def get(self, request): """查询所有"""
玩DRF之前,我们先说一下我们DRF中有哪些内容: 咱们玩下面10个组件: a.APIView (*****) b.序列化组件 (*****) c.试图类(mixin) (*****)... d.认证组件 (*****) e.权限组件 f.频率组件 g.分页组件 h.解析器组件 (*****) i.相应其组件 j.url控制器 2.基于DRF来写接口 2.1 APIView...,APIView是继承的django的View,也就是APIView在View的基础上添加了一些其他的功能 from rest_framework.views import APIView class...CourseView(APIView): def get(self,request): course_obj_list = models.Course.objects.all(...照样拿到了数据,那么怎么回事儿呢,我们看源码,知道一下APIView的流程就行。 2.2 解析器组件 知识准备,还记得一个叫做contentType的http请求头的东西吗?回想一下。
如何通过 view 实现 rest api 接口 APIView、GenericView、Viewset、mixins ? ?...APIView 方式实现 api Django REST框架的视图基类是 APIView ?...APIView 的类视图定义方法来实现 get()、post()或者其它请求方式 from django.http.response import HttpResponsefrom django.http.response...urls.py'''url(r'^index/$',views.IndexView.as_view()) ''' views.py '''class IndexView(APIView
) json_data = json.loads(json_data) return JsonResponse(json_data, safe=False) 0x02 APIView...接下来,我们用APIView来实现 from rest_framework.views import APIView from rest_framework.response import Response...): def get(self, request, format=None): """ 通过APIView实现课程列表页 """...APIView对django本身的View进行封装,从上述的代码,这样分析,两者的差别看起来不是很大,但实际中APIView做了很多东西,它定义了很多属性与方法,举几个例子 # 这三个是常用的属性...GenericAPIView对APIView再次封装,实现了强大功能: 加入queryset属性,可以直接设置这个属性,不必再将实例化的courses,再次传给seriliazer,系统会自动检测到。
REST框架提供了一个APIView类,它是Django View类的子类。...View与APIView的区别 View是Django默认的视图基类,APIView是REST framework提供的所有视图的基类, 继承自Django的View。...APIView与View的不同之处在于: 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework...for key, value in kwargs.items(): setattr(self, key, value) REST framework的APIView继承了django...REST framework的APIView REST framework的APIView继承了django的View类,先序列化Card类,这里的序列化用rest_framework里面的ModelSerializer
文章目录 一、APIView ---- 一、APIView REST框架提供了一个类APIViewView,APIView类在以下方面与常规类不同,它是继承于View类。...from rest_framework.views import APIView from rest_framework.response import Response from book.models...import BookInfo from drf_book.serializer import BookSerializer class BooksAPIView(APIView): ""...# 调用序列化器中封装保存方法create ser.save() return Response(ser.data) class BookAPIView(APIView
from rest_framework.response import Response from rest_framework.views import APIView class get_weatherinfo_base...(APIView): # authentication_classes = [JwtAuthorizationAuthentication, ] def get(self, request...city = self.kwargs['city'] return Response({"datas":city}) class get_weatherinfo_all(APIView...02 — 添加实现视图类 from rest_framework.response import Response from rest_framework.views import APIView from...myapp.utils.weatherInfo_utils import Gaode_tianqi class get_weatherinfo_base(APIView): # authentication_classes
drf快速使用 views.py serializer.py urls.py 在settings的app中注册 models.py postman测试 CBV源码流程分析 Django View和DRF APIView...的小插曲 DRF之APIView和Request对象分析 APIView的执行流程 Request对象分析 原来的django中没有request.data,造一个!...,顺便提一嘴APIView也是继承了View ----> class APIView(View) 这里需要强调一下,CBV路由归根结底还是FBV都是函数的内存地址,比如views.类.as_view(...的小插曲 ps:不管是DRF中的APIView还是乱七八糟的xxView,最后只要继承了Django中的View就是视图类 DRF之APIView和Request对象分析 APIView的执行流程 #...)找dispatch方法,发现APIView类中有,千万注意了这里可不是View中的dispatch方法了 4、APIView类中的dispatch主要源码: # APIView的dispatch
视图类传递参数给序列化类 二次封装Response 视图家族简介 generics APIView视图基类 mixins视图六大工具类 generic中的工具视图 视图集viewsets...---- GenericAPIView视图对比APIView 重点:GenericAPIView在APIView的基础上完成了哪些事?...1.get_queryset() 2.get_object() 3.get_serializer() 修改代码如下: from rest_framework.views import APIView...serializers ## GenericAPIView 是继承APIView的 ,完全兼容APIView from rest_framework.generics import GenericAPIView...的,使用完全兼容APIView # 重点:GenericAPIView在APIView基础上完成了哪些事 # 1)get_queryset():从类属性queryset中获得model的queryset
启动项目时 昨天在调试django时,发现在 APIView 中打的断点没有断下来,而是打在 View 中的断点断下来了,调试了很多次,最后发现,在 django 项目启动时,会首先加载 urls 中的文件...,执行 views 中类的 as_view方法,其实是继承自 APIView 的,APIView 继承自 django 原生 View 的as_view 方法。...在上面的代码中可以看到 Book类是继承自APIView类的,所以在路由配置里面执行的as_view方法如果Book类没有重写,那么执行的就是按照mro列表顺序查找到的第一个方法,在这里执行的是APIView...APIView类的父类是View类,查看该类的as_view方法,源码如下: ? 具体as_view就是将view函数的内存地址返回,以便请求来时直接调用。...在这里该 self 由于是 继承自APIView类的Book类的对象,所以dispatch方法首先去自身找,之后去父类找,在APIView类中找到dispatch方法,源码如下: ?
常用的视图集父类 1.ViewSet 继承自APIView 与 ViewSetMixin作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。...,所以APIView有的功能,它都有,APIView没有的功能,它也没有""" from rest_framework.viewsets import ViewSet from students.models..." return Response("个人中心") class Demo2APIView(APIView): """只允许管理员访问""" permission_classes = [IsAdminUser...()), path('auth2/', views.Demo2APIView.as_view()), # 自定义权限 path('auth3/', views.Demo3APIView.as_view(...()), # 过滤 path('data5/', views.Demo5APIView.as_view()), # 排序 path('data6/', views.Demo6APIView.as_view
throttle_classess属性来配置,如 from rest_framework.throttling import UserRateThrottle from rest_framework.views import APIView...class ExampleView(APIView): throttle_classes = (UserRateThrottle,) ......例如: class ContactListView(APIView): throttle_scope = 'contacts' ......class ContactDetailView(APIView): throttle_scope = 'contacts' ......class UploadView(APIView): throttle_scope = 'uploads' ...
中的 self.response = self.finalize_response(request, response, *args, **kwargs) rest_framework.views.APIView...self.headers.items(): response[key] = value return response rest_framework.views.APIView...# self.renderer_classes 遍历出来是两个渲染类,类加括号会调用类的 __init__ 方法实例化 self.renderer_classes 来源 class APIView...post(self, request, *args, **kwargs): return Response("drf post ok 2") 查找顺序:自定义视图类(局部) => APIView...默认配置 自定义渲染模块 视图类 from rest_framework.renderers import TemplateHTMLRenderer class BookDetailView(APIView
函数,内部调用dispatch函数完成请求分发 3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相应 4)再将相应的结果一层层返回 """ 二.drf CBV 源码分析:APIView...""" 1)as_view()是入口,得到view函数地址,在范围view函数地址时局部禁用csrf认证 2)请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发...3)dispatch函数 二次封装request、完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,得到相应,再对相应做渲染处理 4)再将相应的结果一层层返回 """ 三.APIView...rest_framework.renderers import JSONRenderer from rest_framework.renderers import BrowsableAPIRenderer 局部设置 在我们定义基础APIView...的类添加renderer_classes = [JSONRenderer]这样网页就不会出现渲染只显示js数据 例如 class UserAPIView(APIView): renderer_classes
渲染模块: 安装DRF框架 pip install djangorestframework drf请求生命周期流程 根据应用中urls.py,走as_view方法,但是视图类没有该方法,所以请求走的是APIView...的as_view方法 在APIView的as_view调用父类(django原生View)的as_view,同时还禁用了 csrf 认证 在父类(django原生View)的as_view中dispatch...方法请求走的又是APIView的dispatch #因为APIView也可以走dispatch,视图类是先继承APIView,APIView中没有再去原生View中 完成任务方法交给视图类的请求函数处理...,得到请求的响应结果, 返回给前台所以以后直接就从APIView的dispatch入口看源码 请求模块:request对象 1) drf 对原生request做了二次封装,设置request....完成的是全局配置,所有接口统一处理 # 如果只有部分接口特殊化,可以完成 - 局部配置 from rest_framework.renderers import JSONRenderer class Test2(APIView
import Response from rest_framework.throttling import UserRateThrottle from rest_framework.views import APIView...class ExampleView(APIView): throttle_classes = [UserRateThrottle] def get(self, request, format...例如: class ContactListView(APIView): throttle_scope = 'contacts' ......class ContactDetailView(APIView): throttle_scope = 'contacts' ......class UploadView(APIView): throttle_scope = 'uploads' ...
领取专属 10元无门槛券
手把手带您无忧上云