项目地址: https://github.com/encode/django-rest-framework 本篇文章将带大家 5 分钟快速入门 DRF 2....实现步骤 详细使用步骤如下( 10 步) 2-1 创建虚拟环境 使用 mkvirtualenv 创建一个单独的虚拟环境,指定 Python 版本为 3.7 # 创建虚拟环境,名称为:django3 #...打开目标文件夹目录,使用「 django-admin startproject 」命令创建一个 Django 项目 # 创建一个django项目 # 项目名称:drf_demo django-admin...打开 Pycharm,在项目根目录下,进入虚拟环境,使用内置的「 sqlite 」进行数据库映射,并创建一个超级用户 # 进入虚拟环境 workon django3 # 数据库映射(sqlite3)...'email', 'is_staff'] PS:序列化用于定义 API 的表现 2-7 定义视图 ViewSets 在 urls.py 文件中,定义一个视图表现类,让他继承于「 viewsets.ModelViewSet
,django-rest-framework,于是我又学习了 vue 和 django-rest-framework,当然,我还接触到 redis,elstatic-search,还有大名鼎鼎的 nginx...3、有了基础知识后,再熟悉框架,如 Vue.js 。只所以要用框架,是为了提高开发效率。...这里主要说下 vue,django,django-rest-framework。 1、前后端分离后在生产环境部署时静态资源无法访问。...alias E:\gitee\xxxxx\frontEnd\dist\static; } 现在我们把静态文件都由 nginx 来返回给前端了,但这其实还不够,如果用到了 DRF 的 ModelViewSet...chrome 浏览器一切正常,使用 safari 浏览器时接口报 401 错误。
可一直向下自定义 - 如果您不需要更强大 的功能,只需使用常规的基于函数的视图即可。 广泛的文档和强大的社区支持。...被国际知名公司使用和信任,包括Mozilla,Red Hat,Heroku和Eventbrite。.... pip install django-filter # Filtering support 或从 github 克隆项目:git clone https://github.com/encode/django-rest-framework...我们利用在Django框架学习中创建的demo工程,在settings.py的INSTALLED_APPS中添加’rest_framework’。..., 'username', 'email', 'is_staff'] # ViewSets define the view behavior. class UserViewSet(viewsets.ModelViewSet
也就是说,当你的API遵循了这种风格时,就可以称为RESTful API。...其实DRF没有强制实现。在官网的TOPIC,REST --> Hypermedia,Hateoas中有这样一段话: 首先,免责声明。...在整个文档中,我们尝试使用更简单、技术上正确的术语“Web API”。 官网的一个例子 看一个官网的例子来感受一下。创建一个简单的API,允许管理员查看和编辑系统中的用户和组。...ModelViewSet来快速构建一组view。...:8000/users/ 在这里插入图片描述 由于设置了权限,没登陆时查看不了。
要注意一点的是,视图集基类提供的是除资源操作以外的通用逻辑(例如 HTTP 请求预处理、HTTP 响应后处理、认证、鉴权等),而对于资源的操作(如序列化、更新、删除资源等)则放在相应的 Mixin 混入类里...django-rest-framework 提供了资源操作的 5 个混入类,分别对应资源的创建、查询、更新、删除。...事实上,使用路由器自动生成 URL 模式时,路由器内部就是采用了和上面手工生成视图函数并绑定 URL 一样的方式。...运行开发服务器,访问 http://127.0.0.1:8000/api/,界面如下: django-rest-framework 为我们自动生成了 API 交互后台,在这个界面中可以和我们创建的 API...但是我们的博客文章列表是有分页功能的,接下来我们就使用 django-rest-framework 提供的分页辅助类,一行代码就可以完成分页功能。
文章目录 前言 一、基本视图集 1.ViewSet 2.GenericViewSet 二、扩展视图集 1.ModelViewSet 2.ReadOnlyModelViewSet 三、用法补充 1.扩展方法使用...前言 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据...ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{‘get’:‘list’})的映射处理工作。...GenericViewSet就帮助我们完成了这样的继承工作,继承自GenericAPIView与ViewSetMixin,在实现了调用as_view()时传入字典(如{‘get’:‘list’})的映射处理工作的同时...from rest_framework.routers import SimpleRouter,DefaultRouter urlpatterns = [ # ModelViewSet使用
一、安装DRF 首先,我们创建一个Django基础工程demo,并创建一个测试app,得到了Django框架的初始化代码,代码目录结构如下: # django-admin startproject...# Markdown support for the browsable API. pip install django-filter # Filtering support 备注:安装DRF时,...======================= REST_FRAMEWORK = { } DRF优先从django配置文件中的REST_FRAMEWORK字典中获取配置信息,获取不到则使用...然后,我们简单修改了下ModelViewSet: class ModelViewSet(viewsets.ModelViewSet): """定制ModelViewSet""" _keys...'message', 'data'} def finalize_response(self, request, response, *args, **kwargs): """强制统一接口返回格式
201:表示资源创建成功。 400:表示客户端请求错误。...和表单类似,django-rest-framework 的序列化器也可以根据关联的模型,自动检测被序列化模型各个属性的数据类型,推测需要使用的序列化字段,无需我们显示定义。...ModelSerializer 时,只需要在序列化器的内部类 Meta 中指定关联的模型,以及需要序列化的模型属性,django-rest-framework 就会根据各个属性的数据类型,自动推测需要使用的系列化字段...而对于文章关联的 category、author,它们本身也是一个对象,django-rest-framework 就无法推测该使用什么类型的系列化字段来序列化它们了。...接下来,让我们使用 django-rest-framework 提供的通用类视图,将首页 API 的视图函数改为类视图。
接下来,我们将使用 django-rest-framework,一步步为博客系统开发 RESTful API,并在这个过程中深入学习 django-rest-framework 的使用方法,为后续使用...=no 以关闭实时索引,否则无法创建博客文章。...关于虚拟环境的管理,如果不熟悉的话可以参考: # --dev 参数会指导 pipenv 同时安装线上运行时的依赖以及开发时所需的依赖 $ pipenv install --dev 第二步,生成数据库文件...第三步 创建的超级管理员账户登录。...既然要使用 django-rest-framework,第一件事当然是先安装它。
安装命令如下: (recipes_app-nV3wuGJ1) $ pipenv install django django-rest-framework django-cors-headers 这时 pipenv...这里我们采用开挂模式,直接调用 Django Rest Framework 提供的模型视图集(ModelViewset)直接搞定数据模型的增删改查逻辑: from rest_framework import...我们刚刚创建了 pages 目录下的 index.vue 文件,这意味着当访问根路由 / 时,这个文件将被访问到。通过 npm run dev运行我们的前端页面(记得在 client 子目录下运行!)...),并在模板中使用这两个成员。...实现食谱列表页面 创建食谱列表页面 pages/recipes/index.vue(先使用假数据填充),代码如下:
回顾一下我们之前在使用视图集 viewset 时提到过 action(动作)的概念,django-rest-framework 预定义了几个标准的动作,分别为 list 获取资源列表,retrieve...django-rest-framework 将常用 HTTP 请求的状态码常数预定义 status 模块里,使用预定义的变量而不是直接使用数字的好处一是增强代码可读性,二是减少硬编码。...对于这样的场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表中过滤出查询所指定的文章列表再返回。...django-rest-framework 中非常方便地使用 django-filter。...其中 filter_backends 设置为 DjangoFilterBackend,这样 API 在返回结果时, django-rest-framework 会调用设置的 backend(这里是 DjangoFilterBackend
视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据...ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{‘get’:’list’})的映射处理工作。...GenericViewSet就帮助我们完成了这样的继承工作,继承自GenericAPIView与ViewSetMixin,在实现了调用as_view()时传入字典(如{‘get’:’list’})的映射处理工作的同时...扩展功能 为了方便接下来的学习,我们创建一个新的子应用 opt python3 manage.py startapp opt 因为接下来的功能中需要使用到登录功能,所以我们使用django内置admin...站点并创建一个管理员.
例如,在 BookViewSet 中,我们可以定制 create() 方法,以便在创建新书籍时自动将当前用户设置为书籍的作者:class BookViewSet(viewsets.ModelViewSet...serializer.save(author=self.request.user)在这个例子中,我们在 BookViewSet 中重写了 perform_create() 方法,该方法会在创建新书籍时被调用...我们使用 self.request.user 获取当前请求的用户,并将其设置为新书籍的作者。...另一个例子是定制 list() 方法,以便在获取书籍列表时只返回当前用户的书籍:class BookViewSet(viewsets.ModelViewSet): serializer_class...我们使用 self.request.user 获取当前请求的用户,并将其用于过滤书籍列表,只返回当前用户的书籍。视图集类型DRF 中提供了多种视图集类型,可以根据不同的需求选择合适的视图集类型。
过滤器是一种机制,它可以让你在获取资源时对它们进行过滤。在 DRF 中,你可以使用内置的过滤器或者编写自定义的过滤器。...例如,你可以在视图的类定义中添加如下代码:from rest_framework import filtersclass MyView(viewsets.ModelViewSet): queryset...published_date'] ordering = ['-published_date'] range_fields = {'price': ['exact', 'lte', 'gte']}在这个例子中,我们创建了一个名为...例如,下面的代码展示了如何将 PriceFilterBackend 添加到我们的视图集合中:class BookViewSet(viewsets.ModelViewSet): queryset =...我们还展示了如何在视图集合中使用这些过滤器,并提供了一些例子来帮助你更好地理解它们的用法。
ViewSet 该类继承自APIView,我们可以使用任何标准属性(如permission_classes,authentication_classes)来控制视图集上的API。...为了使用该类,必须重写该类并显式定义操作实现。 通常,我们不会使用该类。因为需要全部重写。...pass def destroy(self, request, pk=None): pass 一个ViewSet类同时提供以下可用属性 basename- 用于创建的...同时DRF提供了适用于视图集的路由来方便使用。 ModelViewSet用起来就显得非常方便了,我们不需要实现各种方法了,只需要重写属性,然后配置路由即可。...urlpatterns = [ path('bookmodelset/', BookModelViewSet.as_view({'get': 'list', 'post': 'create'})), # 创建和列表路由
Django静态文件问题备注: 参考: Django测试开发-20-settings.py中templates配置,使得APP下的模板以及根目录下的模板均可生效 解决django 多个APP时 static...应该尽量将API部署在专用域名之下 [https://example.org/api/] 应该将API的版本号放入URL [https://example.org/app/1.0/foo], 但这个是不强制的...安装django-rest-framework 安装依赖 pip install djangorestframework==3.14.0 pip install markdown==3.4.3 pip...让我们创建一个名为polls2/serializer.py的新模块,用于数据表示。...JSON格式的数据 return Response(serializer.data) class UserViewSet(viewsets.ModelViewSet): """
在实现APIView时,您需要手动处理请求,并确定要返回的响应。...当GET请求发送到视图时,它将返回一个JSON响应,其中包含“message”键和“Hello,World!”值。...它结合了APIView和Mixin类,以提供常见的API操作(例如获取,创建和更新)的默认实现。您可以使用它来快速创建常见的API视图,并使用内置的方法来处理请求。...例如,如果您想要编写一个视图来处理一个模型,您可以使用ModelViewSet,如下所示:from rest_framework import viewsetsfrom myapp.models import...我们指定了要使用的查询集和序列化器,并使用ModelViewSet提供的默认实现处理常见API操作。
LimitOffsetPagination 示例以下是一个简单的使用 LimitOffsetPagination 分页器的示例:class BookViewSet(viewsets.ModelViewSet...Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination在这个例子中,我们创建了一个名为...现在,当客户端发起请求时,我们的 BookViewSet 视图集合将使用 BookPagination 分页器将查询结果划分为多个页面,并将每个页面的数据返回给客户端。...Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination在这个例子中,我们创建了一个名为...现在,当客户端发起请求时,我们的 BookViewSet 视图集合将使用 BookPagination 分页器将查询结果划分为多个页面,并将每个页面的数据返回给客户端。
路由与URL配置路由器(Router):说明路由器如何根据ViewSet自动创建API路由,以及如何自定义路由命名和视图动作。...版本控制:讨论DRF中实现API版本控制的方法,如URL路径版本、请求头版本等。...异常处理:介绍如何使用DRF的异常体系(如PermissionDenied、NotAuthenticated、ValidationError等)处理错误情况,并自定义异常响应。...对于复杂查询,考虑使用Django ORM的查询优化技巧或添加数据库索引。...class ArticleViewSet(viewsets.ModelViewSet): queryset = Article.objects.all() serializer_class
1.2 Response(响应) drf 提供了一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型。...提供的关于序列化器使用的属性与方法 属性:serializer_class 指明视图使用的序列化器 方法: get_serializer_class(self) : 当出现一个视图类中调用多个序列化器时...注意: 该方法在提供序列化器对象的时候,会向序列化器对象的context属性补充三个数据:request、format、view,这三个数据对象可以在定义序列化器时使用。...**ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{‘get’:’list’})的映射处理工作。...GenericViewSet就帮助我们完成了这样的继承工作,继承自GenericAPIView与ViewSetMixin,在实现了调用as_view()时传入字典(如{'get':'list'})的映射处理工作的同时
领取专属 10元无门槛券
手把手带您无忧上云