相關文檔
1、為新網站創建一個文件夾(這里是:locallibrary)
D:\django>mkdir locallibraryD:\django>cd locallibraryD:\django\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\django\locallibrary2024/05/14 22:51 <DIR> .
2024/05/14 22:51 <DIR> ..0 File(s) 0 bytes2 Dir(s) 240,186,916,864 bytes free
2、使用 django-admin 工具創建工程的文件夾
基本的文件模板和工程管理腳本(manage.py)
用manage.py 創建一個或多個應用
在工程里注冊新的應用。
為每個應用分配 url
為 locallibrary 這個項目創建的網站文件夾和它的工程文件夾都命名為locallibrary,我們只創建一個名為catalog的應用
用django-admin startproject命令創建新項目,并進入該文件夾
D:\django>cd locallibraryD:\django\locallibrary>django-admin startproject locallibraryD:\django\locallibrary>cd locallibrary
django-admin工具創建如下所示文件夾結構
D:\django\locallibrary\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\django\locallibrary\locallibrary2024/05/14 22:52 <DIR> .
2024/05/14 22:52 <DIR> ..
2024/05/14 22:52 <DIR> locallibrary
2024/05/14 22:52 690 manage.py1 File(s) 690 bytes3 Dir(s) 240,186,908,672 bytes freeD:\django\locallibrary\locallibrary>dir locallibraryVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\django\locallibrary\locallibrary\locallibrary2024/05/14 22:52 <DIR> .
2024/05/14 22:52 <DIR> ..
2024/05/14 22:52 417 asgi.py
2024/05/14 22:52 3,362 settings.py
2024/05/14 22:52 790 urls.py
2024/05/14 22:52 417 wsgi.py
2024/05/14 22:52 0 __init__.py5 File(s) 4,986 bytes2 Dir(s) 240,186,908,672 bytes free
locallibrary 項目的子文件夾是整個網站的進入點:
settings.py:包含所有的網站設置。這是可以注冊所有創建的應用的地方,也是靜態文件,數據庫配置的地方,等等。
urls.py:定義了網站 url 到 view 的映射。雖然這里可以包含所有的 url,但是更常見的做法是把應用相關的 url 包含在相關應用中,你可以在接下來的教程里看到。
wsgi.py:幫助 Django 應用和網絡服務器間的通訊。你可以把這個當作模板。
manage.py:腳本可以創建應用,和數據庫通訊,啟動開發用網絡服務器。
3、在 locallibrary 項目里,使用下面的命令創建 catalog 應用(和你項目的manage.py在同一個文件夾下)
D:\django\locallibrary\locallibrary>python manage.py startapp catalogD:\django\locallibrary\locallibrary>dirVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\django\locallibrary\locallibrary2024/05/14 22:54 <DIR> .
2024/05/14 22:52 <DIR> ..
2024/05/14 22:54 <DIR> catalog
2024/05/14 22:54 <DIR> locallibrary
2024/05/14 22:52 690 manage.py1 File(s) 690 bytes4 Dir(s) 240,186,900,480 bytes free
這個工具創建了一個新的文件夾,并為該應用創建了不同的文件。絕大多數文件的命令和它們的目的有關(比如視圖函數就是views.py,模型就是models.py,測試是tests.py,網站管理設置是admin.py,注冊應用是apps.py),并且還包含了為項目所用的最小模板。
執行命令后的文件夾結構如下所示
D:\django\locallibrary\locallibrary>dir catalogVolume in drive D is 新加卷Volume Serial Number is B68C-03F7Directory of D:\django\locallibrary\locallibrary\catalog2024/05/14 22:54 <DIR> .
2024/05/14 22:54 <DIR> ..
2024/05/14 22:54 66 admin.py
2024/05/14 22:54 152 apps.py
2024/05/14 22:54 <DIR> migrations
2024/05/14 22:54 60 models.py
2024/05/14 22:54 63 tests.py
2024/05/14 22:54 66 views.py
2024/05/14 22:54 0 __init__.py6 File(s) 407 bytes3 Dir(s) 240,186,900,480 bytes free
除上面所說的文件外,我們還有:
migration文件夾:用來存儲“migrations”——當你修改你的數據模型時,這個文件會自動升級你的數據庫。
init.py :一個空文件,Django/Python 會將這個文件作為Python 包并允許你在項目的其他部分使用它。
4、注冊 catalog 應用
- 在項目的 settings 里,把應用添加進INSTALLED_APPS ,就完成了注冊
- 打開項目設置文件 locallibrary/locallibrary/settings.py 找到 INSTALLED_APPS 列表里的定義。如下所示,在列表的最后添加新的一行。
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','catalog.apps.CatalogConfig',
]
新的這行詳細說明了應用配置文件在 (CatalogConfig) /locallibrary/catalog/apps.py 里,當你創建應用時就完成了這個過程。
-
備注: 注意到 INSTALLED_APPS 已經有許多其他的應用了(還有 MIDDLEWARE,在 settings 的下面)。這些應用為 Django administration site 提供了支持和許多功能(包括會話,認證系統等)。
5、配置數據庫
SQLite配置如下
- 在settings.py里看到這個數據庫怎樣配置的
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}
更多其他數據庫詳情Diango各個數據庫配置
6、其他項目設置
settings.py 里還包括其他的一些設置,時區更改
TIME_ZONE = 'Asia/Shanghai'
SECRET_KEY:這個密匙值是 Django 網站安全策略的一部分。如果在開發環境中沒有包好這個密匙,把代碼投入生產環境時最好用不同的密匙代替。(可能從環境變量或文件中讀取)。
DEBUG:這個會在 debug 日志里輸出錯誤信息,而不是輸入 HTTP 的返回碼。在生產環境中,它應設置為 false,因為輸出的錯誤信息會幫助想要攻擊網站的人。
7、鏈接 URL 映射器
- 在項目文件夾里,創建網站時同時生成了 URL 映射器(urls.py)。盡管你可以用它來管理所有的 URL 映射,但是更常用的做法是把 URL 映射留到它們相關的應用中
1)打開locallibrary/locallibrary/urls.py 并注意指導文字解釋了一些使用 URL 映射器的方法
"""locallibrary URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import pathurlpatterns = [path('admin/', admin.site.urls),
]
URL 映射通過urlpatterns 變量管理,它是path() 函數的一個 Python 列表結構。每個path()函數要么將 URL 式樣 (URL pattern) 關聯到特定視圖 (specific view),將在模式匹配時顯示;要么關聯到某個 URL 式樣列表的測試代碼。 (第二種情況下,URL 式樣是目標模型里的“base URL”). urlpatterns 列表最開始定義了一個函數,這個函數將所有帶有模型 admin/ 的 URL 映射到模塊admin.site.urls。這個函數包含了 Administration 應用自己的 URL 映射定義。
-
備注: path() 中的路由是一個字符串,用于定義要匹配的 URL 模式。該字符串可能包括一個命名變量(尖括號中)
- 例:‘catalog//’。此模式將匹配如 /catalog/any_chars/ 的 URL,并將 any_chars 作為具有參數名稱 id 的字符串傳遞給視圖。我們將在后面的主題中進一步討論路徑方法和路由模式
2)將下面的行添加到文件的底部,以便將新的項添加到 urlpatterns 列表中。這個新項目包括一個 path() ,它將帶有 catalog/ 的請求轉發到模塊 catalog.urls (使用相對路徑 URL /catalog/urls.py)
# Use include() to add paths from the catalog application
from django.conf.urls import include
from django.urls import pathurlpatterns += [path('catalog/', include('catalog.urls')),
]
3)
現在讓我們把網站的根 URL(例:127.0.0.1:8000) 重定向到該 URL:127.0.0.1:8000/catalog/; 這是我們將在這個項目中使用的唯一應用程序,所以我們最好這樣做。為了完成這個目標,我們將使用一個特殊的視圖函數 (RedirectView), 當在 path() 函數中指定的 URL 模式匹配時(在這個例子中是根 URL),它將新的相對 URL 作為其第一個參數重定向到(/catalog/)
將以下行再次添加到文件的底部
#Add URL maps to redirect the base URL to our application
from django.views.generic import RedirectView
urlpatterns += [path('', RedirectView.as_view(url='/catalog/')),
]
- 將路徑函數的第一個參數留空以表示’/‘。如果你將第一個參數寫為’/',Django 會在你啟動服務器時給出以下警告:
System check identified some issues:
WARNINGS:
?: (urls.W002) Your URL pattern ‘/’ has a route beginning with a ‘/’.
Remove this slash as it is unnecessary.
If this pattern is targeted in an include(), ensure the include() pattern has a trailing ‘/’.
4)
- Django 默認不提供 CSS, JavaScript, 和圖片等靜態文件。但是當你在開發環境中開發時,這些靜態文件也很有用。作為對這個 URL 映射器的最后一項添加,你可以通過添加以下行在開發期間啟用靜態文件的服務。
把下面的代碼加到文件最后
# Use static() to add url mapping to serve static files during development (only)
from django.conf import settings
from django.conf.urls.static import staticurlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = [path('admin/', admin.site.urls),path('catalog/', include('catalog.urls')),path('', RedirectView.as_view(url='/catalog/', permanent=True)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
5)
- 除此以外,我們也可以包含 import 代碼行 (from django.conf.urls import include) ,這樣更容易看出我們添加的代碼,通常我們把 import 代碼行放在 Python 文件的開頭。
最后,在 catalog 文件夾下創建一個名為 urls.py 的文件,并添加以下文本以定義導入(空)的 urlpatterns。這是我們在編寫應用時添加式樣的地方。
from django.urls import path
from catalog import viewsurlpatterns = []
8、測試網站框架
1)運行數據庫遷移
Django 使用對象關系映射器(ORM)將 Django 代碼中的模型定義映射到底層數據庫使用的數據結構。當我們更改模型定義時,Django 會跟蹤更改并創建數據庫遷移腳本 (in /locallibrary/catalog/migrations/) 來自動遷移數據庫中的底層數據結構來
運行以下命令來定義數據庫中這些模型的表(確保你位于包含 manage.py 的目錄中)
D:\django\locallibrary\locallibrary>python manage.py makemigrations
No changes detectedD:\django\locallibrary\locallibrary>python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_alter_user_first_name_max_length... OKApplying sessions.0001_initial... OK
該 makemigrations 命令創建(但不適用)項目中安裝的所有應用程序的遷移(你可以指定應用程序名稱,也可以為單個項目運行遷移)。這讓你有機會在應用這些遷移之前檢查這些遷移代碼—當你是 Django 專家時,你可以選擇稍微調整它們。
這 migrate 命令 明確應用遷移你的數據庫(Django 跟蹤哪些已添加到當前數據庫)
-
備注: 了解較少使用的遷移命令的其他信息詳情Migrations (Django docs)
9、運行網站
-
備注: 這個開發網絡服務器并不夠強大以及不足以用于生產使用,但是它能非常容易得使你在開發期間,獲得你的 Django 網站和運行它,以此來進行快速測試。 默認情況下,服務器會開通(http://127.0.0.1:8000/),但你也可以選擇其他端口。有關更多信息,查閱(django-admin and manage.py: runserver)(Django docs).
通過調用 runserver 命令運行 Web 服務器(與manage.py位于同一目錄下)我指定了端口
D:\django\locallibrary\locallibrary>python3 manage.py runserver 80
The system cannot execute the specified program.D:\django\locallibrary\locallibrary>python manage.py runserver 80
Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).
May 14, 2024 - 23:24:27
Django version 5.0.6, using settings 'locallibrary.settings'
Starting development server at http://127.0.0.1:80/
Quit the server with CTRL-BREAK.[14/May/2024 23:24:40] "GET / HTTP/1.1" 302 0
Not Found: /catalog/
[14/May/2024 23:24:40] "GET /catalog/ HTTP/1.1" 404 2329
Not Found: /favicon.ico
[14/May/2024 23:24:41] "GET /favicon.ico HTTP/1.1" 404 2446
瀏覽器訪問如下
這個錯誤頁面是預期結果。因為我們沒有在 catalogs.urls 模塊中定義任何頁面/網址。(留意:當我們導航網站根目錄 URL 時,我們被重定向到了**/catalog 。)**