django安装、跨域、缓存、令牌、路由、中间件等配置

注意:如果是使用 PyCharm 编程工具就不用创建虚拟化,直接打开 PyCharm 选择新建的目录

直接调过下面的步骤1

1. 项目初始化

如果不是用 PyCharm 编辑器就需要手动创建虚拟环境

在项目目录cmd,自定义名称的虚拟环境

# 激活虚拟环境
python -m venv django_env
# 激活虚拟环境
django_env\Scripts\activate.bat  # Windows
# source django_env/bin/activate  # Linux/Mac

# 验证虚拟环境是否激活(提示符前应显示 (django_env))
(django_env) F:\git\project\serverAdmin\Django>

2. 安装依赖

# 安装 Django 及必要组件
pip install django django-cors-headers djangorestframework django-redis redis djangorestframework-simplejwt mysqlclient

如果提示升级pip,是新项目建议更新 

# 验证安装版本
python -m django --version  # 应显示 Django 版本号

3. 创建项目与多应用结构

# 创建 Django 项目
django-admin startproject backend
# 进入项目目录
cd backend
# 创建多个应用,自行创建
python manage.py startapp accounts  # 用户认证
python manage.py startapp products  # 商品管理
python manage.py startapp orders    # 订单系统
python manage.py startapp utils     # 工具类

