python框架Django实战商城项目之工程搭建

简介:

python框架Django实战商城项目之工程搭建
项目说明
该电商项目类似于京东商城,主要模块有验证、用户、第三方登录、首页广告、商品、购物车、订单、支付以及后台管理系统。
项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用jinja2模板引擎实现,局部刷新采用vue.js实现。

项目运行机制如下:

项目搭建
工程创建
项目使用码云进行源代码版本控制,在码云创建好后直接克隆到本地即可,然后在项目根目录下执行virtualenv venv创建虚拟环境,source venv/bin/activat激活虚拟环境后,安装django后,执行
django-admin startproject immortal_mall创建django工程。

配置开发环境
商城项目有两个环境,分别为测试环境和开发环境,django项目在创建完成后只有一个settings配置文件,但是两个环境需要两个配置文件,这里需要修改django获取配置文件的方式。新建settings包,再新建dev和pro两个配置文件,将默认生成的settings文件里面的内容拷贝至dev和pro文件里,结果如下

再在mange.py文件里指定开发环境需要的配置文件,生成环境的后面再说

配置jiaja2模板引擎
安装jinja2扩展包pip install jinja2,然后在dev文件中配置一下

这里有个注意的点,如果在运行的时候报错了,提示

这时是因为注释掉了django默认的模板配置,需要去掉注释,只添加新的版本引起即可。

配置mysql数据库
新建数据库
新建数据库
create database meiduo charset=utf8;
新建mysql用户
create user mall identified by '123456';
授权用户只能访问immortal_mall数据库
grant all on immortal_mall.* to 'mall'@'%';
刷新授权
flush privileges;
配置数据库
DATABASES = {

'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'immortal_mall',
    'HOST': '127.0.0.1',
    'USER': 'zhouyajun',
    'PASSWORD': '12345678',
    'PORT': '3306'
}

}
django默认使用的是mysqlclient工具,需要单独安装,这里用pymysql代替,在工程同名子目录的__init__.py文件中,写入下面代码

import pymysql
pymysql.install_as_MySQLdb()
在启动项目对的时候可能会报错,提示mysql

File "/Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
具体解决方式可以参考这里https://zhuanlan.zhihu.com/p/76920424

配置redis
商城采用redis作为缓存服务
pip install django-redis
这里是django-redis的使用文档https://django-redis-chs.readthedocs.io/zh_CN/latest/,在dev文件中配置redis

缓存配置
CACHES = {

"default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379/2",
    "OPTIONS": {
        "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
},
"session": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379/3",
    "OPTIONS": {
        "CLIENT_CLASS": "django_redis.client.DefaultClient",
    }
}

}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"
default是redis采用的默认配置,用的是2号数据库,session是redis保持保持状态的配置项,用的是3号数据库,

日志配置

日志配置

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/mall.log'),  # 日志文件的位置
        'maxBytes': 300 * 1024 * 1024,
        'backupCount': 10,
        'formatter': 'verbose'
    },
},
'loggers': {  # 日志器
    'django': {  # 定义了一个名为django的日志器
        'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
        'propagate': True,  # 是否继续传递日志信息
        'level': 'INFO',  # 日志器接收的最低日志级别
    },
}

}
这里需要在项目的根目录下手动创建logs文件,写日志的时候呢,我们希望能够自动分日期去写,每天的日志写到不同的文件里,这里可以使用python模块自带的TimedRotatingFileHandler,也可以自定义一个handler类去实现。
我这里呢自己实现了一个类叫做MallRotatingFileHandler
效果如下:

该类实现按月划分日志文件,自动按照当天日期命名日志文件,也可以定义文件容量。

配置前端静态文件
准备静态文件夹static

指定静态文件加载路径

指定加载静态恩建路由前缀

STATIC_URL = '/static/'

配置静态文件加载路径

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
运行项目,请求获取一张图片http://127.0.0.1:8989/static/images/adv01.jpg,成功获取表示配置正确。

最终项目各个目录展示成果:

原文地址https://www.cnblogs.com/zyjimmortalp/p/12448687.html

相关文章
|
11月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
749 0
|
11月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
770 1
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
363 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
11月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
801 0
|
11月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
466 0
|
12月前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
864 1
|
12月前
|
API 语音技术 开发者
Python 项目打包,并上传到 PyPI,分享项目
本文介绍了如何使用 Poetry 打包并发布一个 Python 项目至 PyPI。内容包括:项目创建、配置 `pyproject.toml` 文件、构建软件包、上传至 PyPI、安装与使用。通过实例 iGTTS 展示了从开发到发布的完整流程,帮助开发者快速分享自己的 Python 工具。
|
12月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
299 1
|
12月前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
410 0

推荐镜像

更多