Django-325版本创建时候需要手动设置的内容
1. 设置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'orm', #要连接的数据库,连接前需要创建好
'USER':'root', #连接数据库的用户名
'PASSWORD':'', #连接数据库的密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306 #端口 默认3306
}
}
还可以设置数据库连接池 提高并发能力
MySQL 连接池
使用 mysqlclient 库,您可以通过 OPTIONS 设置连接池:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'pool_size': 5, # 设置连接池的大小
'MAX_OVERFLOW': 10 #连接池默认创建的链接对象的最大数量
},
}
}
PostgreSQL 连接池
使用 psycopg2 驱动,可以通过配置它的连接选项:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost',
'PORT': '5432',
'OPTIONS': {
'pool_size': 10, # 数据库池大小示例,
'MAX_OVERFLOW': 10 #连接池默认创建的链接对象的最大数量
},
}
}
Django 使用 django-db-pool
pip install django-db-pool
django-db-pool 配置:
django-db-pool 是一个 Django 的插件,帮助你在应用中使用连接池。它使用的是常见的数据库适配器(如 MySQL 和 PostgreSQL),因此支持多种数据库。连接池配置通常可以在 settings.py 中完成。
示例 settings.py 配置:
DATABASES = {
'default': {
'ENGINE': 'django_db_pool',
'POOL_OPTIONS': {
'POOL_SIZE': 10, # 初始连接池大小
'MAX_OVERFLOW': 5, # 最大溢出连接数量
'RECYCLE': 3600, # 回收连接时间(秒)
'TIMEOUT': 30, # 超时设置(秒)
},
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
SQLAlchemy 配置连接池
pip install SQLAlchemy
SQLAlchemy 本身支持多种数据库,并能通过配置连接池来管理和优化性能。其连接池是基于 SQLAlchemy 自身的 create_engine 功能。
注意SQLAlchemy有自身的配置参数和迁移命令,如果使用它,则django自带的迁移命令和配置需要调整
示例配置:
from sqlalchemy import create_engine
# PostgreSQL
pg_engine = create_engine(
'postgresql://user:password@localhost:5432/mydatabase',
pool_size=10, # 连接池数量
max_overflow=5, # 超过连接池最大数量的额外连接
pool_timeout=30, # 超时设置(秒)
pool_recycle=3600 # 回收连接时间
)
# MySQL
mysql_engine = create_engine(
'mysql+mysqlclient://user:password@localhost/mydatabase',
pool_size=10,
max_overflow=5,
pool_timeout=30,
pool_recycle=3600
)
2. 设置日志调试
LOGGING= {
'version':1,
'disable_existing_loggers':False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate':True,
'level':'DEBUG',
},
}
}
3. 提示no moudle named MySQLdb,
这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的__init__,在里面写入
import pymysql
pymysql.install_as_MySQLdb()
4. pymysql版本报错
在项目名文件下的__init__,在里面写入
1,3,3 根据报错的版本号填写
pymysql.version_info = (1, 3, 3, "final", 0)
适合Django 2.0的解决办法
通过查找路径C:\Programs\Python\Python36-32\Lib\site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql
这个路径里的文件把注释掉 就OK了。
if version < (1,3,3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
5. 数据库迁移命令
python manage.py makemigrations
python manage.py migrate
6. auth模块中如果不用默认的user表,而是要自定义扩展字段的
setting.py中要添加 AUTH_USER_MODEL = "app02.UserInfo" app02是应用名,UserInfo是自定义类名.
7. 如果多个应用解藕,在setting中INSTALLED_APPS写入应用名字

8. 如果有自定义中间件,在setting中MIDDLEWARE写入中间件,
格式为应用名.py文件名.自定义中间件类名
9. 设置时区

10. 解藕前后端文件,也可以再进一步在里面按照应用名进一步解藕
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,"my_statics")]