4. 核心配置(backend/settings.py

"""
Django settings for backend project.Generated by 'django-admin startproject' using Django 5.2.4.For more information on this file, see
https://docs.djangoproject.com/en/5.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.2/ref/settings/
"""
import os
from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-e6)+pcowg#7$$t=mfje93!%186-qa6=8f5$i86l8gjpyl&yukx"# SECURITY WARNING: don't run with debug turned on in production! 生产环境中禁用调试模式
DEBUG = True # 开发环境
# DEBUG = False  # 生产环境ALLOWED_HOSTS = ['*'] # 开发环境
# ALLOWED_HOSTS = ['api.your-domain.com']  # 生产环境# Application definition  应用注册
INSTALLED_APPS = ["django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.contrib.sessions","django.contrib.messages","django.contrib.staticfiles",'corsheaders',  # 跨域支持'rest_framework',  # REST API'django_redis',  # Redis缓存'accounts',  # 权限'utils',  # 工具应用
]# 中间件
MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',  # 跨域必须在CommonMiddleware之前"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",
]# 跨域配置(开发环境)
CORS_ALLOW_ALL_ORIGINS = True  # 允许所有域名跨域(开发环境)
# 生产环境使用白名单:
# CORS_ALLOWED_ORIGINS = [
#     "http://localhost:3000",  # 前端开发服务器
#     "https://your-frontend.com",  # 生产环境域名
# ]# 允许携带凭证(如cookies、HTTP认证)
CORS_ALLOW_CREDENTIALS = True  # 允许跨域请求携带凭证
# 允许的请求方法
CORS_ALLOW_METHODS = ['DELETE','GET','OPTIONS','PATCH','POST','PUT',
]
# 允许的请求头
CORS_ALLOW_HEADERS = ['accept','accept-encoding','authorization',  # 用于JWT认证'content-type','dnt','origin','user-agent','x-csrftoken','x-requested-with','token',  # 自定义token头'openid',  # 自定义openid头'sessionkey',  # 自定义session头
]# DRF 配置
REST_FRAMEWORK = {# ... 已有配置 ...'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework_simplejwt.authentication.JWTAuthentication',  # 示例:JWT认证'rest_framework.authentication.SessionAuthentication',  # 会话认证],'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated',  # 默认需要登录]
}# Redis 配置
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/0",  # Redis 服务器地址和数据库编号"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient","CONNECTION_POOL_KWARGS": {"max_connections": 100}, # 连接池最大连接数"PASSWORD": "",  # 如果 Redis 有密码,添加到这里}}
}
# Session 存储(可选:使用 Redis 存储会话)
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
ROOT_URLCONF = "backend.urls"# 数据库配置(示例:MySQL)
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'your_database','USER': 'root','PASSWORD': 'your_password','HOST': 'localhost','PORT': '3306',}
}TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates","DIRS": [],"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},
]WSGI_APPLICATION = "backend.wsgi.application"# Database
# https://docs.djangoproject.com/en/5.2/ref/settings/#databases# DATABASES = {
#     "default": {
#         "ENGINE": "django.db.backends.sqlite3",
#         "NAME": BASE_DIR / "db.sqlite3",
#     }
# }# Password validation
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validatorsAUTH_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",},
]# Internationalization
# https://docs.djangoproject.com/en/5.2/topics/i18n/
# 改中国
LANGUAGE_CODE = "zh-hans"
TIME_ZONE = 'Asia/Shanghai'
# 确保默认字符编码是 UTF-8
DEFAULT_CHARSET = 'utf-8'USE_I18N = True
USE_L10N = True
USE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.2/howto/static-files/# 生产 静态文件配置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')# STATICFILES_DIRS = [BASE_DIR / 'static']  # 开发 时静态文件存放路径# 媒体文件配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')# Default primary key field type
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
5.项目级路由(backend/urls.py
"""
URL configuration for backend project.The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/5.2/topics/http/urls/
Examples:
Function views1. Add an import:  from my_app import views2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views1. Add an import:  from other_app.views import Home2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""from django.contrib import admin
from django.urls import path, include
from .Index import loginurlpatterns = [path("admin/", admin.site.urls),# 公共路由path('index/login/', Index.login), # 用户登录# 所有API路由统一入口path('api/utils/', include('utils.urls')),  # 工具类应用
]

在公共目录,创建需要登录API的 Index 文件 login方法

比如 path('index/login/', Index.login), # 用户登录

import json
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods# 登录后台
@require_http_methods(["GET", "POST"])
def login(request):print(666)data = {"code": 2000,"date": [],"message": "登录验证"}return JsonResponse(data)

其它子应用路由 分发

比如  path('api/utils/', include('utils.urls')),  # 工具类应用

在utils创建路由文件

from django.urls import path
from .index import Indexurlpatterns = [path('index/', Index.index)
]

创建子应用的文件和方法  path('index/', Index.index) 

import json
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods@require_http_methods(["GET", "POST"])
def index(request):print(666)data = {"code": 2000,"date": [],"message": "我是子应用"}return JsonResponse(data)

 这样就是多应用的前后分离了,也可以在nginx那做负载均衡

6.运行项目

# 迁移数据库
python manage.py makemigrations
python manage.py migrate# 创建超级用户
python manage.py createsuperuser# 启动开发服务器
python manage.py runserver
# 指定端口
python manage.py runserver 8100

访问地址:

公告API接口
http://127.0.0.1:8100/index/login/  子应用
http://127.0.0.1:8100/api/utils/index/

如果像要psot请求要携带 CSRF 令牌

import json
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
# 生成CSRF 令牌
from django.middleware.csrf import get_token# 登录后台
@require_http_methods(["GET", "POST"])
def login(request):print(6666)token = get_token(request)data = {"code": 2000,"date": [],'csrf_token': token,"message": "查询成功"}return JsonResponse(data)

 前端必须带  X-CSRFToken 头,必须是这个名X-CSRFToken

// 1. 获取 CSRF 令牌
axios.get('/api/csrf/').then(response => {const csrfToken = response.data.csrf_token;// 2. 发送 POST 请求时,在请求头中携带令牌axios.post('/api/utils/index/', {}, {headers: {'X-CSRFToken': csrfToken  // 关键:必须用 X-CSRFToken 头}}).then(res => console.log(res.data)).catch(err => console.error(err));});

或者settings.py文件注释django.middleware.csrf.CsrfViewMiddleware,关闭CSRF防护

# 中间件
MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',  # 跨域必须在CommonMiddleware之前"django.middleware.security.SecurityMiddleware","django.contrib.sessions.middleware.SessionMiddleware","django.middleware.common.CommonMiddleware",# "django.middleware.csrf.CsrfViewMiddleware", # 关闭 CSRF 防护 前端不用携带 CSRF 令牌 可以post访问"django.contrib.auth.middleware.AuthenticationMiddleware","django.contrib.messages.middleware.MessageMiddleware","django.middleware.clickjacking.XFrameOptionsMiddleware",
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89243.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间的弧线,逻辑的航道——标准单元延迟(cell delay)的根与源

时序弧 在这篇文章中,我们将讨论影响标准单元延迟的因素。在开始讨论之前,我们需要先了解一下什么是时序弧 (Timing Arcs): 时序弧 (Timing Arcs): 时序弧代表了信号从一个输入流向一个输出的方向。它存在于组合逻辑和时序逻辑中&…

《透视定轴:CSS 3D魔方中视觉层级的秩序法则》

当CSS的代码编织出一个能自由旋转的3D魔方,六个色彩各异的面在空间中翻转、重叠时,最考验技术的并非旋转动画的流畅度,而是每个面在任意角度下都能保持符合现实逻辑的前后关系。为何有时某个面会突兀地“穿透”另一个面?为何旋转到…

RTL编程中常用的几种语言对比

以下是RTL(寄存器传输级)编程中常用的几种硬件描述语言(HDL)及其核心差异的对比分析。RTL编程主要用于数字电路设计,通过描述寄存器间的数据传输和逻辑操作实现硬件功能。以下内容综合了行业主流语言的技术特性与应用场…

前端面试题(HTML、CSS、JavaScript)

目录 一、HTML src与href区别 对html语义化理解 语义化标签有哪些? script中的defer与async区别 行内元素与块级元素有哪些? canvas与svg区别 SEO优化 html5新特性 二、CSS 盒模型 选择器优先级 伪元素与伪类 隐藏元素几种方式 水平/垂直…

Linux-线程控制

线程等待pthread_join()pthread_join 是 Linux 系统中用于线程同步的重要函数,主要作用是等待指定线程结束并回收其资源。基本功能- 阻塞当前调用线程,直到目标线程执行结束。 - 回收目标线程的资源,避免产生“僵尸线程”。 - 可选地获取目标…

RAG优化秘籍:基于Tablestore的知识库答疑系统架构设计

目录一、技术架构设计二、双流程图解析横向架构对比纵向核心流程三、企业级代码实现Python检索核心TypeScript前端接入YAML部署配置四、性能对比验证五、生产级部署方案六、技术前瞻分析附录:完整技术图谱一、技术架构设计 原创架构图 #mermaid-svg-3Ktoc4oH4xlbD6…

i.mx8 RTC问题

项目场景:需要增加外置RTC,保证时间的精准。问题描述:基本情况,外置i2c接口的RTC,注册、读写都正常,但是偶发性重启后,系统时间是2022,rtc时间是1970,都像是恢复了默认时…

数据集相关类代码回顾理解 | utils.make_grid\list comprehension\np.transpose

目录 utils.make_grid list comprehension np.transpose utils.make_grid x_gridutils.make_grid(x_grid, nrow4, padding2) make_grid 函数来自torchvision的utils模块,用于图像数据可视化,将一批图像排列成一个网格。 x_grid:四维图像…

C#中Static关键字解析

本文仅作为参考大佬们文章的总结。 Static关键字是C#语言中一个基础而强大的特性,它能够改变类成员的行为方式和生命周期。本文系统性总结static关键字的各类用法、核心特性、适用场景以及需要注意的问题,以帮助掌握这一重要概念。 一、Static关键字概…

通用综合文字识别联动 MES 系统:OCR 是数据流通的核心

制造业的 MES 系统需实时整合生产数据以调控流程,但车间的工单、物料标签、质检报告等多为纸质或图片形式,传统人工录入不仅滞后,还易出错,导致 MES 系统数据断层。通用综合文字识别借助 OCR 技术,成为连接这些信息与 …

【Linux 学习指南】网络编程基础:从 IP、端口到 Socket 与 TCP/UDP 协议详解

文章目录📝理解源IP地址和目的IP地址🌠 认识端口号🌉端口号范围划分🌉理解"端口号"和"进程ID"🌉理解源端口号和目的端口号🌉理解socket🌠传输层的典型代表🌉认识…

React+Next.js+Tailwind CSS 电商 SEO 优化

一、项目背景与技术选型​1. 原始痛点​项目最初基于纯 React 开发(SPA 架构),存在三个致命问题:​搜索引擎爬虫无法有效抓取动态渲染的商品详情、分类页内容;​单页面应用 难以实现页面级的 meta 定制,关键…

Process Lasso:提升电脑性能的得力助手

在日常使用电脑的过程中,我们常常会遇到这样的问题:电脑运行缓慢、程序响应迟缓、多任务处理时卡顿不断。这些问题不仅影响工作效率,还让人感到非常烦躁。其实,这些问题很多时候是因为电脑的进程管理不够优化。而Process Lasso正是…

AI驱动的大前端内容创作与个性化推送:资讯类应用实战指南

在信息爆炸的时代,资讯类应用面临两大核心挑战:一是如何高效生产海量优质内容,二是如何让用户从海量信息中快速获取感兴趣的内容。AI技术的介入正在重构资讯类应用的开发模式,从内容生产到用户触达形成全链路智能化。本文将从开发…

2025/7/16——java学习总结

Java IO 流全体系总结:从基础到实战的完整突破(重写)一、基础核心:字节流与字符流的底层逻辑(一)字节流:二进制数据的读写基础操作字节输入流:掌握 FileInputStream 单字节读取细节&…

书籍自然数数组的排序(8)0715

题目给定一个长度为N的整型数组arr,其中有N个互不相等的自然数1~N,请实现arr的排序,但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N。解答 arr在调整之后应该事下标从0到N-1的位置上依次放着1~N,即arr[index] index …

【08】MFC入门到精通——MFC模态对话框 和 非模态对话框 解析 及 实例演示

文章目录八、模态对话框 和 非模态对话框 创建及显示8.1 对话框是怎样弹出的8.2 模态对话框的创建及显示8.3 非模态对话框的创建及显示8.4 完整代码下载八、模态对话框 和 非模态对话框 创建及显示 Windows对话框分为两类:模态对话框 和 非模态对话框。 模态对话框…

github上传大文件(多种解决方案)

之前一直用vscode的上传项目方法,这个方便之处在于不用打开git终端输入各种命令,不过麻烦的是我一直无法拉取github上的远程仓库提交,每次只能更新已有的仓库并且上传的文件还不能太大,应该是不能超过100MB,而且直接在…

生活污水深度除磷的方法

生活污水中磷含量过多的危害大家都知道总磷是水质检测的重要指标之一,在污水处理中生活污水往往都会出现总磷超标的现象。生活污水磷超标的危害是多方面的主要包括水体富营养化、危害水生生物、影响人类健康,以及可能引发蓝藻水华等问题。除磷方法污水的…

Flutter瀑布流布局深度实践:打造高性能动态图片墙

本文将深入探讨如何在Flutter中实现高性能瀑布流布局,解决动态高度内容展示的核心难题,并带来卓越的用户体验。引言:瀑布流布局的魅力 瀑布流布局(Pinterest-style layout)已成为现代应用展示图片和内容的黄金标准。它通过错落有致的排列方式…