我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django RestFramework

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django RestFramework

1.基础函数视图(@api_view)

DRF提供了一种函数基础视图来装饰Django的普通视图,我们可以使用request来接受请求和response响应。一个小例子:

from rest_framework.decorators import api_view

@api_view
def hello_world(request):
    return Response({"message":"Hello world!"})

1)@api_view使用方法

这个视图将使用默认渲染器、解析器、身份验证设置中指定的类等。通常默认GET方法,我们可以手动更改方法。像这样:

@api_view(['GET', 'POST'])
def hello_world(request):
    if request.method  == 'POST':
        return Response({'message':'Got some data', 'data':request.data})
    return Response({'messsage':'Hello world!'})

2)其他装饰器

DRF提供了很多附加的装饰器,我们可以添加到@api_view()后面,例如要加入一个节流的装饰器来确保特定用户每天只能一次通过这个视图,我们就要用到@throttle_classes装饰器:

from rest_framework.decorators import api_view, throttle_classes
from rest_framework.throttling import UserRateThrottle
 
class OncePerDayUserThrottle(UserRateThrottle):
    rate = '1/day'
 
    @api_view(['GET'])
    @throttle_classes([OncePerDayUserThrottle])
    def view(request):
        return Response({'message':'Hello for to day! see you tomorrow!'})

还有:

@renderer_classes()
@parser_classes()
@authentication_classes()
@throttle_classes()
@permission_classes()

2.基础类视图(APIView)

DRF不同于Django常规的View类,它有如下几个优点:

  • 提供了更好用的request对象,不同于普通的Django HttpRequest更好用。
  • 封装了Response对象,代替了原有的Django HttpResponse,视图将管理内容协商并设置正确的渲染器的响应。
  • 任何APIException异常将会被捕捉,并做适当的响应。
  • 传入的请求将身份验证和适当的权限和节流检查将之前运行调度请求处理程序的方法。

一个小例子:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authenication, permissions
 
class ListUser(APIView):
    authentication_classes = (authentication.TokenAuthentication,)    # 认证策略属性
    permission_classes = (permissions.IsAdminUser,)     # 权限策略属性
    def get(self, requeset, format=None):
        """
        返回一个用户列表
        """
        usernames = [user.username for user in  User.objects.all()]
        return Response(usernames)

1)APIView属性

  • renderer_classes: 渲染器类
  • parser_classes: 解析器类
  • authentication_classes: 验证类
  • throttle_classes:限流类
  • permission_classes: 权限类
  • content_negotiation_class: 内容协商类

2)get型方法

通常不用重写。

  • get_renderers(self): 获取渲染器方法
  • get_parsers(self): 获取解释器方法
  • get_authenticators(self): 获取认证方法
  • get_throttles(self): 获取限流方法
  • get_permissions(self): 获取权限方法
  • get_content_negotiator(self): 获取内容协商方法

3)check型方法

  • check_permissions(self, request): 检查权限
  • check_throttles(self, request): 检查节流
  • check_content_negotiation(self, request, force=False): 检查内容协商

4)调度方法

  • initial(self, request, *args, **kwargs): 执行任何操作,需要发生在处理程序方法之前被调用。这个方法是用来执行权限和节流,并执行内容协商。
  • handle_exception(self, exc):抛出的任何异常处理程序方法将被传递给这个方法,而返回响应实例,或者re-raises异常。
  • initialize_request(self, request, *args, **kwargs):确保请求对象传递给处理程序方法是request的一个实例,而不是django的HttpRequest
  • finalize_response(self, request, response, *args, **kwargs):确保任何响应处理程序方法返回的对象将被呈现到正确的内容类型

基于类视图的主要好处之一是他们允许您编写可重用的行为。REST框架提供的通用视图允许您快速构建API观点紧密地映射到您的数据库模型。GenericAPIView继承了DRF的APIView类,为list和detail视图增加了一些一般需求行为方法。

1.基础通用类视图(GenericAPIView)

1)属性

基本属性:

  • queryset: 用于返回query对象集合,也可以使用get_queryset()方法
  • serializer_class: 序列化器类,应该用于输入进行验证和反序列化,并用于序列化输出。通常情况下,你必须设置这个属性,或重写get_serializer_class()方法
  • lookup_field: 模型的字段应该用于执行对象查找个别的模型实例
  • lookup_url_kwarg:URL配置中应该用于对象查找关键字参数

分页属性:

  • pagination_class: 用于返回一个分页列表视图的分页类,默认与settings中设置的DEFAULT_PAGINATION_CLASS 值相同,可以通过’rest_framework.pagination.PageNumberPagination’设置分页数

