[Python]美多商城项目工程的创建与配置

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生内存数据库 Tair,内存型 2GB
简介: [Python]美多商城项目工程的创建与配置

前言

系列文章目录

[Python]目录

视频及资料和课件

链接: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/静态资源路径进行静态资源的访问。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
安全 编译器 开发者
Python语言的配置解释器
Python语言的配置解释器
|
2月前
|
Python
新手向 Python:VsCode环境下Manim配置
该文介绍了如何准备和配置开发环境以使用Manim,主要包括两个步骤:一是准备工作,需要下载并安装VsCode和Anaconda,其中Anaconda需添加到系统PATH环境变量,并通过清华镜像源配置;二是配置环境,VsCode中安装中文插件和Python扩展,激活并配置虚拟环境。最后,安装ffmpeg和manim,通过VsCode运行测试代码验证配置成功。
54 1
|
9天前
|
Python
pycharm配置本地python
pycharm配置本地python
27 1
|
9天前
|
Python
Pycharm为Python项目配置环境不生效,解决办法
在PyCharm中,项目依赖配置更改后未生效。解决步骤包括:1) 查找`C:\Users\username\AppData\Roaming\JetBrains\PyCharm2022.2\options\jdk.table.xml`,2) 删除`<jdk></jdk>`标签内的旧配置内容,然后重启PyCharm以应用新目录。
17 0
Pycharm为Python项目配置环境不生效,解决办法
|
19天前
|
存储 IDE Linux
Python零基础入门-0 Python简介和开发环境PyCharm配置
Python零基础入门-0 Python简介和开发环境PyCharm配置
|
2月前
|
前端开发 Unix Linux
Sublime Text 3配置 Python 开发环境
【5月更文挑战第7天】本篇 Huazie 介绍了 Sublime Text 3 配置 Python 开发环境的相关内容,感兴趣的朋友赶紧配置起来,有任何问题可以随时评论区沟通。
44 1
Sublime Text 3配置 Python 开发环境
|
27天前
|
Python 容器
GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
当下是 Python 急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格,并解释了背后的原理和机制。
|
2月前
|
Python 容器
GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
当下是 Python 急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格,并解释了背后的原理和机制。 入门 Python 语言相对简单,但写出优雅的代码并非易事。这份手册深入讲解了 Python进阶知识的方方面面,并配以许多有趣的案例故事,使读者能更轻松地理解各种原理,并更好地将其运用于日常工作。
|
2月前
|
Python 容器
GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
当下是 Python 急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了 Python 代码应该遵循的编程风格,并解释了背后的原理和机制。
|
2月前
|
网络协议 程序员 网络架构
最全OSPF路由协议基础(OSPF基本配置),2024年最新Python高级面试
最全OSPF路由协议基础(OSPF基本配置),2024年最新Python高级面试
最全OSPF路由协议基础(OSPF基本配置),2024年最新Python高级面试