python美多商城項(xiàng)目開發(fā)小結(jié)
項(xiàng)目總覽
創(chuàng)建虛擬環(huán)境
mkvirtualenv meiduo_malls
創(chuàng)建項(xiàng)目
django-admin startproject meiduo_malls
pip install django
運(yùn)行項(xiàng)目
python manage.py runserver [127.0.0.1:9000]
1.項(xiàng)目開發(fā)模式
選項(xiàng) | 技術(shù)選型 |
---|---|
開發(fā)模式 | 前后端不分離 |
后端框架 | Django + Jinja2模板引擎 |
前端框架 | Vue.js |
說明:
前后端不分離的開發(fā)模式,是為了提高搜索引擎排名,即SEO。特別是首頁,詳情頁和列表頁。
頁面需要整體刷新:我們會(huì)選擇使用Jinja2模板引擎來實(shí)現(xiàn)。
頁面需要局部刷新:我們會(huì)選擇使用Vue.js來實(shí)現(xiàn)。
2. 項(xiàng)目運(yùn)行機(jī)制
3. 知識(shí)要點(diǎn)
1.項(xiàng)目開發(fā)模式
- 前后端不分離,方便SEO。
- 采用Django + Jinja2模板引擎 + Vue.js實(shí)現(xiàn)前后端邏輯。
2.項(xiàng)目運(yùn)行機(jī)制
- 代理服務(wù):Nginx服務(wù)器(反向代理)
- 靜態(tài)服務(wù):Nginx服務(wù)器(靜態(tài)首頁、商品詳情頁、...)
- 動(dòng)態(tài)服務(wù):uwsgi服務(wù)器(美多商場業(yè)務(wù)場景)
- 后端服務(wù):MySQL、Redis、Celery、RabbitMQ、Docker、FastDFS、Elasticsearch、Crontab
- 外部接口:容聯(lián)云、QQ互聯(lián)、支付寶
配置開發(fā)環(huán)境
美多商城項(xiàng)目的環(huán)境分為
開發(fā)環(huán)境:用于編寫和調(diào)試項(xiàng)目代碼。開發(fā)環(huán)境
和生產(chǎn)環(huán)境
。
生產(chǎn)環(huán)境:用于項(xiàng)目線上部署運(yùn)行。
1. 新建配置文件
開發(fā)環(huán)境 主應(yīng)用中新建setting包,dev.py,將原來的settings.py內(nèi)容復(fù)制進(jìn)去
然后修改manage.py的默認(rèn)開發(fā)環(huán)境改為dev
生產(chǎn)環(huán)境
wsgi.py中修改默認(rèn)生產(chǎn)環(huán)境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', ], # 補(bǔ)充Jinja2模板引擎環(huán)境 'environment': 'meiduo_malls.utils.jinja2_env.environment', }, }, { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], ]
主應(yīng)用中添加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 """ 確??梢允褂媚0逡嬷械膡{ url('') }} {{ static('') }}這類語句 在配置模板處配置使用 此配置信息可在官網(wǎng)查找復(fù)制
最后一步配置pycharm,模板語言由django 改為jinja2
ssh root@82.157.143.241 連接linux
3.配置mysql
使用寶塔安裝數(shù)據(jù)庫
想要實(shí)現(xiàn)遠(yuǎn)程可以操控,騰訊云防火墻中添加規(guī)則3306,寶塔中防火墻也要添加放行端口3306
1.新建MySQL數(shù)據(jù)庫:meiduo_mall
$ create database meiduo charset=utf8;
2.新建MySQL用戶
$ create user itheima identified by '123456';
3.授權(quán)
itcast
用戶訪問meiduo_mall
數(shù)據(jù)庫
$ grant all on meiduo.* to 'itheima'@'%';
4.授權(quán)結(jié)束后刷新特權(quán)
$ flush privileges;
配置數(shù)據(jù)庫dev.py
# django數(shù)據(jù)遷移支持的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', # 數(shù)據(jù)庫引擎 'HOST': '82.157.143.241', # 數(shù)據(jù)庫主機(jī) 'PORT': 3306, # 數(shù)據(jù)庫端口 'USER': 'itheima', # 數(shù)據(jù)庫用戶名 'PASSWORD': '123456', # 數(shù)據(jù)庫用戶密碼 'NAME': 'meiduo' # 數(shù)據(jù)庫名字 # 采用數(shù)據(jù)庫嚴(yán)格模式 'OPTIONS': { 'charset': 'utf8mb4', 'autocommit': True, 'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"', } } }
安裝驅(qū)動(dòng)
pip install PyMySQL
工程的__init__.py中配置初始化
from pymysql import install_as_MySQLdb install_as_MySQLdb()
4.配置redis
pip install django-redis
django-redis使用說明文檔
配置可以遠(yuǎn)程訪問 /etc/redis.conf
#bind 127.0.0.1 ip注釋掉
daemonize yes 后臺(tái)運(yùn)行
requirepass zndroid 設(shè)置密碼
protected-mode no 保護(hù)模式設(shè)為no
遠(yuǎn)程訪問的話記得寶塔和騰訊云都要放行6379端口
dos遠(yuǎn)程連接redis-cli -h 82.157.143.241 -a zndroid
CACHES = { "default": { # 默認(rèn) "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:
- 默認(rèn)的Redis配置項(xiàng),采用0號(hào)Redis庫。
session:
- 狀態(tài)保持的Redis配置項(xiàng),采用1號(hào)Redis庫。
SESSION_ENGINE
- 修改
session存儲(chǔ)機(jī)制
使用Redis保存。
SESSION_CACHE_ALIAS:
- 使用名為"session"的Redis配置項(xiàng)存儲(chǔ)
session數(shù)據(jù)
。
5.配置工程日志
配置文件dev.py中添加
# 配置工程日志 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': { # 對(duì)日志進(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/meiduo.log'), # 日志文件的位置 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { # 日志器 'django': { # 定義了一個(gè)名為django的日志器 'handlers': ['console', 'file'], # 可以同時(shí)向終端與文件中輸出日志 'propagate': True, # 是否繼續(xù)傳遞日志信息 'level': 'INFO', # 日志器接收的最低日志級(jí)別 }, } }
且需要在項(xiàng)目的根目錄中創(chuàng)建目錄logs 創(chuàng)建meiduo.log文件和 .gitkeep文件(git的時(shí)候保證空目錄也可以git過去)
此時(shí)git的時(shí)候logs文件夾是空目錄,默認(rèn)Git是不允許提交一個(gè)空的目錄到版本庫上的
此時(shí)使用.gitkeep允許提交空目錄
使用方式
import logging # 創(chuàng)建日志記錄器 logger = logging.getLogger('django') # 輸出日志 logger.debug('測試logging模塊debug') logger.info('測試logging模塊info') logger.error('測試logging模塊error')
6.配置靜態(tài)資源dev.py
STATIC_URL = '/static/' # 配置靜態(tài)文件加載路徑 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
到此這篇關(guān)于python美多商城一的文章就介紹到這了,更多相關(guān)python美多商城內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)顏色空間轉(zhuǎn)換程序(Tkinter)
這篇文章主要介紹了基于Tkinter利用python實(shí)現(xiàn)顏色空間轉(zhuǎn)換程序,感興趣的小伙伴們可以參考一下2015-12-12Python字符串編碼轉(zhuǎn)換 encode()和decode()方法詳細(xì)說明
這篇文章主要介紹了Python字符串編碼轉(zhuǎn)換 encode()和decode()方法詳細(xì)的說明,下面文章圍繞encode()和decode()方法的相相關(guān)資料展開內(nèi)容,具有一定的價(jià)值,需要的朋友卡通參考一下2021-12-12詳解Python的Django框架中manage命令的使用與擴(kuò)展
這篇文章主要介紹了Python的Django框架中manage命令的使用與擴(kuò)展,manage.py使得用戶借助manage命令在命令行中能實(shí)現(xiàn)諸多簡便的操作,需要的朋友可以參考下2016-04-04[機(jī)器視覺]使用python自動(dòng)識(shí)別驗(yàn)證碼詳解
這篇文章主要介紹了python自動(dòng)識(shí)別驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05調(diào)試Django時(shí)打印SQL語句的日志代碼實(shí)例
這篇文章主要介紹了調(diào)試Django時(shí)打印SQL語句的日志代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09python3 動(dòng)態(tài)模塊導(dǎo)入與全局變量使用實(shí)例
今天小編就為大家分享一篇python3 動(dòng)態(tài)模塊導(dǎo)入與全局變量使用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12