初识django-rest-framework

官方文档

django-rest-framework

Demo

为了更好的记录学习 DRF 的全过程,针对 DRF 编写了一个 Demo示例项目,相关环境、GitHub仓库如下:

环境

  • Django 4.0.4
  • django-rest-framework 3.13.1
  • MySQL 8.0
  • python-dateutil 2.8.2
  • mysqlclient 2.1.0

仓库

GitHub

API文档

API 文档

介绍

概念

django rest framework 是基于 Django 实现的⼀个 RESTful 风格 API 框架,能够帮助我们快速开发 RESTful 风格的 API。

特点

  • 提供了定义序列化器,可以快速根据 Django ORM 或者其他库自动序列化、反序列化;
  • 提供了丰富的类视图、MIXIN扩展类,根据需求组合继承,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 支持多种身份认证和权限认证方式;
  • 内置了限流系统;
  • 可视化API接口;
  • 可扩展性好,插件丰富。

安装

安装依赖

  • Python(3.5以上)
  • Django(2.2以上)

DRF是以Django子应用的方式提供的,需要注册到settings.py中,所以可以使用已有的Django环境而无需重新创建(若没有Django环境,需要先创建环境安装Django)。

pip install django -i https://pypi.douban.com/simple

安装 DRF

pip install djangorestframework -i https://pypi.douban.com/simple

配置

注册DRF

在项目目录下的 settings.pyINSTALLED_APPS 中添加 rest_framework ,将 rest_framework 应用注册到项目中。

# 项目名称/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework'
]

DRF框架配置(非必须)

DRF框架配置会在后续的教程中逐一介绍,这里可以先行跳过。

# 项目名称/settings.py

REST_FRAMEWORK = {
    # 文档报错: AttributeError: ‘AutoSchema’ object has no attribute ‘get_link’
    # 用下面的设置可以解决
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',
    # 默认设置是:
    # 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.openapi.AutoSchema',

    # 异常处理器
    # 'EXCEPTION_HANDLER': '',

    # 非drf的原始的认证方式是: 账号密码->cookie(session)
    # drf用户认证方式需要自行配置
    'DEFAULT_AUTHENTICATION_CLASSES': [],
    # 权限配置, 顺序靠上的严格, 全部通过才有权限
    'DEFAULT_PERMISSION_CLASSES': [
        # 职员可以访问()  is_staff=True
        'rest_framework.permissions.IsAdminUser',  # 管理员可以访问
        # 认证用户可以访问  is_active=True, 登录的人
        'rest_framework.permissions.IsAuthenticated',
        # 认证用户可以访问, 否则只能请求安全方法 SAFE_METHODS = ('GET', 'HEAD', 'OPTIONS')
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
        # 所有用户都可以访问
        'rest_framework.permissions.AllowAny',
    ],
    # 限流
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',  # 匿名用户限流
        'rest_framework.throttling.UserRateThrottle',  # 认证用户限流
    ],
    # 限流策略
    'DEFAULT_THROTTLE_RATES': {
        'user': '1000/hour',
        'anon': '300/day',
    },

    # 全局分页器, 例如 省市区的数据自定义分页器, 不需要分页
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    # 每页返回数量
    'PAGE_SIZE': 10,  # 默认 None

    # 过滤器后端
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend',
        # 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化
    ],

    # Filtering 过滤排序
    'SEARCH_PARAM': 'search',
    'ORDERING_PARAM': 'ordering',

    # Authentication  认证
    # 未认证用户使用的用户类型, 如果认证失败了, 那么用户身份是 下面这个配置指定的身份
    'UNAUTHENTICATED_USER': 'django.contrib.auth.models.AnonymousUser',
    # 未认证用户使用的Token值
    'UNAUTHENTICATED_TOKEN': None,
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值