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

Django项目配置全攻略:settings配置文件

文章目录

  • 一、settings 配置文件介绍
  • 二、数据库配置(mysql、redis)
  • 三、配置日志
  • 四、域名配置
  • 五、自定义用户模型
  • 六、定时任务(性能优化)

一、settings 配置文件介绍

settings.py 是 Django 项目的核心配置文件,存放数据库、静态文件、中间件等关键参数。

# 上线时为False,调试时为True(浏览页面发生错误,会告诉你那里错了)DEBUG=True# 语言 英文:en-us 中文:zh-HansLANGUAGE_CODE='zh-Hans'# 时区 UTC Asia/ShanghaiTIME_ZONE='Asia/Shanghai'# 用户上传文件的配置MEDIA_URL='/media/'MEDIA_ROOT=os.path.join(BASE_DIR,'media')

二、数据库配置(mysql、redis)

mysql配置

如果本地建立了数据库,且使用本地的 MySql 数据库,则可以通过修改settings.py中的配置来连接

DATABASES={'default':{'ENGINE':'django.db.backends.mysql','HOET':'127.0.0.1','PORT':3306,'USER':'root','PASSWORD':'123456','NAME':'meiduo_mall',}}

同时需要在settings.py同级目录下的__init__.py文件添加如下内容(需提前安装pip install pymysql
作用:将 PyMySQL 适配为 Django 默认使用的 MySQL 驱动接口。Django 默认使用 MySQLdb 作为 MySQL 数据库驱动,但 MySQLdb 仅支持 Python 2 或需要额外编译。PyMySQL 是一个纯 Python 实现的 MySQL 客户端,兼容 Python 3,通过此方法可以让 Django 将其识别为合法的 MySQL 驱动
使用场景:当系统未安装 MySQLdb 或运行在 Python 3 环境下时,需使用 PyMySQL 作为替代;

importpymysql pymysql.install_as_MySQLdb()

redis配置

Redis在Django中主要用于缓存、会话存储、消息队列等场景,能够显著提升应用性能
缓存加速:Redis作为高速缓存存储查询结果、页面片段或API响应,减少数据库查询压力,适合高频访问但更新不频繁的数据
会话管理:将会话数据(Session)存储在Redis中,解决多服务器环境下会话共享问题,比数据库存储更快且支持过期时间
消息队列:通过Redis的发布订阅(Pub/Sub)或List结构实现异步任务队列,配合Celery处理耗时任务如邮件发送、文件处理等
频率限制:存储用户请求计数,实现API限流或防止暴力破解,例如登录尝试次数限制
实时功能:支持实时通知、在线状态等场景,利用Redis的快速读写特性推送数据变更

准备工作:确保已安装Redis服务端并启动服务。若未安装,可从Redis官网下载并运行

安装依赖pip install redis django-redis
settings.py文件中添加Redis相关配置

CACHES={"default":{"BACKEND":"django_redis.cache.RedisCache","LOCATION":"redis://127.0.0.1:6379/1",# 数据库编号1"OPTIONS":{"CLIENT_CLASS":"django_redis.client.DefaultClient","PASSWORD":"yourpassword",# 如果有密码}}}# 可选:将Session存储改为RedisSESSION_ENGINE="django.contrib.sessions.backends.cache"SESSION_CACHE_ALIAS="default"

使用缓存示例

fromdjango.core.cacheimportcache# 设置缓存(有效期60秒)cache.set('key','value',timeout=60)# 获取缓存data=cache.get('key')

三、配置日志

在 settings.py 中配置日志系统,Django 使用 Python 标准库 logging 模块

LOGGING={'version':1,'disable_existing_loggers':False,# 是否禁用以及存在的日志器'formatters':{# 日志信息显示格式'verbose':{'format':'%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'},'simple':{'format':'%(levelname)s %(module)s %(lineno)d %(message)s'},},'filters':{# 对日志进行过滤'require_debug_true':{# django在debug模式下才输出日志'()':'django.utils.log.RequireDebugTrue',},},'handlers':{# 日志处理方式'console':{# 向终端输出日志'level':'INFO','filters':['require_debug_true'],'class':'logging.StreamHandler','formatter':'simple'},'file':{# 向文件中输出日志'level':'INFO','class':'logging.handlers.RotatingFileHandler','filename':os.path.join(BASE_DIR,'logs/log.log'),# 日志文件的位置'maxBytes':300*1024*1024,'backupCount':10,'formatter':'verbose'},},'loggers':{# 日志器'django':{# 定义一个名为django的日志器'handlers':['console','file'],# 可以同时向终端与文件中输出日志'propagate':True,# 是否继续传递日志信息'level':'INFO',# 日志接收的最低日志级别},}}
日志级别含义
DEBUG调试信息,适用于开发环境
INFO常规操作记录
WARNING警告信息,不影响系统运行
ERROR错误信息,影响部分功能
CRITICAL严重错误,可能导致系统崩溃

在视图或任何 Python 模块中调用日志

importlogging logger=logging.getLogger(__name__)defmy_view(request):logger.debug('This is a debug message')logger.info('This is an info message')logger.warning('This is a warning message')logger.error('This is an error message')logger.critical('This is a critical message')

日志文件轮转配置:使用 RotatingFileHandler 实现日志按文件大小自动分割日志,避免单个日志文件过大

'handlers':{'file':{'level':'DEBUG','class':'logging.handlers.RotatingFileHandler','filename':'/path/to/django.log','maxBytes':1024*1024*5,# 5MB'backupCount':5,'formatter':'verbose',},}

按时间分割日志文件

'handlers':{'file':{'level':'DEBUG','class':'logging.handlers.TimedRotatingFileHandler','filename':'/path/to/django.log','when':'midnight',# 每天午夜'interval':1,'backupCount':7,# 保留7天'formatter':'verbose',},}

日志过滤器配置:添加自定义过滤器

'filters':{'require_debug_true':{'()':'django.utils.log.RequireDebugTrue',},},'handlers':{'console':{'level':'DEBUG','filters':['require_debug_true'],'class':'logging.StreamHandler',},}

数据库日志记录:将日志存入数据库需要自定义处理器

classDatabaseLogHandler(logging.Handler):defemit(self,record):from.modelsimportErrorLog ErrorLog.objects.create(level=record.levelname,message=record.getMessage(),module=record.module,lineno=record.lineno)LOGGING={'handlers':{'db':{'level':'ERROR','class':'myapp.logging_handlers.DatabaseLogHandler',},}}

四、域名配置

linux系统修改文件/etc/hosts,添加内容127.0.0.1 www.xxx.site
Windows系统修改文件C:\Windows\systems32\drivers\etc\hosts,添加内容127.0.0.1 www.xxx.site

修改settings.py文件

ALLOWED_HOSTS=['127.0.0.1','www.xxx.site']

然后在网页访问www.xxx.site就是访问127.0.0.1

五、自定义用户模型

在 Django 中,AUTH_USER_MODEL 是一个关键配置项,用于指定项目中使用的自定义用户模型。它决定了用户认证系统的基础模型类,取代 Django 默认的 User 模型

核心功能
自定义用户模型:允许开发者扩展或完全替换 Django 默认的 User 模型(django.contrib.auth.models.User)。例如,可以添加字段如 phone_number 或修改认证逻辑(如改用邮箱登录)
数据库表关联:所有与用户关联的外键(如 ForeignKey、OneToOneField)会自动引用 AUTH_USER_MODEL 指定的模型,确保数据一致性
认证系统集成:Django 的权限系统(Permission)、组(Group)和内置视图(如 LoginView)均基于此配置运行

配置方法:在settings.py中定义

#通过提供一个值给AUTH USER MODEL设置,# 指向自定义的模型,Django允许你覆盖默认的User模型# AUTH_USER_MODEL = '子应用名.模型名'AUTH_USER_MODEL='users.User'

:必须在首次迁移(makemigrations)前设置,否则需重建数据库

模型定义:自定义模型需继承 AbstractUser 或 AbstractBaseUser

fromdjango.contrib.auth.modelsimportAbstractUserclassCustomUser(AbstractUser):phone_number=models.CharField(max_length=20)

外键引用方式:在模型中引用用户时,应使用 settings.AUTH_USER_MODEL 而非直接导入

fromdjango.confimportsettingsclassOrder(models.Model):user=models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)

导入限制:避免直接导入 User 模型,否则可能导致循环导入或模型冲突。需通过 get_user_model() 动态获取

fromdjango.contrib.authimportget_user_model User=get_user_model()

六、定时任务(性能优化)

django-crontab 是一个基于 Linux 系统 crontab 的 Django 定时任务扩展,允许通过 Django 配置管理周期性任务,无需直接操作系统的 crontab 文件。它简化了定时任务的创建、更新和删除流程

应用场景

利用好定时任务,可以有效的提升项目的性能
页面静态化:当页面中涉及一些数据库查询操作时,可以利用定时任务,定期查询一次数据库,将生成一份经过数据渲染后的静态html文件,后期请求直接返回该静态文件,有效减少数据库查询操作
定时更新redis:页面涉及数据时,可以利用定时任务,将数据定时更新保存到redis中,后端返回时,从redis中读取数据,相比数据库,redis的读写速度更快

安装依赖pip install django-crontab

配置步骤

  1. 添加到 INSTALLED_APPS
    在 Django 项目的 settings.py 文件中添加 django_crontab 到 INSTALLED_APPS
INSTALLED_APPS=[...,'django_crontab',]
  1. 配置定时任务
    在 settings.py 中定义 CRONJOBS 列表,指定任务频率和执行的函数路径。
CRONJOBS=[# 参数1: 频次 (每1分钟生成一次首页静态文件) 分 时 日 月 周# 参数2: 任务(函数)# 参数3: 日志('*/5 * * * *','myapp.cron.my_scheduled_job','>> /tmp/my_job.log'),# 支持传递参数和自定义环境变量('0 1 * * *','myapp.cron.daily_backup',['arg1','arg2'],{'DJANGO_ENV':'production'}),]
  1. 编写任务函数
    在应用目录下创建 cron.py 文件,定义任务函数
defmy_scheduled_job():print("This task runs every 5 minutes")

管理定时任务

添加任务到系统 crontabpython manage.py crontab add
查看已激活的任务列表python manage.py crontab show
移除所有任务python manage.py crontab remove

http://www.jsqmd.com/news/1402489/

相关文章:

  • 快速判断apk有没有支持16kb页面标准
  • 江苏铆接螺母资深厂商与拉铆螺母厂家实力参考:行业现状与正规商家选择指南 - 工业设备
  • Grok Bot登顶Hacker News:解析实时AI助手的技术架构与开发实践
  • 十五条种子数据注入 项目:鸿蒙待办清单一开屏就热闹非凡
  • 2026年8月安徽亳州装修/亳州新房装修工程公司哪家靠谱_安徽有一家装饰工程有限公司亳州分公司 - 行业平台推荐
  • Codex 登录卡验证码?从网络环境到账号状态,一次讲清所有坑
  • 基于SpringBoot的新能源汽车销售平台系统(源码+lw+部署文档+讲解等)
  • AI大模型开发笔记——开发聊天机器人
  • GitHub Copilot 摘要压缩踩坑:关键约束被吞后,我连夜加了三层校验
  • AI公司IPO技术拆解:从大模型工程化到RAG应用实战
  • VSCode 从安装到高效开发:系统配置指南与插件生态实践
  • 大润发购物卡回收怎么选?从合规维度拆解 3 家主流渠道 - 京质回收
  • UIUC CS225数据结构课程:从C++面向对象到图论算法的工程实践指南
  • Dropout 和正则化:深度学习如何缓解过拟合?
  • 配电网重构中的二阶锥规划与CPLEX优化实践
  • C语言实现循环单链表:从原理到完整代码与调试指南
  • 汇编文件的本质与 Linux 0.11 引导扇区的编译、链接、写入全流程
  • CMake install命令详解:从构建到部署的完整指南
  • 【数据结构学习 Day4】栈与队列核心概念梳理 + 顺序栈 / 链式栈 / 链式队列完整实现(附踩坑排错指南)
  • Kotlin DSL依赖管理实战:从基础语法到Version Catalog最佳实践
  • 【Spark内核】Spark Driver 的整体架构
  • 2026年佛山旧房翻新:半包清包和全包,选错模式比选材料更耗钱 - 优家闲谈
  • Flutter 3.41构建流式AI应用:架构设计与核心实现
  • 如何把某一个 commit 合并到当前分支?Git cherry-pick 完整教程
  • 想找靠谱的不锈钢冲孔板服务商?这些核心挑选要点别忽略
  • 2026年8月南京鲜肉切片机/南京激光切片机厂家实力榜_南京银象食品机械有限公司 - 行业平台推荐
  • 2026燃气锅炉定制生产品牌实力风云榜,高认可度厂商精选 - myqiye
  • HikariCP连接池配置实战:连接超时与连接数调优指南
  • 曲率感知零阶优化:内存高效的测试时适应方法解析与实战
  • MemSFT:大模型微调中灾难性遗忘与对齐税的解决方案