0010 Django工程配置(07 REST_FRAMEWORK配置)

  DRF有丰富的功能,JWT认证、过滤、分页、异常处理、接口文档、限流、缓存等。

  这些配置,有些需要写自定义接口,有些只需要配置就可以了。

1 在INSTALLED_APPS中,增加两个应用

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘rest_framework‘,  # djangorestframework框架
    ‘django_filters‘,
    # 增加其它应用
]

2 编写自定义异常

  在GeneralTools目录下创建Exceptions.py文件,内容如下:

from rest_framework.views import exception_handler as drf_exception_handler
import logging
from django.db import DatabaseError
from redis.exceptions import RedisError
from rest_framework.response import Response
from rest_framework import status

# 获取在配置文件中定义的logger,用来记录日志
logger = logging.getLogger(‘tongheng2‘)

def exception_handler(exc, context):
    """
    自定义异常处理
    :param exc: 异常
    :param context: 抛出异常的上下文
    :return: Response响应对象
    """
    # 调用drf框架原生的异常处理方法
    response = drf_exception_handler(exc, context)

    if response is None:
        view = context[‘view‘]
        if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
            # 数据库异常
            logger.error(‘[%s] %s‘ % (view, exc))
            response = Response({‘message‘: ‘服务器内部错误‘}, status=status.HTTP_507_INSUFFICIENT_STORAGE)

    return response

3 增加REST_FRAMEWORK配置

REST_FRAMEWORK = {
    # JWT 认证
    ‘DEFAULT_AUTHENTICATION_CLASSES‘: (
        ‘rest_framework_jwt.authentication.JSONWebTokenAuthentication‘,  # JWT认证
        ‘rest_framework.authentication.SessionAuthentication‘,  # session认证
        ‘rest_framework.authentication.BasicAuthentication‘,  # 基本认证
    ),

    # 过滤Filtering
    ‘DEFAULT_FILTER_BACKENDS‘: (‘django_filters.rest_framework.DjangoFilterBackend‘,),

    # 分页Pagination
    # 也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_clas属性来指明。
    ‘DEFAULT_PAGINATION_CLASS‘: ‘rest_framework.pagination.PageNumberPagination‘,
    ‘PAGE_SIZE‘: 10,  # 每页数目

    # 异常处理(自定义异常)
    ‘EXCEPTION_HANDLER‘: ‘GeneralTools.Exceptions.exception_handler‘,

    # 接口文档
    # ‘DEFAULT_SCHEMA_CLASS‘: ‘rest_framework.schemas.AutoSchema‘,
    ‘DEFAULT_SCHEMA_CLASS‘: ‘rest_framework.schemas.coreapi.AutoSchema‘,
    # 限流
    ‘DEFAULT_THROTTLE_CLASSES‘: (
        # ‘rest_framework.throttling.AnonRateThrottle‘, # 限制所有匿名未认证用户
        # ‘rest_framework.throttling.UserRateThrottle‘, # 限制所有用户
        ‘rest_framework.throttling.ScopedRateThrottle‘,  # 限制用户对每个视图的访问频次
    ),
    ‘DEFAULT_THROTTLE_RATES‘: {
        # ‘anon‘: ‘1/minute‘,
        # ‘user‘: ‘1/minute‘  # 限制用户对所有接口访问频次
        ‘org_home‘: ‘1/minute‘  # 限制匿名用户或注册用户对接口的访问频次
    }
}

4 指定JWT认证返回数据格式

  在GeneralTools目录下创建JwtHandler.py文件,内容如下:

import logging

# 获取在配置文件中定义的logger,用来记录日志
# 注:其中的tongheng2必须和配置文件中指定的配置路径一致。
logger = logging.getLogger(‘tongheng2‘)

def jwt_response_payload_handler(token, user=None, request=None):
    """
    【功能描述】直接使用DRF-JWT提供的视图方法时,其默认的返回值只有token,若需要前端接收到用户其它信息,
    需要重写jwt_response_payload_handler方法。
    """

    return {
        ‘id‘: user.id,
        ‘username‘: user.username,
        ‘photo_url‘: user.photo_url,
        ‘mobile‘: user.mobile,
        ‘openid‘: user.openid,
        ‘token‘: token
    }

5 增加JWT_AUTH配置

JWT_AUTH = {
    # 设置生成(签发)jwt token时token有效时间
    ‘JWT_EXPIRATION_DELTA‘: datetime.timedelta(days=1),

    # 指定JWT 扩展登录视图生成响应数据调用函数
    ‘JWT_RESPONSE_PAYLOAD_HANDLER‘:
        ‘GeneralTools.JwtHandler.jwt_response_payload_handler‘
}

