python框架Django實戰商城專案之工程搭建過程圖文詳解
專案說明
該電商專案類似於京東商城,主要模組有驗證、使用者、第三方登入、首頁廣告、商品、購物車、訂單、支付以及後臺管理系統。專案開發模式採用前後端不分離的模式,為了提高搜尋引擎排名,頁面整體重新整理採用jinja2模板引擎實現,區域性重新整理採用vue.js實現。
專案執行機制如下:
專案搭建
工程建立
專案使用碼雲進行原始碼版本控制,在碼雲建立好後直接克隆到本地即可,然後在專案根目錄下執行virtualenv venv建立虛擬環境,source venv/bin/activat啟用虛擬環境後,安裝django後,執行 django-admin startproject immortal_mall
配置開發環境
商城專案有兩個環境,分別為測試環境和開發環境,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 <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作為快取服務
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",} } } 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,成功獲取表示配置正確。
最終專案各個目錄展示成果:
總結
到此這篇關於python框架Django實戰商城專案之工程搭建過程的文章就介紹到這了,更多相關python框架Django工程搭建內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!