摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫此處使用號(hào)數(shù)據(jù)庫,在客戶端查看記得切換數(shù)據(jù)庫存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫。狀態(tài)保持的配置項(xiàng),采用號(hào)庫。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測試結(jié)果。
1.配置開發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過程中會(huì)有不同的環(huán)境,如開發(fā)環(huán)境、生產(chǎn)環(huán)境;所有不同的環(huán)境各自使用不同的配置顯得很重要。
開發(fā)環(huán)境:用于編寫和調(diào)試項(xiàng)目代碼。
生產(chǎn)環(huán)境:用于項(xiàng)目線上部署運(yùn)行。
準(zhǔn)備配置文件目錄
在項(xiàng)目同名目錄里名新建包,命名為settings,作為配置文件目錄
準(zhǔn)備開發(fā)和生產(chǎn)環(huán)境配置文件
在配置包settings中,新建開發(fā)環(huán)境配置文件
準(zhǔn)備開發(fā)環(huán)境配置內(nèi)容
將默認(rèn)的配置文件settings.py中內(nèi)容拷貝至setting包中,并命名為dev.py
在項(xiàng)目文件manage.py中做如下修改:
# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings") #默認(rèn)找setting.py,此處注釋掉
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meiduo_mall.settings.dev")
2.配置Jinja2模板引擎pip install Jinja2
Jinja2模板渲染速度比django默認(rèn)模板渲染速度要快很多。
在前面配置好的開發(fā)環(huán)境dev.py中加入如下代碼,后續(xù)配置不說明也默認(rèn)指在該文件中做修改。
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模板引擎環(huán)境
environment: 項(xiàng)目名.utils.jinja2_env.jinja2_environment, # 項(xiàng)目名修改為你項(xiàng)目的名字
},
},
]
在項(xiàng)目同名應(yīng)用中新建一個(gè)utils包,在包里新建一個(gè)jinja2_environment.py文件,文件里內(nèi)容如下:
from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
def jinja2_environment(**options):
env = Environment(**options)
env.globals.update({
static: staticfiles_storage.url, # 確保模板引擎中可以使用{{ url() }} {{ static() }}這類語句
url: reverse,
})
return env
此時(shí)你會(huì)發(fā)現(xiàn)django中的默認(rèn)站點(diǎn)admin已經(jīng)不能訪問了,我們要繼續(xù)使用django強(qiáng)大的后臺(tái)站點(diǎn)功能做如下修改:
TEMPLATES = [
{
# django 默認(rèn) template 模板配置
BACKEND: django.template.backends.django.DjangoTemplates,
DIRS: [os.path.join(BASE_DIR, templates)], # 此處配置要渲染的網(wǎng)頁目錄
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,
],
},
},
{
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模板引擎環(huán)境
environment: 項(xiàng)目名.utils.jinja2_env.jinja2_environment,
},
},
]
3 配置MySQL數(shù)據(jù)庫先確保你本地MySQL有所需要的數(shù)據(jù)庫名,然后進(jìn)行連接,下面語句進(jìn)入MySQL客戶端后可新建一個(gè)數(shù)據(jù)庫。
create database 數(shù)據(jù)庫名 charset=utf8;
默認(rèn)連接MySQL都是root用戶權(quán)限級(jí)別太高,擁有操作所有數(shù)據(jù)庫的權(quán)限,下面介紹MySQL新建用戶并賦予操作多帶帶一個(gè)數(shù)據(jù)庫的權(quán)限。
create user tom identified by 123456; --新建tom用戶,密碼123456
grant all on mall.* to tom@%; --授權(quán)tom用戶操作mall數(shù)據(jù)庫使用權(quán)限
flush privileges; --刷新權(quán)限
django默認(rèn)使用sqlite3數(shù)據(jù)庫,這是一個(gè)輕量級(jí)關(guān)系型數(shù)據(jù)庫,我們下面替換掉它,在dev.py中做如下配置:
DATABASES = {
default: {
ENGINE: django.db.backends.mysql, # 數(shù)據(jù)庫引擎
HOST: 127.0.0.1, # 數(shù)據(jù)庫主機(jī),填項(xiàng)目中數(shù)據(jù)庫真實(shí)ip
PORT: 3306, # 數(shù)據(jù)庫端口
USER: tom, # 數(shù)據(jù)庫用戶名
PASSWORD: 123456, # 數(shù)據(jù)庫用戶密碼
NAME: mall # 數(shù)據(jù)庫名字
},
}
pip install pymysql
在工程同名子目錄的__init__.py文件中,添加如下代碼:
from pymysql import install_as_MySQL
db??install_as_MySQLdb()
配置完成后:運(yùn)行程序,測試結(jié)果。
4.配置redis首先確保安裝了redis數(shù)據(jù)庫,然后在虛擬環(huán)境中安裝redis,同樣是通過pip安裝。安裝完以后還有安裝redis的django擴(kuò)展包django-redis。
pip install redis pip install django-redis
在dev.py中配置redis,此處用它來做session緩存。
CACHES = {
"default": { # 默認(rèn)
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0", # redis的ip,及使用它的0號(hào)數(shù)據(jù)庫
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": { # session
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1", # 此處使用1號(hào)數(shù)據(jù)庫,在客戶端查看記得select 1,切換數(shù)據(jù)庫
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache" # 存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫的方式讀寫快很多
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ù)。
配置完成后:運(yùn)行程序,測試結(jié)果。
關(guān)于對(duì)session緩存策略的說明:
存儲(chǔ)在本機(jī)內(nèi)存中,如果丟失則不能找回,比數(shù)據(jù)庫的方式讀寫更快。
SESSION_ENGINE=django.contrib.sessions.backends.cache
優(yōu)先從本機(jī)內(nèi)存中存取,如果沒有則從數(shù)據(jù)庫中存取。
SESSION_ENGINE=django.contrib.sessions.backends.cached_db
存儲(chǔ)在數(shù)據(jù)庫中,如下設(shè)置可以寫,也可以不寫。
SESSION_ENGINE=django.contrib.sessions.backends.db
5.配置項(xiàng)目日志下面介紹使用logging記錄項(xiàng)目的日志。在dev.py中做如下設(shè)置:
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/mall.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)目目錄中建立一個(gè)logs的目錄,然后在目錄中建立一個(gè)mall.log文件。名字可以任意起,記得很上面file中filename對(duì)應(yīng)起來即可。
當(dāng)然實(shí)際開發(fā)中大都是使用git來管理項(xiàng)目的,每個(gè)人調(diào)試產(chǎn)出的log不太一樣,開發(fā)中可以先將其加入忽略文件中。在項(xiàng)目文件.gitignioe中新增如下信息:
*.log
然后在logs目錄中建立一個(gè).gitkeep文件,保證logs目錄能被git管理。
6.配置前端靜態(tài)文件前面提了一下項(xiàng)目中的html模板文件是配置在templates中,需要在項(xiàng)目同名子應(yīng)用中建立一個(gè)templates目錄,項(xiàng)目中需要使用靜態(tài)文件,比如 css、images、js 等等,需要專門使用配置一個(gè)目錄。在里面建立不同的目錄來存放不同的文件。
STATIC_URL = /static/ # 靜態(tài)文件的路由?# 配置靜態(tài)文件加載路徑
STATICFILES_DIRS = [os.path.join(BASE_DIR, static)] # 在項(xiàng)目同名子引用中建立一個(gè)static目錄
STATICFILES_DIRS是一個(gè)列表,這樣我們就可以配置多個(gè)目錄來存放靜態(tài)文件。如:
# 配置靜態(tài)文件加載路徑
STATICFILES_DIRS = [os.path.join(BASE_DIR, static),os.path.join(BASE_DIR, static2)]
7.應(yīng)用注冊(cè)在項(xiàng)目同名目錄中,也就是setting包同級(jí)目錄中新建一個(gè)apps的包,然后進(jìn)入到apps的目錄中,在終端執(zhí)行如下命令,創(chuàng)建一個(gè)users應(yīng)用。
python ../../manage.py startapp users
然后在dev.py中注冊(cè)應(yīng)用:
INSTALLED_APPS = [
django.contrib.admin,
django.contrib.auth,
django.contrib.contenttypes,
django.contrib.sessions,
django.contrib.messages,
django.contrib.staticfiles,
# 注冊(cè)
mall.apps.users.apps.UsersConfig, # 用戶模塊應(yīng)用
]
下面介紹一下python中sys模塊,在dev.py的BASE_DIR下新增:
import sys
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, apps)) # 追加項(xiàng)目路徑
這樣注冊(cè)應(yīng)用就能簡化成如下方式了:
INSTALLED_APPS = [
django.contrib.admin,
django.contrib.auth,
django.contrib.contenttypes,
django.contrib.sessions,
django.contrib.messages,
django.contrib.staticfiles,
# 注冊(cè)
# mall.apps.users.apps.UsersConfig, # 用戶模塊應(yīng)用
users, # 用戶模塊應(yīng)用
]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/7182.html
摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫此處使用號(hào)數(shù)據(jù)庫,在客戶端查看記得切換數(shù)據(jù)庫存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫。狀態(tài)保持的配置項(xiàng),采用號(hào)庫。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測試結(jié)果。 1.配置開發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過程中會(huì)有不同的環(huán)境,如開發(fā)環(huán)境、生...
摘要:靜態(tài)資源路徑可以有多個(gè),所以這里使用一個(gè)列表進(jìn)行配置再次進(jìn)入,完美后記現(xiàn)在只涉及到了項(xiàng)目的配置和一些基礎(chǔ)的配置,沒有涉及到請(qǐng)求從開始到完成的任何內(nèi)容。下篇教程將集中進(jìn)行記錄。 前言 推薦使用 virtualenv 創(chuàng)建 python 虛擬環(huán)境,防止因?yàn)槭褂?pip 安裝依賴到全局引起版本沖突的問題,PyCharm 默認(rèn)會(huì)生成一個(gè) venv 目錄并創(chuàng)建虛擬環(huán)境,使用 IDE 自帶的終端...
摘要:一項(xiàng)目目錄結(jié)構(gòu)介紹與項(xiàng)目進(jìn)行交互的命令行工具集的入口項(xiàng)目管理器目錄項(xiàng)目容器,包含項(xiàng)目的基本配置,目錄名稱不建議修改中聲明模塊的文件,內(nèi)容默認(rèn)為空項(xiàng)目的總配置文件,包含數(shù)據(jù)庫應(yīng)用時(shí)間等各種配置配置文件,項(xiàng)目中所有地址頁面都需要我們自己去配置其 一、項(xiàng)目目錄結(jié)構(gòu)介紹 showImg(https://segmentfault.com/img/remote/1460000016373937?w...
閱讀 847·2023-04-25 19:43
閱讀 4115·2021-11-30 14:52
閱讀 3930·2021-11-30 14:52
閱讀 4027·2021-11-29 11:00
閱讀 3921·2021-11-29 11:00
閱讀 4039·2021-11-29 11:00
閱讀 3769·2021-11-29 11:00
閱讀 6606·2021-11-29 11:00