当前位置: 首页 > 后端技术 > Python

Python框架Django实战商城项目搭建

时间:2023-03-26 12:16:17 Python

项目描述本电商项目类似京东商城,主要模块包括鉴权、用户、第三方登录、首页广告、商品、购物车、订单、支付、后台管理系统。项目开发模式采用前后端不分离的模式。为了提高搜索引擎排名,页面的整体刷新采用jinja2模板引擎实现,局部刷新采用vue.js实现。项目运行机制为:构建项目,创建项目使用码云进行源码版本控制。码云创建好后可以直接clone到本地,然后在项目根目录下执行virtualenvvenv创建虚拟环境,sourcevenv/bin/activat激活虚拟环境并安装django后,执行django-adminstartprojectimmortal_mall创建一个django项目。配置开发环境商城项目有两个环境,分别是测试环境和开发环境。django项目创建后只有一个settings配置文件,但是两个环境需要两个配置文件。这里需要修改django获取配置文件的方式。新建一个设置包,然后创建两个配置文件dev和pro,将默认生成的设置文件内容复制到dev和pro文件中,结果如下,然后在mange.py文件生成环境之后我们说配置jiaja2模板引擎安装jinja2扩展包pipinstalljinja2,然后在dev文件中进行配置。这里有一点需要注意。如果运行时报错,提示是因为django默认的模板配置被注释掉了,注释需要去掉,只能添加新版本。配置mysql数据库,新建数据库,新建数据库createdatabasemeiduocharset=utf8;创建一个新的mysql用户createusermallidentifiedby'123456';授权用户只能访问immortal_mall数据库grantallonimmortal_mall.*to'mall'@'%';刷新授权刷新权限;配置数据库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文件中,写入如下代码importpymysqlpymysql.install_as_MySQLdb()启动项目可能会报错,提示mysqlFile"/Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/base.py”,第36行,在raiseImproperlyConfigured('mysqlclient1.3.13ornewerisrequired;youhave%s.'%Database.__version__)django.core.exceptions.ImproperlyConfigured:需要mysqlclient1.3.13或更新版本;你有0.9.3。具体解决方案参考https://zhuanlan.zhihu.com/p/...配置redis商城使用redis作为缓存服务pipinstalldjango-redis这里是django-redis的使用文档https://django-redis-chs.read...,在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":{“后端”:“django_redis.cache.RedisCache”,“位置”:“redis://127.0.0.1:6379/3”,“选项”:{“CLIENT_CLASS”:“django_redis.client.DefaultClient”,}}}SESSION_ENGINE="django.contrib.sessions.backends.cache"SESSION_CACHE_ALIAS="session"default是redis采用的默认配置,使用2号数据库,session是redis保持状态的配置项,使用1号。3数据库、日志配置#日志配置LOGGING={'version':1,'disable_existing_loggers':False,#是否禁用已有的logger'formatters':{#日志信息显示格式'verbose':{'format':'%(关卡名称)s%(asctime)s%(module)s%(lineno)d%(message)s'},'simple':{'format':'%(levelname)s%(module)s%(lineno)d%(message)s'},},'filters':{#过滤日志'require_debug_true':{#Django只在调试模式下输出日志'()':'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':{#logger'django':{#定义一个名为django的记录器'handlers':['console','file'],#可以将日志输出到终端和fileatthetime'propagate':True,#是否继续传输日志信息'level':'INFO',#logger接收到的最低日志级别},}}这里需要在项目根目录手动创建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,获取成功说明配置正确。最终工程各目录结果展示:欢迎来到我的博客,更多实测内容!!