过滤器属性:

  • filter_backends: 过滤queryset的类列表,和在settings中设置DEFAULT_FILTER_BACKENDS一样

 2)方法

基本方法:

  • get_queryset(): 返回queryset
  • get_object():获取某一个具体的model实例对象

2.Model Mixin类

mixin类用于提供基础视图的操作行为。注意,mixin类提供操作方法而不是定义处理程序方法,这允许更灵活的组合的行为。

  • ListModelMixin:提供list方法,列出queryset
  • CreateModelMixin: 提供create方法,创建和保存一个Model对象
  • RetrieveModelMixin:提供retrieve方法,检索一个存在的model对象
  • UpdateModelMixin: 提供Update方法,更改一个模型对象
  • DestroyModelMixin:提供destroy方法,删除一个模型对象

以下方法是mixins类提供,提供简单的对象保存和删除的行为重写:

  • perform_create(self, serializer): CreateModelMixin 当要保存对象时候会被调用
  • perform_update(self, serializer):UpdateModelMixin 当要更新对象时候会被调用
  • perform_destroy(self, instance): DestoryModelMixin 当药删除对象时候会被调用

3.高级通用类视图

该通用类视图提供具体操作的通用类视图,可以理解GenericAPIViewMixin类的合体,通过rest_framework.generic调用。

  • CreateAPIView

创建一个模型实例
提供post方法的处理器
继承于:GenericAPIView,CreateModelMixin

  • ListAPIView

模型实例的集合
提供get方法处理器
继承于:GenericAPIView,ListModelMixin

  • RetrieveAPIView

一个模型实例
提供get方法处理器
继承于:GenericAPIView,RetrieveModelMixin

  • DestoryAPIView

删除一个模型实例
提供delete方法处理器
继承于:GenericAPIView,DestroyModelMixin

  • UpdateAPIView

修改模型实例,
提供put和patch方法处理器
继承于:GenericAPIView,UpdateModelMixin

  • ListCreateAPIView

创建和展示一个模型实例集合
提供get和post处理器
继承于:GenericAPIView,ListModelMixin,CreateModelMixin

  • RetrieveUpdateAPIView

读和改一个模型实例
提供get,put,patch处理器
继承于:GenericAPIView,RetrieveModelMixin,UpdateModelMixin

  • RetrieveDestoryAPIView

读和删除一个模型实例
提供get和delete处理器
继承于:GenericAPIView,RetrieveModelMixin,DestroyModelMixin

  • RetrieveUpdateDestroyAPIView

读、改和删一个模型实例
get, put, patch,delete处理器
继承于:GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin

Django REST框架允许您将一组相关的逻辑视图在一个类,ViewSet类是一个简单类型的基于类的视图,没有提供任何方法处理程序如get(),post()等,而提供代替方法比如list(),retrieve(),create(),update(),destroy()等。

1)GenericViewSet

继承了`GenericAPIView`,提供了默认的get_queryset()和get_object()等方法来获取model数据,但不提供任何请求处理方法。

2)ModelViewSet

继承了`GenericAPIView`,`ListModelMixin`、`RetrieveModelMixin`、`CreateModelMixin`、`UpdateModelMixin`、`DestroyModelMixin`等,增加了一些请求处理方法,如list(),retrieve(),create(),update(),partial_update(),destroy()等。

 例子:

class SnippetViewSet(ModelViewSet):
    # 继承涵盖`ListModelMixin`、`RetrieveModelMixin`、`CreateModelMixin`、`UpdateModelMixin`、`DestroyModelMixin`等;
    # 按Model分别写视图集合,一个Model一个视图集合。
    """
    此视图自动提供`list()`,`create()`,`retrieve()`,`update()`和`destroy()`操作。
    """
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly]
  def perform_create(self, serializer):
  serializer.save(owner=self.request.user)

3)ReadOnlyModelViewSet

继承了GenericAPIView,只增加了只读的请求处理方法list()和retrieve()。

例子:

