天天看點

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