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

项目说明

该电商项目类似于京东商城,主要模块有验证、用户、第三方登录、首页广告、商品、购物车、订单、支付以及后台管理系统。

项目开发模式采用前后端不分离的模式,为了提高搜索引擎排名,页面整体刷新采用jinja2模板引擎实现,局部刷新采用vue.js实现。

项目运行机制如下:

file

项目搭建

工程创建

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

django-admin startproject immortal_mall创建django工程。

配置开发环境

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

file

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

file

配置jiaja2模板引擎

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

file

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

file

这时是因为注释掉了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

效果如下:

file

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

配置前端静态文件

准备静态文件夹static

file

指定静态文件加载路径

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

STATIC_URL = '/static/'

配置静态文件加载路径

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

运行项目,请求获取一张图片http://127.0.0.1:8989/static/images/adv01.jpg,成功获取表示配置正确。

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

file

欢迎大家去 我的博客 瞅瞅,里面有更多关于测试实战的内容哦!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法之排序算法-shell排序(移位法)

个人觉得移位法就是借希尔排序进行分组,插入排序进行排序 注释是上一篇的交换法. 而且这种移位排序的真的很快 package com.ebiz.sort;import java.text.SimpleDateFormat; import java.util.Date;/*** author YHj* create 2019-07-30 8:53* shell排序-交换法*/ public class S…

[html] 页面布局时你使用最多的标签是什么?div吗?在什么情况下会使用到div?

[html] 页面布局时你使用最多的标签是什么&#xff1f;div吗&#xff1f;在什么情况下会使用到div&#xff1f; 页面的的整体布局使用<header> <main> <aside> <footer> 等。 一些细分的布局使用<div>&#xff0c;并指定适当的class、role和ari…

Effulgent的《深入理解Direct3D9》整理版(转)

深入理解Direct3D9 深入理解D3D9对图形程序员来说意义重大&#xff0c;我把以前的一些学习笔记都汇总起来&#xff0c;希望对朋友们有些所帮助&#xff0c;因为是零散笔记&#xff0c;思路很杂&#xff0c;还请包涵。 其实只要你能完美理解D3DLOCK、D3DUSAGE、D3DPOOL、LOST DE…

我的世界光影mod怎么用_玩转光影!闪光灯、反光板怎么用才高级?

光线对于拍摄的重要性不言而喻&#xff0c;有人甚至说&#xff1a;掌握了光线&#xff0c;你就掌握了摄影。今天我们就来谈谈摄影中和“光”关系最密切的两个器材&#xff1a;闪光灯、反光板。闪光灯的种类之前也跟大家介绍过闪光灯的种类&#xff0c;如果只说较为常用的&#…

https证书pfx 生成 pem,crt,key

(1)将.pfx格式的证书转换为.pem文件格式:openssl pkcs12 -in xxx.pfx -nodes -out server.pem(2)从.pem文件中导出私钥server.key&#xff1a;openssl rsa -in server.pem -out server.key(3)从.pem文件中导出证书server.crt openssl x509 -in server.pem -out server.crt转载…

sklearn所需要的知识点

NumPy NumPy&#xff08;Numerical Python的简称&#xff09;是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵&#xff0c;比Python自身的嵌套列表&#xff08;nested list structure&#xff09;结构要高效的多&#xff08;该结构也可以用来表示矩阵&am…

[html] 如何在网页中嵌入公司地址的地图?

[html] 如何在网页中嵌入公司地址的地图&#xff1f; <script srchttp://api.map.baidu.com/api?v2.0&akBG9Wtw7egUbIQHPjG9ayOLQO> </script> <script> (function(){ var map new BMap.Map("container"); //设置底图 map.centerAndZoom(&q…

sql游标以及异常处理

DECLARE emsgoutid UNIQUEIDENTIFIER ;DECLARE sendtime VARCHAR(20) ;DECLARE temptime DATETIME ;DECLARE sms_cursor CURSOR FORSELECT emsgoutid FROM dbo.emsg_out-- 打开游标OPEN sms_cursorFETCH NEXT FROM sms_cursorINTO emsgoutidWHILE FETCH_STATUS 0 BEGIN--tryBE…

正弦定理和余弦定理_那些让你加快解题速度的高中数学公式-26 利用三正弦、三余弦定理快速解题...

