Django 安裝及基本設置
Django簡介
官網:https://www.djangoproject.com
官方文檔:https://docs.djangoproject.com
Django安裝
- 測試環境:python3.6.3
- Django版本:2.1.7
- pip安裝:
pip install django
- 源碼安裝:
github地址:https://github.com/django/django/releases
下載完成後到解壓目錄執行:python setup install
- 獲取Django版本號:進入python運行環境,執行以下代碼:
import django
django.get_version()
Django任務命令行工具
-
Type 'django-admin help <subcommand>' for help on a specific subcommand. Available subcommands: [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate runserver sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).
-
manager.py是對django-amin的簡單封裝。
Type 'manage.py help <subcommand>' for help on a specific subcommand. Available subcommands: [auth] changepassword createsuperuser [contenttypes] remove_stale_contenttypes [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver [sessions] clearsessions [staticfiles] collectstatic findstatic runserver
Django項目創建
-
方法一:
工作目錄執行:
django-admin startproject mysite
mysite爲項目名稱,可任意命名- 目錄結構1:
工作目錄:
mysite: 根目錄
manage.py
mysite:__init__.py
settings.py
urls.py
wsgi.py -
方法二:
工作目錄執行:
django-admin startproject mysite .
區別在於方法一在項目外層會創建mysite命名的根目錄。- 目錄結構2:
工作目錄:
manage.py
mysite:__init__.py
settings.py
urls.py
wsgi.py -
結果測試:
根目錄執行: python manager.py runserver
根目錄下生成項目數據庫文件db.sqlite3
結果如下則表示成功:Performing system checks... System check identified no issues (0 silenced). You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. February 28, 2019 - 11:12:52 Django version 2.1.7, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
創建應用
Django中具體的功能組件稱爲‘應用’。
-
方法一:
工作目錄中執行
python manager.py startapp blog
創建名爲blog
的應用。 -
方法二:
工作目錄中執行
django-admin startapp blog
創建名爲blog
的應用。 -
目錄結構:
工作目錄:
mysite: 根目錄
blog: blog應用目錄
migrations: blog應用數據庫表結構
__init__.py
__init__.py
admin.py 註冊數據模型,自定義後臺管理功能等
apps.py blog應用配置,比如應用後臺命名等
models.py blog應用數據模型
tests.py 編寫測試文檔來測試所建立的應用
views.py 定義函數視圖或類視圖。mysite: mysite項目目錄
__init__.py
settings.py mysite項目初始化設置(包括數據庫,應用添加、中間件等)
urls.py mysite項目路由配置(視圖函數或應用的url.py文件的映射關係)
wsgi.py Web Server Gateway Interfacemanage.py 項目任務命令工具
db.sqlite3 使用SqlLite3本地數據庫時生成的默認數據庫文件,名稱可以在settings.py文件中定義
settings.py模塊
項目配置,如果不配置相關字段默認值在 django/conf/global_settings.py
python manage.py diffsettings
可以查看與默認配置的差異
-
BASE_DIR
項目根目錄
如何將多個應用放置到apps目錄下:
1. 在於manger.py同級目錄下創建apps文件夾。
2. 將已創建的應用文件剪切到apps目錄下。
3. 將apps目錄插入臨時環境變量路徑下:sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
。
4. pycharm中可以將apps目錄設置爲源碼路徑,右鍵->Make Director as -> Resource Root。 -
SECRET_KEY
用於安全加密、簽名等,不能爲空。
創建項目時生成,生成方式如下:\from django.core.management import utils utils.get_random_secret_key()
-
DEBUG
標記
開發模式
或生產環境
,值True | False
。 -
ALLOWED_HOSTS
允許訪問的域名或者IP,DEBUG爲True時可以爲空。
-
INSTALLED_APPS
應用註冊,創建的應用配置到這裏才能使用
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog',]
-
中間件
django請求/響應處理的鉤子框架,這是一個輕量級的插件系統,
用於在全球範圍內改變django的輸入或輸出。
django的中間件在settings的MIDDLEWARE列表中配置激活,
中間件有嚴格的依賴順序,按列表順序自上而下的執行。MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',]
-
在請求階段依次執行:
- process_request()
- process_view()
在響應階段依次執行:
- process_exception()
- process_template_response()
- process_response()
-
-
ROOT_URLCONF
在settings.py文件中通過ROOT_URLCONF指定根級url的配置。
ROOT_URLCONF = 'mysite.urls'
-
'APP_DIRS': True
, 按照app路徑下templates路徑搜索,
'APP_DIRS': False
, 按照DIRS
字段設置路徑搜索,
擴展:Django如何採用jinja2的模板引擎TEMPLATES = [{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'statics')], 'APP_DIRS': False, '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',], }, },]
-
Django不是完整的web後端框架,它需要和一個WSGI服務器配套,
由WSGI服務器負責網絡通訊部分, django依賴wsgi接口創建socket方法。
該項指向 mystie 項目目錄下wsgi.py的application方法。
WSGI_APPLICATION = 'mysite.wsgi.application'
-
此項配置數據庫引擎
django多數據庫聯用配置方式DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'OPTIONS': { 'timeout': 20, } }, }
-
配置密碼強度驗證方式
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
-
LANGUAGE_CODE
語言設置
英語:‘en-us’
中文簡體:‘zh-hans’
中文繁體:‘zh-hant’ -
TIME_ZONE
時區設置
世界時間:‘UTC’
中國時間:‘Asia/Shanghai’ -
Internationalization, I18N表示I與N之間有18個字母。
Django是否開啓國際化支持 -
USE_L10N
localization, L10N表示L與N之間有10個字母。
Django本地化支持 -
跨時區操作,時間強制轉換成UTC時間
國內服務可以設置爲False -
靜態文件路由
STATIC_URL = '/static/'
-
STATICFILES_DIRS
開發模式靜態文件存放路徑,
默認情況下靜態文件放置在每個應用的static
文件夾下,
如果我們需要將所有靜態文件都歸類到一個目錄,則需要如下配置:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'statics'), ]
-
STATIC_ROOT
生成環境靜態文件存放路徑
STATIC_ROOT = os.path.join(BASE_DIR, "all_statics")
在部署生成環境時運行python manage.py collectstatic
會把所有靜態文件匯聚到該路徑下。 -
MEDIA_URL
上傳文件路由
MEDIA_URL = '/media/'
-
用戶上傳目錄
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在FileField、ImageFIled等字段中指定upload_to
字段用於規定文件在MEDIA_ROOT
目錄下的位置。
命令回顧
-
創建Django項目
django-admin.py startproject project_name
-
創建應用
python manage.py startapp app_name
或django-admin.py startapp app_name
-
創建數據表
- 創建更改的文件
python manage.py makemigrations
- 將生成的py文件應用到數據庫
python manage.py migrate
- 創建更改的文件
-
清空數據表,刪除所有數據但保留數據表
python manage.py flush
-
數據庫導出,appname不指定則默認導出所有應用的數據庫
python manage.py dumpdata [ appname] > data.json
-
數據庫導入,不需要指定appname
python manage.py loaddata data.json
-
啓動開發服務器
-
一般模式,默認8000端口:
python manage.py runserver
-
當提示端口被佔用的時候,可以指定其他端口:
python manage.py runserver 8001
-
設置所有網絡可以訪問:
python manage.py runserver 0.0.0.0:8000
-
創建超管
python manage.py createsuperuser
-
修改用戶密碼
python manage.py changepassword username
-
-
進入django項目環境終端
開發過程中如果不清楚運行結果可以通過終端調試
python manage.py shell
-
進入數據庫shell環境
python manage.py dbshell