6 增加DRF扩展配置

REST_FRAMEWORK_EXTENSIONS = {
    # 缓存时间,单位秒(24小时)
    ‘DEFAULT_CACHE_RESPONSE_TIMEOUT‘: 24 * 60 * 60,
    # 缓存存储
    ‘DEFAULT_USE_CACHE‘: ‘default‘,
}

  

原文地址:https://www.cnblogs.com/dorian/p/12411239.html

时间: 2024-10-12 19:21:54

0010 Django工程配置(07 REST_FRAMEWORK配置)的相关文章

Django——如何处理请求(URL配置和视图)

URLconfig—— 为了绑定视图函数和URL,我们使用URLconf. URLconf 就像是 Django 所支撑网站的目录. 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表. 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码. 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中. 当访问 URL /hello/ 时,Django 根据 ROOT

Spring Web工程web.xml零配置即使用Java Config + Annotation

摘要: 在Spring 3.0之前,我们工程中常用Bean都是通过XML形式的文件注解的,少了还可以,但是数量多,关系复杂到后期就很难维护了,所以在3.x之后Spring官方推荐使用Java Config方式去替换以前冗余的XML格式文件的配置方式: 在开始之前,我们需要注意一下,要基于Java Config实现无web.xml的配置,我们的工程的Servlet必须是3.0及其以上的版本: 1.我们要实现无web.xml的配置,只需要关注实现WebApplicationInitializer这个

Django logging(日志)配置

Django项目常用的logging配置. LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' '[%(levelname)s][%(message)s]' }, 'simple

Django静态文件static的配置

Django静态文件static的配置 static文件夹的作用 ? static文件夹一般用于存放css,js,图片等静态文件 配置方式 ? 1.创建static文件夹 ? 2.在settings.py文件中新建一项(如果有则无需新建) STATIC_URL = '/static/' ? 3.在settings.py文件中新建一项 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] ? 4.引用静态文件中的文件 ? 列如引用一个cs

测试开发之Django——No4.Django中前端框架的配置与添加

我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的,所以本篇介绍一下我们怎么样来修改这个模板 首先,我们先下载一个免费的模板. 我们可以看到他的目录结构,用浏览器打开index.html文件之后可以看到模板的样式. 这样我们就可以想要哪个地方,复制哪个地方,到我们的代码里面了.给我们节省了很多编写前端的时间. 那么我们来看一下这个模板我们要怎么去做

Django框架在Apache上配置

装好Python.Apache后,根据系统版本下载相应的mod_wsgi 下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/ 选择mod_wsgi-4.5.24+ap24vc14-cp36-cp36m-win_amd64.whl下载 命令行下进入下载目录后,执行下图中命令即可完成mod_wsgi配置. 在Apache目录中打开httpd.conf,配置监听端口,在文件最后添加以下内容,保存后,重启Apache,即可配置完成. #配置mod_wsgi时的

Django 渲染模板、路径配置、变量使用。

DTL与普通的HTML文件的区别: DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进 去,实现数据动态化.在编译完成后,生成一个普通的HTML文件,然后发送给客户端. 渲染模板 先在templates文件夹下创建html文件. render_to_string:找到模板,然后将模板编译后渲染成Python的字符串格式.最后在通过HttpResponse类包装成一个HttpResponse对象返回回去. 在views.py文件中编写 from dj

用PyCharm建Django工程

博主很菜,学了Python这么久,到现在还是在用vim码程序. 在极客上看到讲师用的是PyCharm,于是下载下来尝尝鲜. 1. 下载安装 这是PyCharm的下载页面:http://www.jetbrains.com/pycharm/download/ 下载了一个pycharm-community-4.0.4.tar.gz的包,解压之后.进入pycharm-community-4.0.4目录. $ tar zxf pycharm-community-4.0.4.tar.gz $ cd pych

Django 工程目录结构

你已经配置好你的Heroku账户(译者注:Heroku是一个老牌的免费云空间),并且创建了第一个Heroku应用,让我们来讨论一个非常重要的话题(虽然经常被忽略):Django工程结构管理. 概述 多数Django工程非常混乱.不幸的是默认的Django工程布局并没有对此有任何帮助,它过于简单对工程的管理导致在处理大的工程时带来很多维护性问题. 本文将帮助让你的工程有个合理的布局.致力于: 遵循最佳实践 让你的工程尽可能地直观--你(作为开发者)可以立即认出代码每个部分的作用 让你工程仍然保持规