class UserViewSet(ReadOnlyModelViewSet):
    # 继承涵盖`ListModelMixin`、`CreateModelMixin`、`RetrieveModelMixin`、`UpdateModelMixin`、`DestroyModelMixin`等;
    # 按Model分别写视图集合,一个Model一个视图集合。
    """
    此视图自动提供`list()`和`retrieve()`操作。
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer

给视图集合绑定URL

1)手动绑定

例:

# 手动配置视图集合路由:as_view({'action方法': '对象操作方法'})
path('snippets', SnippetViewSet.as_view({'get': 'list', 'post': 'create'}), name='snippets-list'),
path('snippets/<int:pk>', SnippetViewSet.as_view({'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'}), name='snippet-detail'),   

2)自动绑定(URL路由器)

通过使用Router类,把视图和资源联系起来的协议和urls会被自动处理。我们只需要使用router来注册合适的视图,剩余的交给router来做就行。 

例:

# 实例化一个 router 并用它注册我们的 viewset
router = DefaultRouter()
router.register(r'snippets', SnippetViewSet)

# API URLs现在由 router 自动配置
urlpatterns = [
    path('', include(router.urls)),
]

 

至此。转载请注明出处。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django RestFramework

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django RestFramework

1.基础函数视图(@api_view)DRF提供了一种函数基础视图来装饰Django的普通视图,我们可以使用request来接受请求和response响应。一个小例子:from rest_framework.decorators impor
2023-01-31

Django-restframework

前言最近学习了 django 的一个 restframework 框架,对于里面的执行流程产生了兴趣,经过昨天一晚上初步搞清楚了执行流程(部分方法还不太清楚),于是想详细的总结一下当来一个请求时,在该框架里面是如何执行的?启动项目时昨天在调
2023-01-30

django restframework序列化字段校验规则是什么

这篇文章主要介绍“django restframework序列化字段校验规则是什么”,在日常操作中,相信很多人在django restframework序列化字段校验规则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-30

django总结四:django---

1)首先定义数据库的表名和字段2)启动mysql数据库 bash mysql.server start3)安装pymysql pip install pymysqlPyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务
2023-01-31

django

# Django - 中文教程文档: http://python.usyiyi.cn- anaconda使用 - conda list: 显示当前环境安装的包 - conda env list: 显示安装的虚拟环境列表 -
2023-01-30

django-7-django模型系统

<<<常用的模型字段类型>>>https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types InterField CharFiled TestFiled DateF
2023-01-31

Django——photo

要点: models  图片类型文件要使用models.ImageField(upload='文件夹名')  普通文件使用FileField  时间类型使用DatetimeField(auto_now_add=True) 自动添加增加时间s
2023-01-30

Django--django.core.

Django序列化时遇到错误:django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE需要添加环境变量import os,
2023-01-30

python+django

经过一段时间学习,用python+django写了个简单的web管理系统,第一次做这东西,水平很次还有待提高! 登录界面 每个用户用到的基本选项(可以记录登陆后的操作和一些事项,同组用户可以查看;可以修改自己用户资料;) 添加删除组(系统采
2023-01-31

Django-ORM

目录一、ORM介绍二、单表操作表创建新增记录删除记录修改记录三、查询API四、基于双下滑线的模糊查询一、ORM介绍ORM是(对象-关系-映射)的简称:它实现了数据模型与数据库的解耦,对于数据库的操作,就不用去写原生的 SQL 语句,取而代之的是基于面向对象的思
Django-ORM
2019-11-30

Python-Django

准备工作新建一个Django项目# 新建一个django项目$ django-admin startproject mysite# 新建一个app$ django-admin startapp blog项目的结构├── blog│   ├─
2023-01-31

django logging

LOG_LEVEL = 'DEBUG' LOGGING = {    'version' : 1,    'disable_existing_loggers' : True,    'formatters' : {            '
2023-01-31

django-admin和django-admin.py有什么区别

这篇文章主要介绍“django-admin和django-admin.py有什么区别”,在日常操作中,相信很多人在django-admin和django-admin.py有什么区别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-06-04

django-simple-captch

在注册页面生成验证码的时候,出现错误如下:build_attrs() takes from 1 to 2 positional arguments but 3 were given,不知道为什么报错.我的环境是python3.6.4djan
2023-01-30

Django之ModelForm

在前面有篇博客,我写了一个叫forms组件的东西,可以帮助我们完成校验数据、渲染标签功能和在前端页面局部刷新功能,功能封装的已经很好了,当时已经很开心了。但万万没想到,还有比它功能更强大的东西。forms组件只能渲染出type=text类型
2023-01-30

Django—Form、ModelFor

一、Form form.pyfrom django import formsfrom django.core.exceptions import ValidationErrorfrom django.contrib.auth.models
2023-01-31

5 django mysql

1 mysql 解压版参考:https://www.cnblogs.com/guanfuchang/p/6019758.htmlhttps://blog.csdn.net/ermaner666/article/details/79096939/1 需要先增加m
5 django mysql
2015-07-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录