11. 解藕上传文件,也可以再进一步在里面按照应用名进一步解藕,注意这里和static不一样,不是一个列表
MEDIA_ROOT = os.path.join(BASE_DIR,"cnblogs/upload_folder")
12. Django sendmail配置
# 发送stmp协议的邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 服务器名称
EMAIL_HOST = 'smtp.sina.com'
# 服务端口
EMAIL_PORT = 25
# 发送的邮箱账号
EMAIL_HOST_USER = 'test@sina.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'cf**********5'
# 收件人看到的发件人,不过尝试一下没用,不知道是不是理解有误,也有设置成 EMAIL_FROM = EMAIL_HOST_USER
EMAIL_FROM = 'test@sina.com>'
13. LOGIN_URL = "/cnblog/login/"
这个是针对login_required这个装饰器用的,一旦登陆认证失败,会跳转到你指定的 LOGIN_URL,带上?next参数
14. 开通media访问路由
主要用来对外网开放访问权限的,比如渲染上传图片的SRC,用来和进行内部和外部的解藕,如果不配置这条路由,外网无法访问项目内部文件
也是和STATIC_URL一样创建一个别名,再配置一条根路径
MEDIA_URL = "/media/"
# 这么配置好后avatar上传的路径就变为了cnblogs/upload_folder/avatar
# todo 遗留问题,如何media按照用户的id或者用户名作为根目录
MEDIA_ROOT = os.path.join(BASE_DIR, "cnblogs/upload_folder/")
15. X-FRAM中间使用,针对HTML中插入了I-frame标签的内容,设置后允许I-frame的内容在同域环境中展示渲染.
X_FRAME_OPTIONS = 'SAMEORIGIN'
16. django常用模块汇总
from django.conf import settings # Django配置文件,自己django项目有配置就用自己的,没有就用系统默认配置。
from django import forms # form组件 class MyForm(forms.Form)
from django.forms import widgets # widget=widgets.PasswordInput(attrs={'class': 'form-control'})
from django.shortcuts import render, HttpResponse, redirect,reverse # 后端反向解析
from django.http import JsonResponse # 直接返回给html页面一个字典对象
from django.contrib import auth # auth组件,用户登录功能校验
from django.contrib.auth.decorators import login_required # 登录认证装饰器
from django.db.models import Count,Max,Min,Avg,F,Q # 聚合与分组连用 F与Q查询
from django.db.models.functions import TruncMonth
from django.utils.safestring import mark_safe # 后端安全校验
from django.db import transaction # django 事务
from django.contrib.auth.models import AbstractUser # 告诉django自定义用户表类 class UserInfo(AbstractUser):
from django.views.static import serve # 暴露后端媒体文件夹资源
# url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}),
from django.conf.urls import url # 在分路由需导入使用
from django.contrib import admin # 在admin.py文件中做用户表注册
from django import template # 自定义标签使用
# register = template.Library() @register.inclusion_tag('left_menu.html') 自定义标签使用
from django.views import View # CBV 视图类继承View,走View内部的as_views()方法
17 .设置中文管理后台
好像直接设置LANGUAGE_CODE = 'zh-Hans'就可以,如果不行参考下面步骤
在setting.py头部导入from django.utils.translation import gettext_lazy as _
然后在LANGUAGE_CODE = 'zh-Hans' 上方添加:
LANGUAGES = [
('zh-Hans', _('Chinese')),
]
18 .关闭时区感知
USE_TZ = False
启用后,Django 内部会使用 UTC 时间进行存储和处理,再根据 TIME_ZONE 进行转换。这使应用能够更好地处理跨地域的时间数据,并保证一致性。
会影响datetime字段使用utc时区
19. 启用或禁用本地化(l10n)支持
USE_L10N = True
启用后,Django 将根据用户的语言环境对日期、数字、格式等进行本地化处理。这能让格式适应不同地区习惯,而不需要手动格式化。
20.设置时区
TIME_ZONE = 'Asia/Shanghai'
作用:定义服务器和应用使用的时区。
意义:影响时间的显示和处理。Asia/Shanghai 表示中国标准时间(CST),与实际地理定位一致。

浙公网安备 33010602011771号