django一些常用的配置
本文摘要: Django开发环境配置指南详细介绍了从安装到项目部署的全过程,包括:1.基础环境搭建(Django安装、项目创建);2.关键配置(调试模式、模板/资源路径、数据库连接);3.进阶功能实现(跨域处理、JWT认证配置);4.实用工具(时区设置、环境变量管理、依赖清单生成)。重点说明了DRF框架下新旧版JWT的差异配置,以及生产环境的安全注意事项,如跨域白名单设置和数据库密码加密存储。文档
·
一.django安装创建
第一步:安装
py -m pip install Django==5.2.5
第二步:查看是否安装成功
py -m django --version
第三步:先创建项目文件夹
mkdir 文件夹
第四步:创建django项目
django-admin startproject mysite 文件夹
第五步:创建app
py manage.py startapp app名称
二.settings文件配置
(1)基本配置
- 调试模式
在开发调试过程中会自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统
DEBUG = True
- 域名访问权限
ALLOWED_HOSTS 域名访问权限:设置可访问的域名,默认值为空列表。
当DEBUG为True并且ALLOWED_HOSTS为空列表时,项目只允许以localhost或127.0.0.1在浏览器上访问。
当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,
如果想允许所有域名访问,可设置ALLOW_HOSTS=['*']。
(2)模板配置
"DIRS":指定templates所在的位置,通常用来指定主app下的模板路径,因为子app的templates可以通过下面的"APP_DIRS"查找到。
"APP_DIRS":True表示可以在已经注册了的子app的目录下查找templates文件
(3)资源文件配置
- 静态资源文件
- 默认配置,app下的static目录为静态资源,可以在static路由下直接访问。其他目录不行。
STATIC_URL = 'static/' - 自定义静态资源集合配置,可以访问列表中的目录作为静态资源(在static路由下可以直接访问)
# 设置静态资源文件集合 STATICFILES_DIRS = [BASE_DIR / "static", BASE_DIR / "helloWorld/images"]
- media媒体资源文件
urlpatterns = [
path('',,name=''),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings:
# 设置媒体路由
MEDIA_URL = 'media/'
# 设置media目录的完整路径
MEDIA_ROOT = BASE_DIR / 'media'
(4)数据库配置
Django提供4种数据库引擎:
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
- 使用mysql数据库
-
安装mysql连接模块
如果要把上述的连接信息改成MySQL数据库,首先需要安装MySQL连接模块pip install mysqlclient 或 pip install pymysql - 连接mysql
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db', # 数据库名 'USER': 'root', # 用户 'PASSWORD': '123', # 密码 'HOST': 'localhost', 'PORT': '3306' # 端口号 } } - 在settings的同级目录下的__init__文件中导入pymysql
注意:如果你安装的是django官方的mysqlclient连接模块,则不需要导入,
如果你安装的不是官方的是pymsql连接模块则需要导入
import pymysql
pymysql.install_as_MySQLdb()
三.跨域配置
在Django中配置CORS(跨域资源共享)有几种方法
方法一:使用django-cors-headers(推荐)
这是最常用和推荐的方法。
1. 安装django-cors-headers
pip install django-cors-headers
2. 在settings.py中配置
- app里注册(必填)
# 添加到 INSTALLED_APPSINSTALLED_APPS = [# ... 其他应用 'corsheaders', # ... 其他应用 ] - 添加中间件,放在最前面(必填)
# 添加到MIDDLEWARE(注意顺序很重要,要放在尽可能靠前的位置)MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', # ... 其他中间件] -
CORS配置(必填)
方式1:# 允许所有域名(仅用于开发环境,生产环境应具体指定) CORS_ALLOW_ALL_ORIGINS = True # 允许跨域请求时携带用户凭证 CORS_ALLOW_CREDENTIALS = True 方式2: # 或者指定允许的域名(推荐用于生产环境) # CORS_ALLOWED_ORIGINS = [ # "http://localhost:8080", # "http://127.0.0.1:8080", # "http://localhost:3000", # "https://yourdomain.com",] # 允许跨域请求时携带用户凭证 CORS_ALLOW_CREDENTIALS = True -
允许的HTTP方法
CORS_ALLOW_METHODS = [ "DELETE", "GET", "OPTIONS", "PATCH", "POST", "PUT",] -
允许的头部字段
CORS_ALLOW_HEADERS = [ "accept", "authorization", "content-type", "user-agent", "x-csrftoken", "x-requested-with",] -
是否允许携带凭证(cookies, authorization headers等)
CORS_ALLOW_CREDENTIALS = True
四.创建管理员命令行
python manage.py createsuperuser
五.时区时间设置
将时间设置为北京时间
TIME_ZONE = 'Asia/Shanghai' # 设置为北京时间
USE_TZ = False
六.DRF-jwt配置
1.旧版本jwt(django3以下能用)
(1)安装并配置DRF和DRF-JWT
pip install djangorestframework
pip install djangorestframework-jwt
- 在app里面注册
# 定义Django项目中安装的应用列表
INSTALLED_APPS = [
# 导入rest_framework和rest_framework_jwt模块,用于支持RESTful API的开发和JWT认证
'rest_framework',
'rest_framework_jwt',
]
(2)视图中生成jwt
from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
from rest_framework_jwt.settings import api_settings
# 直接从数据库中获取指定用户名和密码的用户对象
user = SysUser.objects.get(username='admin', password='123456')
# 从API设置中获取JWT payload处理函数和编码处理函数
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user) # 将用户对象(单个对象)传递进去,内部自动转换成python字典
token = jwt_encode_handler(payload) # 将python字典编码成jwt格式的字符串。这一步才是加密的核心。
(3)设置jwt检验
①使用注意(是干嘛的)
- 视图类必须继承DRF的类才能自动生效jwt校验,如:APIView,GenericAPIView,ViewSet
- 视图类如果是继承的原始django的类就不能自动生效jwt校验:如:View
- 具体示例:客户端请求时,在 HTTP 头里带上了合法的 JWT:Authorization: JWT ,请求头这个Authorization参数的格式必须是这样
- 在根据路由进入drf视图类之前会自动检验请求头中的Authorization参数,如果不合规则拒绝进入
②全局设置jwt校验
REST_FRAMEWORK = {...}
- 有什么用
- 它告诉 DRF:所有接口默认使用 JWT 认证,且必须登录才能访问。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
③局部设置
- 局部启用 JWT(默认全局没配,只在指定视图启用)只会在当前的接口走jwt校验,对其他接口没有影响
from rest_framework.views import APIView from rest_framework.permissions import IsAuthenticated from rest_framework_jwt.authentication import JSONWebTokenAuthentication class ProfileView(APIView): # 只在当前视图启用 JWT 认证 authentication_classes = [JSONWebTokenAuthentication] permission_classes = [IsAuthenticated] def get(self, request): return Response({"username": request.user.username}) - 局部禁用 JWT(全局已启用,但某个接口不需要)
class LoginView(APIView):
# 登录接口不需要校验 token
authentication_classes = [] # 禁用任何认证
permission_classes = [] # 禁用任何权限
(4)配置生成的jwt格式
JWT_AUTH = {...}
- 有什么用
用来控制 JWT 的具体行为,比如:
- token 有效期
- 是否允许刷新
- token 前缀(如 JWT 或 Bearer)
- 签名算法、密钥、载荷处理函数等
- 设置token的过期时间
import datetime
# JWT认证配置
# 配置JSON Web Token相关的参数,用于用户身份验证
JWT_AUTH = {
# JWT的过期时间1天,days 表示天, hours 表示小时, minutes 表示分钟, seconds表示秒
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
}
2.新版本jwt:simple-jwt
注意:在生成jwt的时候,使用的是内置的auth_user表,从这个表里面查找是否存在用户信息
(1)安装并配置DRF和DRF-simpleJWT
pip install djangorestframework
pip install djangorestframework-simplejwt
- 在app里面注册
# 定义Django项目中安装的应用列表
INSTALLED_APPS = [
# 导入rest_framework和rest_framework_jwt模块,用于支持RESTful API的开发和JWT认证
'rest_framework',
'rest_framework_simplejwt',
]
(2)生成jwt
# urls.py
from rest_framework_simplejwt.views import (
TokenObtainPairView, # 登录(返回 access + refresh)
TokenRefreshView, # 刷新
TokenVerifyView) # 校验
urlpatterns = [
path('api/login/', TokenObtainPairView.as_view(), name='token_obtain'),
path('api/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/verify/', TokenVerifyView.as_view(), name='token_verify'),
]
(3)设置jwt校验
注意:请求头中不填写Authorization的时候,不会触发jwt校验
①使用注意(是干嘛的)
- 视图类必须继承DRF的类才能自动生效jwt校验,如:APIView,GenericAPIView,ViewSet
- 视图类如果是继承的原始django的类就不能自动生效jwt校验:如:View
- 具体示例:客户端请求时,在 HTTP 头里带上了合法的 JWT:Authorization: JWT/Bearer ,请求头这个Authorization参数的格式必须是这样
- 在根据路由进入drf视图类之前会自动检验请求头中的Authorization参数,如果不合规则拒绝进入
②全局设置jwt校验
REST_FRAMEWORK = {...}
- 有什么用
- 它告诉 DRF:所有接口默认使用 JWT 认证,且必须登录才能访问。
REST_FRAMEWORK = {
# jwt认证
'DEFAULT_AUTHENTICATION_CLASSES': [ # 全局认证
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
# 权限认证
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
③局部设置
-
局部启用 JWT(默认全局没配,只在指定视图启用)
只会在当前的接口走jwt校验,对其他接口没有影响authentication_classes = [JWTAuthentication] permission_classes = [IsAuthenticated]from rest_framework.views import APIView from rest_framework.response import Response from rest_framework_simplejwt.authentication import JWTAuthentication from rest_framework.permissions import IsAuthenticated class ProfileView(APIView): authentication_classes = [JWTAuthentication] permission_classes = [IsAuthenticated] def get(self, request): return Response({"uid": request.user.id}) - 局部禁用 JWT(全局已启用,但某个接口不需要)
class LoginView(APIView):
# 登录接口不需要校验 token
authentication_classes = [] # 禁用任何认证
permission_classes = [] # 禁用任何权限
(4)配置生成的jwt格式
SIMPLE_JWT = {...}
- 有什么用
用来控制 JWT 的具体行为,比如:
- token 有效期
- 是否允许刷新
- token 前缀(如 JWT 或 Bearer)
- 签名算法、密钥、载荷处理函数等
- 设置token的过期时间
from datetime import timedelta
SIMPLE_JWT = { # ④核心参数
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'AUTH_HEADER_TYPES': ('Bearer',), # 请求头前缀
'USER_ID_CLAIM': 'user_id', # payload 中用户 ID 字段
}
七.数据库密码加载环境变量
1.安装 pip install django-environ 然后在settings文件中加入代码
import environ # 加载.env文件的包
env = environ.Env() # 创建一个Env对象
environ.Env.read_env("D:\爬虫学习\AI_Compny\AI_Compny\django_back\.env")
# 读取 .env,里面添加你的.env路径
2.数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ai_compny', # 数据库名
'USER': 'root', # 用户
'PASSWORD': env('DB_PASSWORD'), # 密码
'HOST': 'localhost',
'PORT': '3306', # 端口号
}
}
3.在manage.py的同级目录下创建.env文件
DB_PASSWORD=数据库密码
八.requirements.txt文件配置
1.有什么用
别人安装python包的时候,可以直接运行这个文件,然后自动安装这个文件里面所有的包
2.生成python包依赖清单
(1)方式1
在当前python项目的虚拟环境下运行这个命令,就会自动创建requirements.txt文件,并把虚拟环境的所有包依赖自动添加到这个文件
pip freeze > requirements.txt
3.安装python包依赖
一次性安装requirements.txt文件中列出的所有库,确保环境一致。
注意:-r 后面需要是requirements.txt的文件路径
pip install -r requirements.txt
更多推荐
所有评论(0)