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),与实际地理定位一致。

posted @ 2021-10-11 10:30  零哭谷  阅读(64)  评论(0)    收藏  举报