当前位置: 首页 > news >正文

快速入手-基于DRF跨域配置django-cors-headers(十三)

1、安装插件

pip install django-cors-headers

2、配置   settings.py  

在   settings.py   文件中,将   corsheaders   添加到   INSTALLED_APPS   列表中:

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]
3、添加到   MIDDLEWARE  

将   corsheaders.middleware.CorsMiddleware   添加到   MIDDLEWARE   列表中,并确保它位于   django.middleware.common.CommonMiddleware   之前:

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]
4、配置 CORS 相关设置,在   settings.py   文件的末尾添加以下配置:

CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_HEADERS = [
    "accept",
    "accept-encoding",
    "authorization",
    "content-type",
    "dnt",
    "origin",
    "user-agent",
    "x-csrftoken",
    "x-requested-with",
]
CORS_ALLOW_METHODS = [
    "DELETE",
    "GET",
    "OPTIONS",
    "PATCH",
    "POST",
    "PUT",
]
5、配置允许访问的域名白名单

如果你不想允许所有域名访问,可以通过   CORS_ALLOWED_ORIGINS   或CORS_ALLOWED_ORIGIN_REGEXES   来配置允许访问的域名白名单。

比如CORS_ALLOWED_ORIGINS=[

                                                            https://test.com,

                                                           https://sub.test.com,

                                                          https://192.168.21.121:8080,

                                                        ]

6、配置文件参考

from pathlib import Path
import os

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-ws(9g7m^dty#ouzqdii*s^((+a33v@qn654gm0+b)_97)#sx-e"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "rest_framework",
    "corsheaders",
    "app_drf01.apps.AppDrf01Config",
    "api.apps.ApiConfig",
    "rest_framework_simplejwt",
    "rest_framework_simplejwt.token_blacklist",
]

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    ),
    # "DEFAULT_THROTTLE_CLASSES": [
    #     "rest_framework.throttling.AnonRateThrottle",  # 未认证用户
    #     "rest_framework.throttling.UserRateThrottle",  # 已认证用户
    # ],
    "DEFAULT_THROTTLE_RATES": {  # 频率配置
        "anon": "2/min",  # 匿名用户每分钟最多访问 2 次
        "user": "5/min",  # 认证用户每分钟最多访问 10 次
    },
}


MIDDLEWARE = [
    "corsheaders.middleware.CorsMiddleware",
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

ROOT_URLCONF = "maker_drf.urls"
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

WSGI_APPLICATION = "maker_drf.wsgi.application"
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "python_demo",  # 数据库名称
        "USER": "root",  # 数据库用户名
        "PASSWORD": "1234567890",  # 数据库密码
        "HOST": "127.0.0.1",  # 数据库主机地址
        "PORT": "13306",  # 数据库端口
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
    },
    {
        "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
    },
    {
        "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
    },
    {
        "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
    },
]


# 设置默认语言为中文
LANGUAGE_CODE = "zh-hans"  # 简体中文

# 设置默认时区
TIME_ZONE = "Asia/Shanghai"  # 上海时区

USE_I18N = True

USE_TZ = True

STATIC_URL = "static/"

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

# 媒体文件的存储路径
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

# 媒体文件的访问 URL
MEDIA_URL = "/media/"

from datetime import timedelta

SIMPLE_JWT = {
    "ACCESS_TOKEN_LIFETIME": timedelta(minutes=5),  # Access Token 的有效期
    "REFRESH_TOKEN_LIFETIME": timedelta(days=7),  # Refresh Token 的有效期
    "ROTATE_REFRESH_TOKENS": True,  # 刷新时是否生成新的 Refresh Token
    "BLACKLIST_AFTER_ROTATION": True,  # 是否在刷新后废弃旧的 Refresh Token
    "ALGORITHM": "HS256",  # 使用的加密算法
    "SIGNING_KEY": SECRET_KEY,  # 设置签名密钥
    "VERIFYING_KEY": None,  # 如果使用公钥算法,可以配置验证密钥
}


CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_HEADERS = [
    "accept",
    "accept-encoding",
    "authorization",
    "content-type",
    "dnt",
    "origin",
    "user-agent",
    "x-csrftoken",
    "x-requested-with",
]
CORS_ALLOW_METHODS = [
    "DELETE",
    "GET",
    "OPTIONS",
    "PATCH",
    "POST",
    "PUT",
]

相关文章:

  • nodejs 文件相关
  • GRU原理
  • 1.1 轴承故障数据预处理与时频图提取
  • 踏过强化学习的每一步推导
  • C++基础算法(插入排序)
  • 学习如何设计大规模系统,为系统设计面试做准备!
  • Uniapp自定义TabBar组件全封装实践与疑难问题解决方案
  • sscanf() 用法详解
  • docker 安装多次 Jenkins后,插件全部报错
  • G8 的 Morph(形态/变形)转移到 Genesis 9 (G9)
  • 《Java八股文の文艺复兴》第八篇:时空裂缝中的锁竞争——当Synchronized与量子纠缠重构线程安全
  • 探索 Gaggol:理解 10^^^100 的宇宙级常数
  • [TAMUctf 2025]
  • 【C语言】文件操作(2)
  • 吾爱破解安卓逆向学习笔记(4p)
  • OpenCV:计算机视觉的强大开源库
  • 【Python Cookbook】字符串和文本(三)
  • Java基础 3.31
  • Macro 巨汇黄金外汇投资全解析:策略与操作步骤?
  • 【STM32】最后一刷-江科大Flash闪存-学习笔记
  • 建设网站需要购买/如何制作网址链接
  • 安庆做网站赌博代理/百度网页入口官网
  • wordpress 反馈插件/seo关键词排名优化手机
  • 成都制作网站/优化建站
  • 如何打破违法网站/上海有哪些优化网站推广公司
  • 网站开发写好了怎么发布/正规考证培训机构