python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程圖文詳解
項(xiàng)目說明
該電商項(xiàng)目類似于京東商城,主要模塊有驗(yàn)證、用戶、第三方登錄、首頁廣告、商品、購物車、訂單、支付以及后臺(tái)管理系統(tǒng)。項(xiàng)目開發(fā)模式采用前后端不分離的模式,為了提高搜索引擎排名,頁面整體刷新采用jinja2模板引擎實(shí)現(xiàn),局部刷新采用vue.js實(shí)現(xiàn)。
項(xiàng)目運(yùn)行機(jī)制如下:
項(xiàng)目搭建
工程創(chuàng)建
項(xiàng)目使用碼云進(jìn)行源代碼版本控制,在碼云創(chuàng)建好后直接克隆到本地即可,然后在項(xiàng)目根目錄下執(zhí)行virtualenv venv創(chuàng)建虛擬環(huán)境,source venv/bin/activat激活虛擬環(huán)境后,安裝django后,執(zhí)行 django-admin startproject immortal_mall
創(chuàng)建django工程。
配置開發(fā)環(huán)境
商城項(xiàng)目有兩個(gè)環(huán)境,分別為測試環(huán)境和開發(fā)環(huán)境,django項(xiàng)目在創(chuàng)建完成后只有一個(gè)settings配置文件,但是兩個(gè)環(huán)境需要兩個(gè)配置文件,這里需要修改django獲取配置文件的方式。新建settings包,再新建dev和pro兩個(gè)配置文件,將默認(rèn)生成的settings文件里面的內(nèi)容拷貝至dev和pro文件里,結(jié)果如下
再在mange.py文件里指定開發(fā)環(huán)境需要的配置文件,生成環(huán)境的后面再說
配置jiaja2模板引擎
安裝jinja2擴(kuò)展包pip install jinja2,然后在dev文件中配置一下
這里有個(gè)注意的點(diǎn),如果在運(yùn)行的時(shí)候報(bào)錯(cuò)了,提示
這時(shí)是因?yàn)樽⑨尩袅薲jango默認(rèn)的模板配置,需要去掉注釋,只添加新的版本引起即可。
配置mysql數(shù)據(jù)庫
新建數(shù)據(jù)庫
新建數(shù)據(jù)庫
create database meiduo charset=utf8;
新建mysql用戶
create user mall identified by '123456';
授權(quán)用戶只能訪問immortal_mall數(shù)據(jù)庫
grant all on immortal_mall.* to 'mall'@'%';
刷新授權(quán)
flush privileges;
配置數(shù)據(jù)庫
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'immortal_mall', 'HOST': '127.0.0.1', 'USER': 'zhouyajun', 'PASSWORD': '12345678', 'PORT': '3306' } }
django默認(rèn)使用的是mysqlclient工具,需要單獨(dú)安裝,這里用pymysql代替,在工程同名子目錄的__init__.py文件中,寫入下面代碼
import pymysql pymysql.install_as_MySQLdb()
在啟動(dòng)項(xiàng)目對的時(shí)候可能會(huì)報(bào)錯(cuò),提示mysql
File "/Users/lixiang/.env/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 36, in <module> 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作為緩存服務(wù)
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采用的默認(rèn)配置,用的是2號數(shù)據(jù)庫,session是redis保持保持狀態(tài)的配置項(xiàng),用的是3號數(shù)據(jù)庫,
日志配置
# 日志配置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, # 是否禁用已經(jīng)存在的日志器 'formatters': { # 日志信息顯示的格式 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, 'filters': { # 對日志進(jìn)行過濾 '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': { # 定義了一個(gè)名為django的日志器 'handlers': ['console', 'file'], # 可以同時(shí)向終端與文件中輸出日志 'propagate': True, # 是否繼續(xù)傳遞日志信息 'level': 'INFO', # 日志器接收的最低日志級別 }, } }
這里需要在項(xiàng)目的根目錄下手動(dòng)創(chuàng)建logs文件,寫日志的時(shí)候呢,我們希望能夠自動(dòng)分日期去寫,每天的日志寫到不同的文件里,這里可以使用python模塊自帶的TimedRotatingFileHandler,也可以自定義一個(gè)handler類去實(shí)現(xiàn)。我這里呢自己實(shí)現(xiàn)了一個(gè)類叫做MallRotatingFileHandler 效果如下:
該類實(shí)現(xiàn)按月劃分日志文件,自動(dòng)按照當(dāng)天日期命名日志文件,也可以定義文件容量。
配置前端靜態(tài)文件準(zhǔn)備靜態(tài)文件夾static
指定靜態(tài)文件加載路徑
# 指定加載靜態(tài)恩建路由前綴 STATIC_URL = '/static/' # 配置靜態(tài)文件加載路徑 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
運(yùn)行項(xiàng)目,請求獲取一張圖片http://127.0.0.1:8989/static/images/adv01.jpg,成功獲取表示配置正確。
最終項(xiàng)目各個(gè)目錄展示成果:
總結(jié)
到此這篇關(guān)于python框架Django實(shí)戰(zhàn)商城項(xiàng)目之工程搭建過程的文章就介紹到這了,更多相關(guān)python框架Django工程搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python+selenium小米商城紅米K40手機(jī)自動(dòng)搶購的示例代碼
- python簡單商城購物車實(shí)例代碼
- Python 實(shí)現(xiàn)購物商城,含有用戶入口和商家入口的示例
- python爬蟲框架scrapy實(shí)戰(zhàn)之爬取京東商城進(jìn)階篇
- python爬蟲實(shí)戰(zhàn)之爬取京東商城實(shí)例教程
- python 實(shí)現(xiàn)網(wǎng)上商城,轉(zhuǎn)賬,存取款等功能的信用卡系統(tǒng)
- python實(shí)現(xiàn)簡單購物商城
- python抓取京東商城手機(jī)列表url實(shí)例代碼
- python實(shí)現(xiàn)淘寶購物系統(tǒng)
- Python實(shí)現(xiàn)購物系統(tǒng)(示例講解)
- Python實(shí)現(xiàn)信用卡系統(tǒng)(支持購物、轉(zhuǎn)賬、存取錢)
- 基于Python實(shí)現(xiàn)的購物商城管理系統(tǒng)
相關(guān)文章
LyScript實(shí)現(xiàn)對內(nèi)存堆棧掃描的方法詳解
LyScript插件中提供了三種基本的堆棧操作方法,其中push_stack用于入棧,pop_stack用于出棧,peek_stac可用于檢查指定堆棧位置處的內(nèi)存參數(shù)。所以本文將利用這一特性實(shí)現(xiàn)對內(nèi)存堆棧掃描,感興趣的可以了解一下2022-08-08Pytorch: 自定義網(wǎng)絡(luò)層實(shí)例
今天小編就為大家分享一篇Pytorch: 自定義網(wǎng)絡(luò)層實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python實(shí)現(xiàn)連接FTP并下載文件夾
這篇文章主要為大家介紹了如何利用Python實(shí)現(xiàn)鏈接FTP服務(wù)器,并下載相應(yīng)的文件夾,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03python利用joblib進(jìn)行并行數(shù)據(jù)處理的代碼示例
在數(shù)據(jù)量比較大的情況下,數(shù)據(jù)預(yù)處理有時(shí)候會(huì)非常耗費(fèi)時(shí)間,可以利用 joblib 中的 Parallel 和 delayed 進(jìn)行多CPU并行處理,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10