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
英文地址,請注明出處:http://en.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)已成為現代應用展示圖片和內容的黃金標準。它通過錯落有致的排列方式…