Django項(xiàng)目的初步創(chuàng)建與簡單配置
一,創(chuàng)建一個(gè)Django項(xiàng)目
1.1 新建虛擬環(huán)境
每一個(gè)python項(xiàng)目都創(chuàng)建一個(gè)新的虛擬環(huán)境有助于我們對于項(xiàng)目與其所對應(yīng)包的管理等。
這里使用pycharm工具進(jìn)行操作演示。
pycharm左上方找到菜單——File——New Project。
點(diǎn)擊后彈出新建項(xiàng)目窗口進(jìn)行配置
- Location:項(xiàng)目總路徑,選擇一個(gè)空的文件夾。
- New environment using:使用什么作為新環(huán)境,選擇Virtualenv虛擬環(huán)境。
- New environment using / Location:虛擬環(huán)境文件夾venv所存放的位置,在選擇了總項(xiàng)目Location后會(huì)自動(dòng)選擇的主項(xiàng)目下的venv文件夾,如果沒有自動(dòng)選擇需要自行修改。
- Base Interpreter:選擇到電腦中下載的實(shí)際python解釋器
- Inherit global site-package:繼承Base Interpreter中的包,建議不要勾選。
- Make available to all projects:其他項(xiàng)目也可以進(jìn)行使用它的虛擬環(huán)境中的解釋器作為Base Interpreter,建議不要勾選。
- Create a main.py welcome script:創(chuàng)建一個(gè)python簡單腳本文件,建議不要勾選,勾選了進(jìn)去也可以刪除。
點(diǎn)擊create,然后彈出一個(gè)新窗口,選擇This Window或New Window都可以。
然后我們便完成了即將用于django虛擬環(huán)境的初步創(chuàng)建。
二,Django項(xiàng)目的創(chuàng)建與配置
2.1 安裝配置Django
2.1.1 安裝模塊
打開pycharm終端,輸入安裝命令 pip install django,并回車。出現(xiàn)下列頁面便說明安裝完成。
2.1.2 新建django項(xiàng)目
此時(shí)我們已經(jīng)安裝好了django模塊,接下來就該新建項(xiàng)目了。依舊是在終端中完成,輸入django-admin.exe startproject mysite(項(xiàng)目名稱)并回車,然后可以在項(xiàng)目路徑下看到我們的主項(xiàng)目mysite,里面還有一個(gè)mysite包,這是我們的主應(yīng)用。還有一個(gè)manage.py文件,這是我們除了創(chuàng)建django項(xiàng)目外需要使用的可執(zhí)行文件。具體結(jié)構(gòu)如下圖所示。
- manage.py:這是一個(gè)命令行工具,用于執(zhí)行各種Django管理任務(wù),如創(chuàng)建數(shù)據(jù)庫、運(yùn)行開發(fā)服務(wù)器、創(chuàng)建超級用戶等。你可以使用它來與Django項(xiàng)目進(jìn)行交互。
- myproject/settings.py:這是Django項(xiàng)目的主要設(shè)置文件??梢栽谶@里配置數(shù)據(jù)庫連接、應(yīng)用程序設(shè)置、模板設(shè)置、國際化等。這是項(xiàng)目的核心配置文件。
- myproject/urls.py:這個(gè)文件定義了項(xiàng)目的主URL路由,即哪個(gè)URL應(yīng)該由哪個(gè)視圖處理。它將URL映射到視圖函數(shù)或類。
- myproject/asgi.py:這是用于異步Web服務(wù)器的ASGI(Asynchronous Server Gateway Interface)入口文件。它與WebSocket等異步通信協(xié)議一起使用,用于異步應(yīng)用程序的部署。(起初不需要過多關(guān)注)
- myproject/wsgi.py:這是用于部署Django應(yīng)用程序的WSGI(Web Server Gateway Interface)入口文件。它允許你將Django應(yīng)用程序與Web服務(wù)器(如Apache或Nginx)集成。(起初不需要過多關(guān)注)
- myproject/init.py:這個(gè)文件是一個(gè)空文件,用于指示Python解釋器將myproject目錄視為Python包。
- myproject/static/:這個(gè)目錄用于存儲(chǔ)項(xiàng)目中的靜態(tài)文件,如CSS、JavaScript和圖像。這些文件不會(huì)被動(dòng)態(tài)生成,而是直接提供給瀏覽器。
- myproject/templates/:這個(gè)目錄用于存儲(chǔ)項(xiàng)目的HTML模板文件。這些模板通常包含HTML結(jié)構(gòu)和Django模板標(biāo)記,用于渲染動(dòng)態(tài)內(nèi)容。
- myproject/apps.py:這個(gè)文件定義了Django應(yīng)用程序的配置,包括應(yīng)用程序的名稱和其他元數(shù)據(jù)。
- myproject/migrations/:這個(gè)目錄包含數(shù)據(jù)庫遷移文件。Django使用遷移來管理數(shù)據(jù)庫模式的變化,使你可以輕松地更新數(shù)據(jù)庫結(jié)構(gòu)。
- myproject/pycache/:這個(gè)目錄包含Python編譯的緩存文件,用于提高導(dǎo)入速度。
這些文件和目錄是一個(gè)標(biāo)準(zhǔn)的Django項(xiàng)目的基本組成部分,可以根據(jù)項(xiàng)目的需要添加其他文件和目錄。它們共同構(gòu)建了我們的Web應(yīng)用程序,提供了項(xiàng)目的配置、路由、模板、靜態(tài)文件等功能。通過編輯這些文件,可以定制和擴(kuò)展我們的Django應(yīng)用程序。
2.1.3 settings相關(guān)簡單配置
作為Django項(xiàng)目的主要設(shè)置文件。我們可以在這里配置數(shù)據(jù)庫連接、應(yīng)用程序設(shè)置、模板設(shè)置、國際化等。這是項(xiàng)目的核心配置文件。接下來會(huì)講解一些比較基礎(chǔ)的配置與講解。
INSTALLED_APPS:應(yīng)用注冊。當(dāng)創(chuàng)建一個(gè)Django項(xiàng)目時(shí),Django會(huì)自動(dòng)在settings.py文件中生成一個(gè)INSTALLED_APPS列表,其中包含了一些默認(rèn)的應(yīng)用程序。我們在創(chuàng)建完自己的應(yīng)用或使用第三方相關(guān)應(yīng)用時(shí)都需要在這里進(jìn)行注冊。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 下方將來會(huì)添加自己的應(yīng)用或第三方模塊應(yīng)用 ]
LANGUAGE_CODE:語言配置。
# LANGUAGE_CODE = 'en-us' 默認(rèn)語言為英文,改為中文: LANGUAGE_CODE = 'zh-hans'
TIME_ZONE:時(shí)區(qū)配置。
# TIME_ZONE = 'UTC' 默認(rèn)時(shí)區(qū)為UTC, 改為中國上海:TIME_ZONE = 'Asia/shanghai'
DATABASES:數(shù)據(jù)庫配置。Django默認(rèn)自帶使用sqlite3數(shù)據(jù)庫。可以將數(shù)據(jù)庫修改為mysql或其他django支持的數(shù)據(jù)庫類型。
# 默認(rèn)的sqlite3數(shù)據(jù)庫 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # 配置為MySQL數(shù)據(jù)庫 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '數(shù)據(jù)庫名字', 'USER': '用戶名', 'PASSWORD': '密碼', 'HOST': 主機(jī)地址; 'PORT': '3306', } }
ROOT_URLCONF:根路由。指向的也就是我們的項(xiàng)目總路由
ROOT_URLCONF = 'mysite.urls'
DEBUG:調(diào)試設(shè)置。當(dāng) DEBUG 設(shè)置為 True 時(shí),Django 處于調(diào)試模式。在調(diào)試模式下,如果發(fā)生錯(cuò)誤,Django 會(huì)向用戶顯示詳細(xì)的錯(cuò)誤頁面,包括錯(cuò)誤消息和代碼跟蹤,這有助于開發(fā)人員識(shí)別和解決問題。調(diào)試模式還啟用了一些開發(fā)工具和功能,如自動(dòng)重新加載代碼、數(shù)據(jù)庫查詢?nèi)罩居涗浀?,有助于開發(fā)過程中的快速迭代和故障排除。但是,在生產(chǎn)環(huán)境中,DEBUG 應(yīng)設(shè)置為 False,以提高安全性。在生產(chǎn)環(huán)境中,不應(yīng)向終端用戶顯示敏感信息,因此詳細(xì)的錯(cuò)誤頁面和調(diào)試信息應(yīng)該被禁用。
DEBUG = True
ALLOWED_HOST:是一個(gè)列表,其中包含允許訪問你的Django應(yīng)用程序的主機(jī)名或IP地址。這是一項(xiàng)重要的安全設(shè)置,用于防止跨站請求偽造(CSRF)和其他潛在的安全漏洞。當(dāng)DEBUG調(diào)試模式為False時(shí),一般將ALLOWED_HOST設(shè)置為 ”*“ ,也就是所有地址都可以訪問。
ALLOWED_HOSTS = [] # 當(dāng)DEBUG=False時(shí)需要這樣設(shè)置 ALLOWED_HOSTS = ["*"]
TEMPLATES:模板文件設(shè)置。是 Django 項(xiàng)目中用于存儲(chǔ)HTML模板文件的目錄。'APP_DIRS': True,意思為當(dāng)前模板文件的搜索位置會(huì)從應(yīng)用下方進(jìn)行查找,這里建議配置'DIRS':[],也就是指定其他查找路徑,可以設(shè)置為BASE_DIR / 'templates'這樣就可以在總路徑下創(chuàng)建一個(gè)templates模板文件夾并使用。
# 未配置 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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', ], }, }, ] # 進(jìn)行配置 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', # BASE_DIR為項(xiàng)目總路徑,templates可以隨便起名,但是建議約定俗成 'DIRS': [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', ], }, }, ]
STATIC_URL:用于指定靜態(tài)文件的基本URL。靜態(tài)文件包括CSS、JavaScript、圖像和其他不需要?jiǎng)討B(tài)生成的文件。通過設(shè)置STATIC_URL,可以告訴Django如何訪問和提供這些靜態(tài)文件。默認(rèn)也是從應(yīng)用下進(jìn)行查找。
# 一般不進(jìn)行修改,但是會(huì)配置新的STATICFILES_DIRS STATIC_URL = 'static/'
STATICFILES_DIR:相當(dāng)于TEMPLATES模板文件中的'DIRS',通過配置可以使django從項(xiàng)目總路徑下進(jìn)行查找。
# 建議在STATIC_URL附近添加 STATICFILES_DIRS = [BASE_DIR / 'static']
MEDIA_URL:用于指定媒體文件的基本URL。媒體文件通常包括用戶上傳的圖像、音頻、視頻等文件。通過設(shè)置MEDIA_URL,可以告訴Django如何訪問和提供這些媒體文件。
# 與STATIC_URL設(shè)置基本一樣 MEDIA_URL = 'media/'
注意:某些配置在settings中可能沒有,可以進(jìn)入下載的django包中找到django的配置進(jìn)行查看。路徑:venv——Lib——site-packages——django——conf——global_settings.py
2.1.4 數(shù)據(jù)遷移
注意接下來的命令都要使用manage.py,所有要先cd到自己的項(xiàng)目目錄下才能進(jìn)行。在django中,在設(shè)計(jì)了模型類后,需要先生成遷移文件,然后再遷移到數(shù)據(jù)庫這兩步,而django也自帶了幾個(gè)應(yīng)用,在創(chuàng)建完項(xiàng)目后,可以先同步遷移一下數(shù)據(jù)庫。
生成遷移文件命令:python manage.py makemigrations
遷移到數(shù)據(jù)庫命令:python manage.py migrate
django已經(jīng)生成了遷移文件,所有此時(shí)只需在終端中輸入python manage.py migrate便可以完成遷移。
此時(shí)完成遷移后會(huì)發(fā)現(xiàn)在項(xiàng)目路徑下多出一個(gè) db.sqlite3數(shù)據(jù)庫文件,這也就是django默認(rèn)自帶屬于的數(shù)據(jù)庫,此時(shí)可以使用數(shù)據(jù)庫可視化工具進(jìn)行連接,可以發(fā)現(xiàn)里面已經(jīng)存在了django應(yīng)用自帶的一些表。
而在django-migrations中顯示了django自帶的遷移記錄
2.1.5 啟動(dòng)Django服務(wù)
此時(shí)完成遷移后,就可以進(jìn)行Django服務(wù)的啟動(dòng)。依舊是在終端輸入,啟動(dòng)命令:python manage.py runserver(不指定端口,django會(huì)默認(rèn)啟用8000端口)
再點(diǎn)擊http://127.0.0.1:8000/
跳轉(zhuǎn)到此頁面便是已經(jīng)安裝成功。
2.2 Django自帶的強(qiáng)大后臺(tái)
2.2.1 Admin總路由
我們進(jìn)入總應(yīng)用下的urls.py后會(huì)發(fā)現(xiàn),在urlpatterns(Django 項(xiàng)目中的一個(gè)變量,它定義了項(xiàng)目的 URL 路由映射規(guī)則。具體來說,這是一個(gè)列表,其中包含了一系列 URL 路由模式(patterns)以及與這些模式關(guān)聯(lián)的視圖函數(shù)或類。)中已經(jīng)存在了一個(gè)admin路由(一組內(nèi)置的 URL 路由,用于提供管理員界面(后臺(tái)管理)功能。這些路由允許管理員用戶對應(yīng)用程序中的數(shù)據(jù)進(jìn)行管理,包括創(chuàng)建、讀取、更新和刪除(CRUD)操作,而無需編寫額外的代碼。),此時(shí)我們便可以啟動(dòng)項(xiàng)目后在路徑后拼接上admin便可以進(jìn)入。
但是此時(shí)需要賬號(hào)密碼才能進(jìn)入,這是我們就需要?jiǎng)?chuàng)建一個(gè)用戶進(jìn)行登錄后臺(tái),在終端中輸入命令:python manage.py createsuperuser進(jìn)行創(chuàng)建超級管理員用戶。注冊完成后便可以登錄進(jìn)入后臺(tái)。
此時(shí)使用賬號(hào)密碼登錄后臺(tái)。
此時(shí)便進(jìn)入了django的后臺(tái)管理 。Django 的 admin 后臺(tái)是一個(gè)內(nèi)置的管理界面,用于管理和維護(hù) Django 應(yīng)用程序的數(shù)據(jù)。我們在創(chuàng)建了自己的應(yīng)用,然后編寫完我們數(shù)據(jù)模型后也可以通過admin.py將自己的數(shù)據(jù)模型注冊到后臺(tái)并進(jìn)行操作與管理。admin后臺(tái)主要功能包括:
- 數(shù)據(jù)庫管理: 可以在 admin 后臺(tái)中管理應(yīng)用程序的數(shù)據(jù)模型,查看、添加、編輯和刪除數(shù)據(jù)庫記錄。這包括對數(shù)據(jù)摩西模型(例如用戶、文章、評論、產(chǎn)品等)執(zhí)行基本的 CRUD(創(chuàng)建、讀取、更新、刪除)操作。
- 用戶和權(quán)限管理: admin 后臺(tái)允許管理用戶,包括創(chuàng)建和編輯用戶帳戶、設(shè)置用戶權(quán)限、重置密碼等??梢詣?chuàng)建超級用戶,并且可以訪問 admin 后臺(tái)以執(zhí)行高級管理任務(wù)。
- 可自定義性: 可以自定義 admin 后臺(tái)的外觀和行為??梢蕴砑幼远x視圖、自定義模型管理器、自定義表單等,以適應(yīng)項(xiàng)目需求。這樣可以擴(kuò)展 admin 后臺(tái)的功能,使其滿足項(xiàng)目的具體要求。
- 日志和歷史記錄: admin 后臺(tái)記錄了對數(shù)據(jù)庫的所有更改,包括添加、編輯和刪除記錄的操作。這有助于審計(jì)和追蹤數(shù)據(jù)變更。
- 多語言支持: admin 后臺(tái)支持多語言,允許創(chuàng)建多語言管理界面,以便多語言團(tuán)隊(duì)協(xié)作。
- 快速開發(fā)和原型設(shè)計(jì): admin 后臺(tái)提供了一個(gè)快速原型設(shè)計(jì)應(yīng)用程序的方式。在初期開發(fā)階段,可以使用 admin 后臺(tái)來快速添加和管理數(shù)據(jù),而不必為前端界面編寫代碼。
- 安全性: admin 后臺(tái)是有權(quán)限控制的,只有經(jīng)過身份驗(yàn)證的管理員用戶才能訪問它??梢栽O(shè)置用戶權(quán)限以限制其他用戶的操作,以確保安全性。
總之,Django 的 admin 后臺(tái)是一個(gè)強(qiáng)大的工具,用于簡化管理應(yīng)用程序的數(shù)據(jù)和用戶。它使開發(fā)人員能夠快速查看和操作數(shù)據(jù)庫記錄,同時(shí)提供了可自定義性以適應(yīng)不同項(xiàng)目的需求。這使得開發(fā)、測試和維護(hù) Django 應(yīng)用程序變得更加便捷和高效。
2.2.2 數(shù)據(jù)庫與后臺(tái)的對應(yīng)
其實(shí)在數(shù)據(jù)庫中,我們也可以找到數(shù)據(jù)庫與后臺(tái)之間的對應(yīng)關(guān)系,比如我們在創(chuàng)建了一個(gè)用戶后,就可以在auth_user表中找到我們創(chuàng)建的對應(yīng)用戶信息,也可以在后臺(tái)進(jìn)行修改等操作。
三,創(chuàng)建應(yīng)用
3.1 自己的應(yīng)用
我們在上方一直在講解創(chuàng)建項(xiàng)目時(shí)自帶的主應(yīng)用,接下來我們就要開始創(chuàng)建自己的應(yīng)用了。
3.1.1 應(yīng)用的創(chuàng)建
首先,還是在命令行輸入命令:python manage.py startapp news(應(yīng)用名),然后回車。然后便可以看到項(xiàng)目路徑下多了一個(gè)名為news的應(yīng)用??偨Y(jié)構(gòu)如下:
應(yīng)用目錄(例如,myapp/): 這是自定義應(yīng)用程序的根目錄,包含了該應(yīng)用程序的所有文件和子目錄。
myapp/__init__.py: 這是一個(gè)空文件,用于告訴 Python 解釋器將 myapp 目錄視為一個(gè) Python 包。
myapp/admin.py: 在這個(gè)文件中,你可以注冊模型以在 Django 的 admin 后臺(tái)中進(jìn)行管理。通過在這里添加適當(dāng)?shù)拇a,可以控制哪些模型可以在 admin 后臺(tái)中編輯、查看和刪除。
myapp/apps.py: 這個(gè)文件包含有關(guān)應(yīng)用程序的元數(shù)據(jù),如應(yīng)用程序的名稱和配置。通常,不需要修改此文件,除非需要自定義應(yīng)用程序的配置。
myapp/models.py: 在這個(gè)文件中,可以定義應(yīng)用程序的數(shù)據(jù)模型(數(shù)據(jù)庫表)。使用 Django 的模型類來創(chuàng)建數(shù)據(jù)庫表,以及字段來定義表的結(jié)構(gòu)。這是自己創(chuàng)建的應(yīng)用程序中最重要的文件之一,因?yàn)樗x了數(shù)據(jù)的結(jié)構(gòu)。
myapp/views.py: 這個(gè)文件包含了應(yīng)用程序的視圖函數(shù)或類。視圖定義了如何處理來自客戶端的請求并返回響應(yīng)??梢栽谶@里編寫業(yè)務(wù)邏輯,將請求與模型交互,并渲染模板來生成響應(yīng)。
myapp/tests.py: 在這個(gè)文件中,可以編寫測試用例來測試應(yīng)用程序。Django 提供了內(nèi)置的測試框架,可以幫助編寫和運(yùn)行測試。
myapp/templates/: 這個(gè)目錄用于存儲(chǔ)應(yīng)用程序的 HTML 模板文件。模板文件包含了應(yīng)用程序的頁面結(jié)構(gòu)和顯示邏輯。Django 使用模板引擎來渲染這些模板,生成最終的 HTML 響應(yīng)。
myapp/static/: 這個(gè)目錄用于存儲(chǔ)應(yīng)用程序的靜態(tài)文件,如 CSS、JavaScript 和圖像。這些文件不會(huì)被動(dòng)態(tài)生成,而是直接提供給瀏覽器。
myapp/urls/:這個(gè)文件剛創(chuàng)建還沒有,但是可以一般來說每一個(gè)自己創(chuàng)建的應(yīng)用下都會(huì)創(chuàng)建一個(gè)urls來保存本應(yīng)用的路由,然后最后使用include()函數(shù)連接到總路由。
myapp/migrations/:應(yīng)用下的 migrations 包包含了數(shù)據(jù)庫遷移文件,用于管理應(yīng)用程序的數(shù)據(jù)模型(數(shù)據(jù)庫表結(jié)構(gòu))的變化。每當(dāng)更改數(shù)據(jù)模型(例如,添加新字段、修改字段類型、刪除字段等),Django 就會(huì)生成一個(gè)新的遷移文件,以記錄這些變化。這些遷移文件存儲(chǔ)在應(yīng)用程序的 migrations 包中。
3.1.2 應(yīng)用的注冊
在創(chuàng)建完自己應(yīng)用的第一步,就是在總應(yīng)用的settings中進(jìn)行注冊。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 下方將來會(huì)添加自己的應(yīng)用或第三方模塊應(yīng)用 # 將剛才創(chuàng)建的應(yīng)用進(jìn)行注冊 'news', ]
3.2 路由的創(chuàng)建
3.2.1 加入路由
在總路由中加入自己的應(yīng)用路由并在自己應(yīng)用下創(chuàng)建一個(gè)路由文件:urls.py
from django.contrib import admin # 導(dǎo)入include from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 加入自己應(yīng)用的路由,兩種方法都可以,第二個(gè)是命名空間寫法 #,可以在后續(xù)使路由,視圖函數(shù)與模板文件路徑設(shè)置更加簡便,這里先默認(rèn)使用第一種 # 注意include的第一個(gè)參數(shù)約定俗成就是自己應(yīng)用下的urls,然后在自己應(yīng)用下進(jìn)行新建urls.py文件 path('news/', include("news.urls")), # path('news/', include("news.urls", namespace="news")) ]
在自己應(yīng)用下的urls中寫入自己的路由。這里第一個(gè)視圖命名為index,切記視圖名后必須有“/”,也可以不填寫視圖名”index/“,這樣進(jìn)入應(yīng)用路由后會(huì)自動(dòng)進(jìn)入index視圖函數(shù)。
from django.urls import path, include # 默認(rèn)在views中進(jìn)行編寫視圖函數(shù) from .views import * urlpatterns = [ # 本應(yīng)用下的路由,第一個(gè)參數(shù)是路由名,第二個(gè)參數(shù)是視圖函數(shù)名,也可以有第三個(gè)參數(shù), # 也就是命名空間,name=index(一般三個(gè)都與視圖函數(shù)名一致) path("index/", index) path("index/", index, name="index") ]
3.2.2 編寫視圖函數(shù)
接下來就可以到 應(yīng)用下的views中進(jìn)行編寫視圖函數(shù).這里面HttpResponse是一個(gè)用于測試的視圖常用函,每一個(gè)視圖函數(shù)都必須有一個(gè)形參名為request,在后面會(huì)有大用。
# 先導(dǎo)入HttpResponse進(jìn)行測試 from django.shortcuts import render,HttpResponse # Create your views here. def index(request): # 這里返回使用HttpResponse進(jìn)行測試(只能輸出一句話) return HttpResponse("歡迎來到首頁")
3.2.3 測試結(jié)果
然后便可以啟動(dòng)服務(wù),進(jìn)入網(wǎng)站后發(fā)現(xiàn)已經(jīng)不是啟動(dòng)成功,而是page not found,也就是404畫面
可以看到這里由于我們設(shè)置了debug=True,所以會(huì)有下面都有哪些視圖的提醒,在后面拼接news/再回車
這里可以看到news/后還有一個(gè)index/視圖,也就是我們剛才在應(yīng)用下加入的視圖和剛才編寫的index視圖函數(shù),再在后面拼接上index/,再次回車
此時(shí)便可以看到,我們剛才編寫的index函數(shù)中的HttpResponse的返回結(jié)果。 當(dāng)然使用HttpResponse這只是作為測試,后續(xù)在開發(fā)中用的多的還是render()函數(shù)
3.3 模型的創(chuàng)建
3.3.1 編寫模型類
在我們自己創(chuàng)建的應(yīng)用程序的 models.py 文件中,可以定義應(yīng)用程序的數(shù)據(jù)模型,這些數(shù)據(jù)模型將映射到數(shù)據(jù)庫表。數(shù)據(jù)模型定義了表的結(jié)構(gòu)以及表中的字段。每個(gè)模型類通常都是一個(gè) Python 類,它繼承自 Django 的 models.Model 類,并定義了模型的字段和屬性。接下來是一個(gè)簡單的模型類的創(chuàng)建。
from django.db import models # Create your models here. # 創(chuàng)建我們新聞中的第一個(gè)類:新聞種類Category,繼承models.Model class Category(models.Model): # 類屬性,通常需要寫入到類的初始化init方法中的,在這里因?yàn)槔^承了models.Model,可以直接進(jìn)行編寫 # 使用的CharField字段也就對應(yīng)著數(shù)據(jù)庫中的varchar等字段 # max_length最大長度必須要指明,verbose_name是在網(wǎng)站上的展示名,可選 name = models.CharField(max_length=20, verbose_name="新聞種類") # __str__方法定義了模型的字符串表示,通常在在管理界面中顯示模型的對象時(shí)使用。 def __str__(self): return self.name # 創(chuàng)建我們新聞中的第二個(gè)類:新聞News,同樣繼承models.Model class News(models.Model): # 新聞標(biāo)題,同樣使用CharField字段,這里由于不能重復(fù),需要使用unique唯一約束 title = models.CharField(max_length=10, verbose_name="標(biāo)題", unique=True) # 新聞?wù)?,這里使用長文本,未來在使用第三方富文本插件后可以進(jìn)行更改 content = models.TextField(verbose_name="新聞?wù)?) # 時(shí)間,使用DateTimeField字段,auto_now_add=True可以自動(dòng)添加新聞添加時(shí)的時(shí)間,不用手動(dòng)添加 time = models.DateTimeField(auto_now_add=True, verbose_name="時(shí)間") # 新聞種類,聯(lián)系到Category表,所以使用ForeignKey外鍵,on_delete=models.CASCADE為級聯(lián)刪除 category = models.ForeignKey(to="Category", on_delete=models.CASCADE)
還有很多其他字段和參數(shù),包括第三方可以使用的富文本插件等等,在后續(xù)會(huì)做詳細(xì)解釋。
3.3.2 生成遷移文件
每次在定義完模型類后,還需要同步到數(shù)據(jù)庫,這時(shí)需要先生成遷移文件,命令同上,為:python manage.py makemigrations,輸入完后按下回車,會(huì)發(fā)現(xiàn)提醒生成了兩張表(一個(gè)模型類就對應(yīng)了一張表)和一個(gè)遷移文件
我們再進(jìn)入應(yīng)用下的migrations包中,會(huì)發(fā)現(xiàn)多了一個(gè)0001_initial.py文件,這就是我們的第一個(gè)遷移文件。
3.3.3 遷移到數(shù)據(jù)庫
我們剛才只是生成了遷移文件,還沒有同步到數(shù)據(jù)庫,這里需要再次遷移,才能將模型類同步到數(shù)據(jù)庫中,生成對應(yīng)的表。命令為:python manage.py migrate。在命令行輸入后按下回車。然后會(huì)顯示遷移完成。
再次打開數(shù)據(jù)庫查看。 發(fā)現(xiàn)會(huì)多出剛才創(chuàng)建的兩個(gè)新表。
3.3.4 修改字段或創(chuàng)建新的模型類
需要注意,我們每次在models.py中增加新的模型類或者修改其中字段時(shí)都需要重新生成遷移文件并向數(shù)據(jù)庫進(jìn)行重新遷移,但是如果是修改類似于verbose_name或類的__str__字符串表示,是不需要重新生成遷移的。這里將會(huì)展示增加新的字段或新的模型類(新表)時(shí)遇到的問題。
增加新的模型類
在models.py中加入一個(gè)測試模型類:
# 用于測試的模型類 class Test(models.Model): test = models.CharField(max_length=10)
然后需要重新生成遷移文件:python manage.py makemigrations。然后會(huì)發(fā)現(xiàn)在migrations中多出一個(gè)遷移文件。
再次遷移到數(shù)據(jù)庫:python manage.py migrate。此時(shí)便同步到了數(shù)據(jù)庫中。同步成功如下:
向已存在的表中增加新的字段
向剛才的test模型類中再次添加新的字段
# 用于測試的模型類 class Test(models.Model): test = models.CharField(max_length=10) # 測試字段 test2 = models.CharField(max_length=20)
再次生成遷移文件:python manage.py makemigrations。此時(shí)會(huì)發(fā)現(xiàn),提示報(bào)錯(cuò)說缺少一個(gè)默認(rèn)值。
這個(gè)錯(cuò)誤消息是由于嘗試向數(shù)據(jù)庫表中添加一個(gè)非空字段而沒有指定默認(rèn)值,但是已經(jīng)存在的行需要一個(gè)默認(rèn)值以進(jìn)行填充。Django 提供了兩種選項(xiàng)來解決這個(gè)問題,可以根據(jù)需求選擇其中一種:
1,提供一個(gè)一次性默認(rèn)值(Provide a one-off default now): 如果希望添加的新字段有一個(gè)默認(rèn)值,并且希望將這個(gè)默認(rèn)值應(yīng)用于已存在的數(shù)據(jù)庫記錄,可以選擇這個(gè)選項(xiàng)。Django 將要求我們輸入默認(rèn)值,然后將此默認(rèn)值應(yīng)用于所有現(xiàn)有的記錄。
2,手動(dòng)在 models.py 中定義默認(rèn)值(Quit and manually define a default value in models.py): 如果希望在模型的字段定義中明確指定默認(rèn)值,而不是在遷移過程中提供一次性默認(rèn)值,可以選擇這個(gè)選項(xiàng)。這意味著需要返回到你的模型類(models.py)中,為新字段指定一個(gè)默認(rèn)值,然后再次運(yùn)行 makemigrations 命令生成遷移文件。
這里建議都選擇第二個(gè)選項(xiàng)。
按下選項(xiàng)二
回到models.py中找到剛才添加的字段,加入default默認(rèn)值參數(shù)
# 用于測試的模型類 class Test(models.Model): test = models.CharField(max_length=10) # 測試字段 test2 = models.CharField(max_length=20, default="默認(rèn)")
重新生成遷移文件,應(yīng)該沒有再報(bào)錯(cuò)
重新遷移,也沒有報(bào)錯(cuò)
當(dāng)然這里再介紹兩個(gè)好用但是不太推薦的方法,在項(xiàng)目應(yīng)用創(chuàng)建的初期,可以使用,但是數(shù)據(jù)多了之后建議使用Git等版本控制軟件
直接刪除所有遷移文件和數(shù)據(jù)庫
這是最簡單粗暴的一種方法,先刪除我們應(yīng)用下migrations中的所有遷移文件和sqlite3數(shù)據(jù)庫(如果使用的MySQL等在MySQL中進(jìn)行操作):
在刪除成功后,重新生成遷移文件: python manage.py makemigrations
然后重新進(jìn)行遷移:python manage.py migrate
此時(shí)便相當(dāng)于直接初始化重新生成了數(shù)據(jù)庫與數(shù)據(jù)庫中的表
刪除遷移文件,遷移記錄和表
這一種方法不會(huì)刪除數(shù)據(jù)庫,但是要更加麻煩一些
刪除遷移文件,數(shù)據(jù)庫中的遷移記錄(在數(shù)據(jù)庫中的django_migrations表中,需要注意這里由于剛才同步將django自帶應(yīng)用和我們的應(yīng)用一起進(jìn)行了遷移,所有這里需要小心不要?jiǎng)h除django自帶的遷移記錄,需要找到自己的應(yīng)用的遷移記錄)和數(shù)據(jù)庫中我們應(yīng)用的數(shù)據(jù)表
重新生成遷移文件:python manage.py makemigrations
重新遷移:python manage.py migrate
四,命令講解
4.1 django-admin
- django-admin 是全局安裝的 Django 命令行工具,它可以在任何地方運(yùn)行,不僅限于項(xiàng)目的根目錄。
- 可以使用 django-admin 來創(chuàng)建新的 Django 項(xiàng)目,執(zhí)行與 Django 項(xiàng)目無關(guān)的任務(wù),以及在不同的項(xiàng)目之間切換。
- 例如,可以使用 django-admin startproject projectname 來創(chuàng)建一個(gè)新的 Django 項(xiàng)目,而無需在項(xiàng)目目錄中使用 manage.py。
4.2 manage.py
- manage.py 是每個(gè) Django 項(xiàng)目根目錄中的腳本,它是由 Django 自動(dòng)生成的。
- manage.py 是用于管理特定 Django 項(xiàng)目的命令行工具。它提供了一種在項(xiàng)目內(nèi)部執(zhí)行管理任務(wù)的方式。
- 可以使用 manage.py 來執(zhí)行數(shù)據(jù)庫遷移、運(yùn)行開發(fā)服務(wù)器、創(chuàng)建超級用戶、執(zhí)行測試、收集靜態(tài)文件等與項(xiàng)目相關(guān)的任務(wù)。
- python manage.py 回車:可以查看 manage.py 后續(xù)相關(guān)命令或參數(shù)
- python manage.py help:這將列出
manage.py
支持的所有命令以及它們的描述。這個(gè)命令將幫助了解可用的 Django 管理命令以及如何使用它們。 - python manage.py help <command>:其中
<command>
是你想要獲取幫助的特定命令的名稱。這將顯示有關(guān)該命令的詳細(xì)信息,包括用法、選項(xiàng)和參數(shù)。
總的來說,django-admin
是全局工具,而 manage.py
是特定于每個(gè) Django 項(xiàng)目的工具。通常情況下,會(huì)在項(xiàng)目的根目錄中使用 manage.py
來執(zhí)行項(xiàng)目管理任務(wù)。如果需要執(zhí)行與項(xiàng)目無關(guān)的全局任務(wù)(例如創(chuàng)建新項(xiàng)目),則可以使用 django-admin
。
總結(jié)
在下一篇中會(huì)講解進(jìn)一步的路由,視圖與后臺(tái)操作等,涉及Django的命令也會(huì)在后續(xù)編寫一個(gè)常用命令總結(jié)。
Django官方網(wǎng)址
Getting started with Django | Django
Django官方文檔
此處為4.2版本 https://docs.djangoproject.com/en/4.2/???????
到此這篇關(guān)于Django項(xiàng)目的初步創(chuàng)建與簡單配置的文章就介紹到這了,更多相關(guān)Django 創(chuàng)建與配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python學(xué)習(xí)之subprocess模塊詳解
這篇文章主要介紹了python學(xué)習(xí)之subprocess模塊的相關(guān)資料,該模塊用于創(chuàng)建子進(jìn)程并與其進(jìn)行交互,它提供了多個(gè)函數(shù)和類來執(zhí)行操作系統(tǒng)命令、獲取命令輸出以及管理子進(jìn)程的生命周期,需要的朋友可以參考下2024-12-12python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07python PIL和CV對 圖片的讀取,顯示,裁剪,保存實(shí)現(xiàn)方法
今天小編就為大家分享一篇python PIL和CV對 圖片的讀取,顯示,裁剪,保存實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08基于Python實(shí)現(xiàn)一個(gè)簡單的敏感詞過濾功能
這篇文章主要介紹了Python實(shí)現(xiàn)敏感詞過濾功能的示例,文中通過示例代碼介紹的非常詳細(xì),對我們學(xué)習(xí)python有定的幫助,感興趣的小伙伴們可以參考一下2023-06-06Ubuntu下創(chuàng)建虛擬獨(dú)立的Python環(huán)境全過程
virtualenv可以搭建虛擬且獨(dú)立的python環(huán)境,可以使每個(gè)項(xiàng)目環(huán)境與其他項(xiàng)目獨(dú)立開來,保持環(huán)境的干凈,解決包沖突問題。本篇文章講述如何在Linux以及Ubuntu中創(chuàng)建Python虛擬環(huán)境,以及Virtualenvwrapper的安裝使用,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟
這篇文章主要介紹了把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10