前言
系列文章目录
视频及资料和课件
链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234
提取码:1234
1. 远程代码仓库的准备
远程代码托管网站选择码云:https://gitee.com/
1.1 项目仓库的创建
1.2 项目仓库克隆到本地
1.3 使用pycharm打开项目仓库与远程仓库建立连接
使用pycharm打开从远程仓库克隆下来的项目,pycharm会自动与远程仓库建立连接。
1.4 配置忽略文件
在项目的根目录下新建 .gitignore 文件:
.gitignore 文件中的配置:
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* .classpath .project .settings target .idea *.iml
配置完成后,将 .gitignore 文件进行提交。
2. 创建美多商城项目
虚拟环境的安装
pip install virtualenv
2.1 创建虚拟环境
virtualenv -p python3 meiduo
激活进入虚拟环境
cd meiduo cd Scripts activate
2.2 创建项目
在仓库的根目录下创建项目
django-admin startproject meiduo_mall
2.3 项目试运行
# 进入到项目根目录 cd meiduo_mall # 运行项目 python manage.py runserver
2.4 pycharm配置运行项目
在 manage.py 文件下,右键运行,让pycharm自动配置项目的运行配置。
配置运行时命令
使用pycharm运行项目
2.5 提交新创建的项目
3. 配置开发环境
由于 manage.py 中第九行os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings')
默认的开发环境的配置文件为项目根目录下的 meiduo_mall/settings.py 文件。
所以,在项目根目录下的meiduo_mall目录下新建用于管理配置文件的包
将默认的开发环境的配置文件 settings.py 移动到新建的用于管理配置文件的包中,并修改文件名为 dev.py。
修改 manage.py 中引用开发环境配置文件的代码:
...... def main(): """Run administrative tasks.""" # 引用开发环境配置文件 # 引用的配置文件修改 settings 下的 dev.py os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings.dev') ......
4. 配置Jinja2模板引擎
4.1 安装 Jinja2
pip3 install jinjia2 -i https://pypi.tuna.tsinghua.edu.cn/simple
4.2 Jinja2模板引擎配置
dev.py
TEMPLATES = [ # 原先项目默认模板引擎配置 # { # 'BACKEND': 'django.template.backends.django.DjangoTemplates', # 'DIRS': [], # 'APP_DIRS': True, # 'OPTIONS': { # 'context_processors': [ # 'django.template.context_processors.debug', # 'django.template.context_processors.request', # 'django.contrib.auth.context_processors.auth', # 'django.contrib.messages.context_processors.messages', # ], # }, # }, # Jinja2模板引擎配置 { 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 配置Jinja2模板引擎 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
4.3 配置模板文件
项目根目录下与项目题目的文件夹中新建文件夹 templates:
将新建的文件夹变为模板文件夹:
在 dev.py 文件中配置模板文件加载路径:
# Jinja2模板引擎配置 { 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 配置Jinja2模板引擎 # BASE_DIR 指向项目根目录下的与项目同名的文件夹 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 配置模板文件加载目录 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },
4.4 补充 Jinja2 模板引擎环境
由于在Jinja2模板引擎中,读取静态文件和进行重定向较为麻烦,所以需要进行Jinja2 模板引擎环境的补充。通过补充Jinja2 模板引擎环境实现Jinja2自动查找静态文件的路径,我们只需写相对路径即可;实现url()能够解析路由的命名空间实现重定向。
在项目根目录下的与项目同名的文件夹中新建用于管理项目工具的包文件夹:
新建Jinja2模板引擎环境的补充文件:
在新创建的 jinja2_env.py 文件中补充 Jinja2 模板引擎的环境配置:
from jinja2 import Environment from django.contrib.staticfiles.storage import staticfiles_storage from django.urls import reverse def jinja2_environment(**options): """jinja2 环境""" # 创建环境对象 env = Environment(**options) # 自定义语法:{{ static('静态文件相对路径')}} {{ url('路由的命名空间')}} # 对全局的环境配置中 static url 对应的配置进行更新 # update中接收的参数为字典 env.globals.update({ 'static': staticfiles_storage.url, # 获取静态文件路径的前缀 'url': reverse, # 模板中能够使用url()识别路由的命名空间实现重定向(反向解析) }) # 返回环境对象 return env
在开发环境配置文件 dev.py 中模板引擎配置的OPTIONS配置项中引入Jinja2模板引擎环境配置的补充文件:
# Jinja2模板引擎配置 { 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 配置Jinja2模板引擎 # BASE_DIR 指向项目根目录下的与项目同名的文件夹 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 配置模板文件加载目录 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], # 补充 Jinja2 模板引擎环境 'environment': 'meiduo_mall.utils.jinja2_env.jinja2_environment', }, },
如果报错:
ERRORS: ?: (admin.E403) A 'django.template.backends.django.DjangoTemplates' instance must be configured in TEMPLATES in order to use the admin application.
将django的默认模板引擎配置添加在 jinja2 模板引擎的配置下(注意模板文件夹的路径):
# Jinja2模板引擎配置 { 'BACKEND': 'django.template.backends.jinja2.Jinja2', # 配置Jinja2模板引擎 # BASE_DIR 指向项目根目录下的与项目同名的文件夹 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 配置模板文件加载目录 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], # 补充 Jinja2 模板引擎环境 'environment': 'meiduo_mall.utils.jinja2_env.jinja2_environment', }, }, # Django 默认模板引擎 { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },
5. 配置MySQL数据库
5.1 新建数据库
# 新加数据库 CREATE DATABASE meiduo; # 新建用户用于操作 meiduo 数据库 CREATE USER meiduo_manager IDENTIFIED BY '123456'; # 将 meiduo 数据库所有表的权限授予用户 meiduo_manager GRANT ALL ON meiduo.* TO 'meiduo_manager'@'%'; # 刷新权限 FLUSH PRIVILEGES;
5.2 在项目中配置MySQL数据库
修改 dev.py 文件中的 DATABASES:
DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # 将使用的数据库修改为MySQL 'default': { 'ENGINE': 'django.db.backends.mysql', # 使用的数据库引擎修改MySQL 'HOST': '127.0.0.1', # mysql数据库所在的主机 'PORT': 3306, # mysql数据库监听的端口 'USER': 'meiduo_manager', # 登录数据库的用户名 'PASSWORD': '123456', # 登录数据库的密码 'NAME': 'meiduo', # 使用的数据库名 } }
5.3 安装配置PyMySQL
报错
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
项目的虚拟环境中缺少MySQL需要的驱动程序MySQLdb,在python2.x中使用的MySQL驱动程序为MySQLdb,而在python3.x中需要使用PyMySQL。也可能是由于django中默认的MySQL驱动程序为MySQLdb,我们没有将其修改为PyMySQL。
安装PyMySQL
pip install pymysql
使用 pymysql 替代 默认的 MySQLdb,在项目根目录下与项目同名的文件中的__init__.py 文件中添加如下代码:
from pymysql import install_as_MySQLdb install_as_MySQLdb()
报错:
RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
解决办法1:重启mysql服务
解决方法2:安装cryptography包
pip install cryptography
6. 配置Redis数据库
django 配置 redis 文档:django-redis 中文文档
6.1 安装 django-redis 包
pip install django-redis
6.2 配置Redis
在 dev.py 文件中配置 redis 数据库:
与DATABASES平级
# 配置redis数据库 CACHES = { "default": { # 默认使用的redis数据库 # 使用redis作为缓存 "BACKEND": "django_redis.cache.RedisCache", # redis 数据库所在的主机地址 端口号 选择第几个数据库 "LOCATION": "redis://127.0.0.1:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, # 分库存储不同的信息 # session 数据存在的redis数据库配置 "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, } # 配置session数据存储的redis数据库 SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session"
7. 配置工程日志
7.1 工程日志的配置
django 配置日志信息参考文档:https://docs.djangoproject.com/zh-hans/4.1/topics/logging/
在 dev.py 中添加工程日志的配置项:
# 配置工程日志 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(os.path.dirname(BASE_DIR), 'logs/meiduo.log'), # 日志文件的位置 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { # 日志器 'django': { # 定义了一个名为django的日志器 'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志 'propagate': True, # 是否继续传递日志信息 'level': 'INFO', # 日志器接收的最低日志级别 }, } }
新建文件夹用于保存日志信息:
运行项目访问项目网页会自动生成日志文件记录日志信息:
7.2 日志器的使用
手动输出日志信息
import logging # 创建日志记录器 logger = logging.getLogger('django') # 输出日志信息 logger.debug('日志信息') logger.info('日志信息') logger.error('日志信息')
7.3 Git 管理日志文件目录
需要Git忽略.log文件,但是希望Git能够管理logs日志文件目录,需要在git忽略文件中添加 *.log,同时在logs文件夹中新建 .gitkeep 文件,因为如果空文件夹中有 .gitkeep 文件,git会管理这个空文件夹而不是忽略。
git没有忽略logs文件夹,而日志文件被忽略。
8. 配置静态文件
在项目根目录下与项目同名的文件夹下新建用于存放静态文件的文件夹 static。
配置静态文件的加载路径:
告诉django从哪里获取静态文件
STATIC_URL = 'static/' # 配置静态文件的加载路径 # 告诉django静态文件存放在BASE_DIR下的static文件夹中 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
由于 dev.py 配置文件中 STATIC_URL = 'static/'
,所以访问静态资源需要通过http://ip地址:端口号/static/静态资源路径
进行静态资源的访问。