作者&#xff1a;本质教育 韦卓甫简单的题目做得又快又对对于任何考试&#xff08;例如高考&#xff09;&#xff0c;本质教育有一条重要的原则&#xff1a;那些考试拿高分的&#xff0c;一定是简单的题目做得又快又对&#xff0c;这样他们才有时间去思考难题。因此&#xff0c…

[html] 如何扩大CheckBox点击区域

[html] 如何扩大CheckBox点击区域 用 label 包裹&#xff0c;扩大 label 尺寸个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Centos7静态ip设置(亲测有效)

本文引自&#xff1a;https://www.cnblogs.com/toov5/p/10340395.html&#xff0c;特此鸣谢 最近想测试消息中间件等各类web集群相关技术&#xff0c;这就需要解决linux主机之间互联互通的若干问题&#xff0c;特此折腾 友情提示&#xff1a;在ubuntu19上用vmware15 搭建centos…

C++之整理一些最近看书的收获

1 short 只能修饰 int 。 2 long 只能修饰 int 和 double &#xff08;以及 long &#xff0c;比如 long long a ; 是 long long int a; 的简写&#xff09; 。 3 char 和 int 型数可以分别用 unsigned 和 signed 来修饰&#xff0c;表示带符号和不带符号。 4 实型数&#…

[html] DOM节点的种类有哪些?

[html] DOM节点的种类有哪些&#xff1f; 可以用node.nodeType来获取节点类型返回的是一个数字&#xff0c;1是元素节点&#xff0c;如div&#xff0c;3是文本节点&#xff0c;如div标签中的文字&#xff0c;8是注释节点&#xff0c;9是document节点&#xff0c;11是 Document…

python语句中对象未被定义_python 形参没有被定义???感觉遇到鬼了。。。

按照顺序&#xff0c;给没有key的参数赋值&#xff0c;意味着传递参数时&#xff0c;需按顺序匹配的参数必须出现在按key匹配的参数之前&#xff1b;给按照key匹配的参数赋值&#xff1b;将多余的按照顺序匹配但未匹配的参数值归入*name的tuple中&#xff1b;将多余未匹配上的按…

Silverlight 写了一个2D仿3D的柱状图表

技术上主要用了上一篇博客里关于自定义控件的绑定解决方案&#xff0c;然后就是在blend里做一些简单的颜色动画的调整。 先传个效果出来&#xff1a; 转载于:https://www.cnblogs.com/v-jing/archive/2011/12/01/2270918.html

认识Web.config文件

Web.config文件是一个XML文本文件&#xff0c;它用来储存 ASP.NET Web 应用程序的配置信息&#xff08;如最常用的设置ASP.NET Web 应用程序的身份验证方式&#xff09;&#xff0c;它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后&#xff0c;默认情…

labview在2048中添加时间滚动条_Chrome优化深色模式:滚动条颜色也能跟随变化 使上网更具沉浸感...

为了让谷歌浏览器的深色模式(Dark Mode)变得更加一致&#xff0c;谷歌在 Chrome 的滚动条中添加了对深色模式的支持。虽然我们很多人在上网过程中可能不太关注滚动条&#xff0c;但这毕竟是个可喜的变化&#xff0c;从而让 Chrome 的深色模式更具沉浸感。滚动条并不跟随网页浏览…

linux环境安装tomcat8,启动时,报not touch:/user/tomcat/tomcat8/logs/catalina.out:not a file or directory...

问题原因&#xff1a;我的jdk和tomcat都放在root目录下新建的user目录中&#xff0c;但是在配置JAVA_HOME时&#xff0c;路径没有配对。配置如下&#xff1a; export JAVA_HOME/user/jdk/jdk1.7.0_80 export JRE_HOME/user/jdk/jdk1.7.0_80/jre export CLASSPATH.:$JAVA_HOME/l…

中国软件20年,向金山和中国软件英雄致敬!

原文题目&#xff1a;中国软件20年&#xff0c;向金山和不能忘却的中国软件英雄致敬&#xff01; 12日&#xff0c;“中国软件20年&#xff0c;知识英雄再聚首”高峰论坛于在北京召开。此次活动原本是由金山软件发起组织&#xff0c;是金山20周年庆典活动的重要组成部分。但是活…

python prettytable_让python的print变得更好看——prettytable和colorama

【小宅按】python在输出信息的时候&#xff0c;通常会使用print&#xff0c;有没有方法可以美化一下输出的格式呢&#xff1f;这里介绍两个包&#xff1a;prettytablecolorama这两个包都不是Python的标准库&#xff0c;因此在使用之前&#xff0c;需要安装它们。pip install pr…