首頁 > 軟體

python美多商城專案開發小結

2022-02-16 19:01:00

專案總覽

建立虛擬環境

mkvirtualenv meiduo_malls

建立專案

django-admin startproject meiduo_malls

pip install django

執行專案

python manage.py runserver [127.0.0.1:9000]

1.專案開發模式

選項技術選型
開發模式前後端不分離
後端框架Django + Jinja2模板引擎
前端框架Vue.js

說明:

前後端不分離的開發模式,是為了提高搜尋引擎排名,即SEO。特別是首頁,詳情頁和列表頁。
頁面需要整體重新整理:我們會選擇使用Jinja2模板引擎來實現。
頁面需要區域性重新整理:我們會選擇使用Vue.js來實現。

2. 專案執行機制

3. 知識要點

1.專案開發模式

  • 前後端不分離,方便SEO。
  • 採用Django + Jinja2模板引擎 + Vue.js實現前後端邏輯。

2.專案執行機制

  • 代理服務:Nginx伺服器(反向代理)
  • 靜態服務:Nginx伺服器(靜態首頁、商品詳情頁、...)
  • 動態服務:uwsgi伺服器(美多商場業務場景)
  • 後端服務:MySQL、Redis、Celery、RabbitMQ、Docker、FastDFS、Elasticsearch、Crontab
  • 外部介面:容聯雲、QQ互聯、支付寶

設定開發環境

美多商城專案的環境分為開發環境生產環境

開發環境:用於編寫和偵錯專案程式碼。
生產環境:用於專案線上部署執行。

1. 新建組態檔

        開發環境 主應用中新建setting包,dev.py,將原來的settings.py內容複製進去

        然後修改manage.py的預設開發環境改為dev

 生產環境

wsgi.py中修改預設生產環境prod

"""
WSGI config for meiduo_malls project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
 
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_malls.settings.prod')
application = get_wsgi_application()

2. 設定jinja2模板引擎

pip install Jinja2

修改組態檔中的模板設定

TEMPLATES = [
{
        'BACKEND': 'django.template.backends.jinja2.Jinja2',#設定jinja2
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            # 補充Jinja2模板引擎環境
            'environment': 'meiduo_malls.utils.jinja2_env.environment',
        },
    },
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
]

主應用中新增utils包 ->jinja2_env.py

from django.templatetags.static import static
from django.urls import reverse
 
from jinja2 import Environment
def environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': static,
        'url': reverse,
    })
    return env
"""
確保可以使用模板引擎中的{{ url('') }} {{ static('') }}這類語句 
在設定模板處設定使用
此設定資訊可在官網查詢複製

最後一步設定pycharm,模板語言由django 改為jinja2

 ssh root@82.157.143.241 連線linux

 3.設定mysql

使用寶塔安裝資料庫

想要實現遠端可以操控,騰訊雲防火牆中新增規則3306,寶塔中防火牆也要新增放行埠3306

1.新建MySQL資料庫:meiduo_mall

$ create database meiduo charset=utf8;

2.新建MySQL使用者

$ create user itheima identified by '123456';

3.授權itcast使用者存取meiduo_mall資料庫

$ grant all on meiduo.* to 'itheima'@'%';

4.授權結束後重新整理特權

$ flush privileges;

設定資料庫dev.py

# django資料遷移支援的MySQL5.6以上 Django框架生成的SQL語句不相容MySQL5.5
# 以下程式碼相容低版本MySQL
from django.db.backends.mysql.base import DatabaseWrapper
DatabaseWrapper.data_types['DateTimeField'] = 'datetime'
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 資料庫引擎
        'HOST': '82.157.143.241', # 資料庫主機
        'PORT': 3306, # 資料庫埠
        'USER': 'itheima', # 資料庫使用者名稱
        'PASSWORD': '123456', # 資料庫使用者密碼
        'NAME': 'meiduo' # 資料庫名字
        # 採用資料庫嚴格模式
        'OPTIONS': {
            'charset': 'utf8mb4',
            'autocommit': True,
            'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"',
        }
    }
}

安裝驅動

pip install PyMySQL

 工程的__init__.py中設定初始化

from pymysql import install_as_MySQLdb
install_as_MySQLdb()

4.設定redis

pip install django-redis

django-redis使用說明檔案

點選進入檔案

設定可以遠端存取 /etc/redis.conf

#bind 127.0.0.1  ip註釋掉

daemonize yes    後臺執行

requirepass zndroid   設定密碼

protected-mode no   保護模式設為no

遠端存取的話記得寶塔和騰訊雲都要放行6379埠

dos遠端連線redis-cli -h 82.157.143.241 -a zndroid

CACHES = {
    "default": { # 預設
        "BACKEND": "django_redis.cache.RedisCache",
        #"LOCATION": "redis://127.0.0.1:6379/0",
        "LOCATION": "redis://:zndroid@82.157.143.241:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": { # session
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://:zndroid@82.157.143.241:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

default:

  • 預設的Redis設定項,採用0號Redis庫。

session:

  • 狀態保持的Redis設定項,採用1號Redis庫。

SESSION_ENGINE

  • 修改session儲存機制使用Redis儲存。

SESSION_CACHE_ALIAS:

  • 使用名為"session"的Redis設定項儲存session資料

5.設定工程紀錄檔

組態檔dev.py中新增

# 設定工程紀錄檔
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/meiduo.log'),  # 紀錄檔檔案的位置
            'maxBytes': 300 * 1024 * 1024,
            'backupCount': 10,
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 紀錄檔器
        'django': {  # 定義了一個名為django的紀錄檔器
            'handlers': ['console', 'file'],  # 可以同時向終端與檔案中輸出紀錄檔
            'propagate': True,  # 是否繼續傳遞紀錄檔資訊
            'level': 'INFO',  # 紀錄檔器接收的最低紀錄檔級別
        },
    }
}

且需要在專案的根目錄中建立目錄logs 建立meiduo.log檔案和  .gitkeep檔案(git的時候保證空目錄也可以git過去)

此時git的時候logs資料夾是空目錄,預設Git是不允許提交一個空的目錄到版本庫上的

此時使用.gitkeep允許提交空目錄

使用方式

import logging
 
# 建立紀錄檔記錄器
logger = logging.getLogger('django')
# 輸出紀錄檔
logger.debug('測試logging模組debug')
logger.info('測試logging模組info')
logger.error('測試logging模組error')

 6.設定靜態資源dev.py

STATIC_URL = '/static/'
 
# 設定靜態檔案載入路徑
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

到此這篇關於python美多商城一的文章就介紹到這了,更多相關python美多商城內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com