摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫(kù)此處使用號(hào)數(shù)據(jù)庫(kù),在客戶端查看記得切換數(shù)據(jù)庫(kù)存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫(kù)。狀態(tài)保持的配置項(xiàng),采用號(hào)庫(kù)。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測(cè)試結(jié)果。
1.配置開發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過(guò)django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過(guò)程中會(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ù)配置不說(shuō)明也默認(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("") }}這類語(yǔ)句
"url": reverse,
})
return env
此時(shí)你會(huì)發(fā)現(xiàn)django中的默認(rèn)站點(diǎn)admin已經(jīng)不能訪問(wèn)了,我們要繼續(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)頁(yè)目錄
"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ù)庫(kù)先確保你本地MySQL有所需要的數(shù)據(jù)庫(kù)名,然后進(jìn)行連接,下面語(yǔ)句進(jìn)入MySQL客戶端后可新建一個(gè)數(shù)據(jù)庫(kù)。
create database 數(shù)據(jù)庫(kù)名 charset=utf8;
默認(rèn)連接MySQL都是root用戶權(quán)限級(jí)別太高,擁有操作所有數(shù)據(jù)庫(kù)的權(quán)限,下面介紹MySQL新建用戶并賦予操作多帶帶一個(gè)數(shù)據(jù)庫(kù)的權(quán)限。
create user tom identified by "123456"; --新建tom用戶,密碼123456
grant all on mall.* to "tom"@"%"; --授權(quán)tom用戶操作mall數(shù)據(jù)庫(kù)使用權(quán)限
flush privileges; --刷新權(quán)限
django默認(rèn)使用sqlite3數(shù)據(jù)庫(kù),這是一個(gè)輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù),我們下面替換掉它,在dev.py中做如下配置:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql", # 數(shù)據(jù)庫(kù)引擎
"HOST": "127.0.0.1", # 數(shù)據(jù)庫(kù)主機(jī),填項(xiàng)目中數(shù)據(jù)庫(kù)真實(shí)ip
"PORT": 3306, # 數(shù)據(jù)庫(kù)端口
"USER": "tom", # 數(shù)據(jù)庫(kù)用戶名
"PASSWORD": "123456", # 數(shù)據(jù)庫(kù)用戶密碼
"NAME": "mall" # 數(shù)據(jù)庫(kù)名字
},
}
pip install pymysql
在工程同名子目錄的__init__.py文件中,添加如下代碼:
from pymysql import install_as_MySQL
db??install_as_MySQLdb()
配置完成后:運(yùn)行程序,測(cè)試結(jié)果。
4.配置redis首先確保安裝了redis數(shù)據(jù)庫(kù),然后在虛擬環(huán)境中安裝redis,同樣是通過(guò)pip安裝。安裝完以后還有安裝redis的django擴(kuò)展包django-redis。
pip install redis pip install django-redis
在dev.py中配置redis,此處用它來(lái)做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ù)庫(kù)
"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ù)庫(kù),在客戶端查看記得select 1,切換數(shù)據(jù)庫(kù)
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache" # 存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多
SESSION_CACHE_ALIAS = "session"
default:
默認(rèn)的Redis配置項(xiàng),采用0號(hào)Redis庫(kù)。
session:
狀態(tài)保持的Redis配置項(xiàng),采用1號(hào)Redis庫(kù)。
SESSION_ENGINE
修改session存儲(chǔ)機(jī)制使用Redis保存。
SESSION_CACHE_ALIAS:
使用名為"session"的Redis配置項(xiàng)存儲(chǔ)session數(shù)據(jù)。
配置完成后:運(yùn)行程序,測(cè)試結(jié)果。
關(guān)于對(duì)session緩存策略的說(shuō)明:
存儲(chǔ)在本機(jī)內(nèi)存中,如果丟失則不能找回,比數(shù)據(jù)庫(kù)的方式讀寫更快。
SESSION_ENGINE="django.contrib.sessions.backends.cache"
優(yōu)先從本機(jī)內(nèi)存中存取,如果沒(méi)有則從數(shù)據(jù)庫(kù)中存取。
SESSION_ENGINE="django.contrib.sessions.backends.cached_db"
存儲(chǔ)在數(shù)據(jù)庫(kù)中,如下設(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)行過(guò)濾
"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)起來(lái)即可。
當(dāng)然實(shí)際開發(fā)中大都是使用git來(lái)管理項(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è)目錄。在里面建立不同的目錄來(lái)存放不同的文件。
STATIC_URL = "/static/" # 靜態(tài)文件的路由?# 配置靜態(tài)文件加載路徑
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")] # 在項(xiàng)目同名子引用中建立一個(gè)static目錄
STATICFILES_DIRS是一個(gè)列表,這樣我們就可以配置多個(gè)目錄來(lái)存放靜態(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)用就能簡(jiǎn)化成如下方式了:
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.specialneedsforspecialkids.com/yun/7031.html
摘要:默認(rèn)的,及使用它的號(hào)數(shù)據(jù)庫(kù)此處使用號(hào)數(shù)據(jù)庫(kù),在客戶端查看記得切換數(shù)據(jù)庫(kù)存儲(chǔ)在本機(jī)內(nèi)存中,比數(shù)據(jù)庫(kù)的方式讀寫快很多默認(rèn)的配置項(xiàng),采用號(hào)庫(kù)。狀態(tài)保持的配置項(xiàng),采用號(hào)庫(kù)。使用名為的配置項(xiàng)存儲(chǔ)數(shù)據(jù)。配置完成后運(yùn)行程序,測(cè)試結(jié)果。 1.配置開發(fā)環(huán)境當(dāng)進(jìn)入虛擬環(huán)境,通過(guò)django_admin創(chuàng)建一個(gè)項(xiàng)目后,會(huì)在項(xiàng)目同名目錄生成一個(gè)setting.py文件。而實(shí)際項(xiàng)目過(guò)程中會(huì)有不同的環(huán)境,如開發(fā)環(huán)境、生...
摘要:靜態(tài)資源路徑可以有多個(gè),所以這里使用一個(gè)列表進(jìn)行配置再次進(jìn)入,完美后記現(xiàn)在只涉及到了項(xiàng)目的配置和一些基礎(chǔ)的配置,沒(méi)有涉及到請(qǐng)求從開始到完成的任何內(nèi)容。下篇教程將集中進(jìn)行記錄。 前言 推薦使用 virtualenv 創(chuàng)建 python 虛擬環(huán)境,防止因?yàn)槭褂?pip 安裝依賴到全局引起版本沖突的問(wèn)題,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ù)庫(kù)應(yīng)用時(shí)間等各種配置配置文件,項(xiàng)目中所有地址頁(yè)面都需要我們自己去配置其 一、項(xiàng)目目錄結(jié)構(gòu)介紹 showImg(https://segmentfault.com/img/remote/1460000016373937?w...
閱讀 2297·2021-10-09 09:41
閱讀 1751·2019-08-30 15:53
閱讀 994·2019-08-30 15:52
閱讀 3449·2019-08-30 11:26
閱讀 775·2019-08-29 16:09
閱讀 3431·2019-08-29 13:25
閱讀 2266·2019-08-26 16:45
閱讀 1938·2019-08-26 11:51