欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django項(xiàng)目的初步創(chuàng)建與簡單配置

 更新時(shí)間:2023年09月13日 10:50:32   作者:色厲膽薄李富貴兒  
本文主要介紹了Django項(xiàng)目的初步創(chuàng)建與簡單配置,詳細(xì)介紹了如何安裝和配置Django,包括創(chuàng)建項(xiàng)目、數(shù)據(jù)庫配置、路由等,通過本文可以了解如何使用Django創(chuàng)建自己的Web應(yī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模塊詳解

    這篇文章主要介紹了python學(xué)習(xí)之subprocess模塊的相關(guān)資料,該模塊用于創(chuàng)建子進(jìn)程并與其進(jìn)行交互,它提供了多個(gè)函數(shù)和類來執(zhí)行操作系統(tǒng)命令、獲取命令輸出以及管理子進(jìn)程的生命周期,需要的朋友可以參考下
    2024-12-12
  • Python list去重且保持原順序不變的方法

    Python list去重且保持原順序不變的方法

    這篇文章主要介紹了Python list去重且保持原順序不變的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能

    python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能

    這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)旋轉(zhuǎn)矩形框裁減功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python利用插值法對折線進(jìn)行平滑曲線處理

    python利用插值法對折線進(jìn)行平滑曲線處理

    這篇文章主要為大家詳細(xì)介紹了python利用插值法對折線進(jìn)行平滑曲線處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • python中asyncio異步編程學(xué)習(xí)

    python中asyncio異步編程學(xué)習(xí)

    這篇文章主要介紹了python中asyncio異步編程學(xué)習(xí),內(nèi)部就是基于協(xié)程實(shí)現(xiàn)的異步編程,如果想研究異步編程的同學(xué),要仔細(xì)看哦
    2021-04-04
  • python PIL和CV對 圖片的讀取,顯示,裁剪,保存實(shí)現(xiàn)方法

    python PIL和CV對 圖片的讀取,顯示,裁剪,保存實(shí)現(xiàn)方法

    今天小編就為大家分享一篇python PIL和CV對 圖片的讀取,顯示,裁剪,保存實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 基于Python實(shí)現(xiàn)一個(gè)簡單的敏感詞過濾功能

    基于Python實(shí)現(xiàn)一個(gè)簡單的敏感詞過濾功能

    這篇文章主要介紹了Python實(shí)現(xiàn)敏感詞過濾功能的示例,文中通過示例代碼介紹的非常詳細(xì),對我們學(xué)習(xí)python有定的幫助,感興趣的小伙伴們可以參考一下
    2023-06-06
  • python二叉樹類以及其4種遍歷方法實(shí)例

    python二叉樹類以及其4種遍歷方法實(shí)例

    二叉樹是一種特殊的樹,最直觀地體現(xiàn)于它的每個(gè)節(jié)點(diǎn)至多有兩個(gè)子節(jié)點(diǎn),二叉樹是非常實(shí)用的一種數(shù)據(jù)結(jié)構(gòu),常常用于實(shí)現(xiàn)二叉查找樹及二叉堆等,下面這篇文章主要給大家介紹了關(guān)于python二叉樹類以及其4種遍歷方法的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Ubuntu下創(chuàng)建虛擬獨(dú)立的Python環(huán)境全過程

    Ubuntu下創(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里面的方法步驟

    這篇文章主要介紹了把Anaconda中的環(huán)境導(dǎo)入到Pycharm里面的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論