news 2026/8/16 4:25:48

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 4:24:39

从零到一搭建智能客服系统(LangGraph + FastAPI + 智谱AI 实战)

一、这个项目是做什么的? 「π域」是一个快递行业的 AI 智能客服系统。它的核心价值是:用 AI Agent 替代 80% 的重复性人工客服工作,实现 724 小时秒级响应。 具体来说,它能做这几件事: FAQ 问答: 用户问“…

作者头像 李华
网站建设 2026/8/16 4:23:04

OpenClaw实战:基于多智能体框架的水产养殖自动化系统部署指南

1. 项目概述:从“瞎”养到“智”养的蜕变养小龙虾,或者说搞水产养殖,听起来是个挺接地气的活儿,但真干起来,里面的门道可深了。过去很多养殖户,包括我自己刚开始摸索的时候,基本都处在“瞎”养状…

作者头像 李华
网站建设 2026/8/16 4:20:26

Obsidian配置同步终极指南:Settings Sync与Git方案详解

1. 项目概述:为什么你的 Obsidian 需要一套“配置同步”方案? 如果你已经开始用 Obsidian 管理笔记,大概率已经体会过那种“甜蜜的烦恼”:在一台电脑上精心配置了主题、安装了十几个插件、调整了无数快捷键和核心设置&#xff0c…

作者头像 李华
网站建设 2026/8/16 4:13:23

从OpenClaw实战看云服务CLI工具:自动化运维与DevOps效率提升

1. 从“玩虾”到“玩转”:一场开发者与云服务的深度对话最近在开发者圈子里,腾讯云OpenClaw的“玩虾大赛”成了一个不大不小的热点。看到这个标题,你可能会有点懵:“玩虾”?这跟写代码、搞云计算有什么关系&#xff1f…

作者头像 李华
网站建设 2026/8/16 4:05:58

AI Agent技能开发实战:从零构建智能体工具链与自动化应用

这次我们来看一个关于 Agent Skills 的实战教程资源。这个标题指向的是一套号称“最全最细”的 Agent Skills 实战教程,目标是帮助学习者快速入门并掌握相关技能。对于想进入 AI Agent 开发领域的人来说,最关心的不是概念有多复杂,而是有没有…

作者头像 李华
网站建设 2026/8/16 4:05:31

带哨兵位的双向链表

一、简介上一篇我们实现了顺序表和单链表,但是我们发现了一个问题,链表的增、删、改都需要二级指针来操作,为了解决这个麻烦,今天引入一个叫哨兵位的家伙。为什么需要哨兵位?双向链表是数据结构中的基础,但…

作者头像 李华