文章目錄
- 1.Django介紹
-
- 1.2 MVC模式說明
- 1.3 Django的MVT
- 1.4 Django配置順序
- 1. 建立Django項目
- 2.建立Django子應用
- 3. 注冊安裝子應用
- 4. 使用Django進行資料庫開發
-
- 4.1. 定義模型類
- 4.2. 模型遷移 (建表)
- 5.站點管理
-
- 5.1.管理界面本地化
- 5.2 建立管理者
- 6.視圖和URL
-
- 6.1. 定義視圖函數
- 6.2. 配置URLconf
- 7.模闆
-
- 7.1 模闆使用步驟
- 7.2建立模闆
- 7.3設定模闆查找路徑
- 7.4.模闆接收視圖傳入的資料
- 7.5.模闆處理資料
- 7.6. 檢視模闆處理資料成果
- 8.資料庫資料在網頁展示
-
- 8.1建立視圖
- 8.2.建立模闆
- 8.3.配置URLconf
- 9.配置檔案和靜态檔案
-
- 9.1 setting配置檔案
- 9.2 靜态檔案
- 9.3App應用配置
環境:
Ubuntu20.04
、
Django1.11.1
1.Django介紹
Django的**主要目的是簡便、快速的開發資料庫驅動的網站。**它強調代碼複用,多個元件可以很友善的以"插件"形式服務于整個架構,Django有許多功能強大的第三方插件,你甚至可以很友善的開發出自己的工具包。這使得Django具有很強的可擴充性。它還強調快速開發和DRY(DoNotRepeatYourself)原則。
1.1 重量級架構
對比Flask架構,Django原生提供了衆多的功能元件,讓開發更簡便快速。
- 提供項目工程管理的自動化腳本工具
- 資料庫ORM支援(對象關系映射,英語:Object Relational Mapping)
- 模闆
- 表單
- Admin管理站點
- 檔案管理
- 認證權限
- session機制
- 緩存
1.2 MVC模式說明
- M全拼為Model,主要封裝對資料庫層的通路,對資料庫中的資料進行增、删、改、查操作。
- V全拼為View,用于封裝結果,生成頁面展示的html内容。
- C全拼為Controller,用于接收請求,處理業務邏輯,與Model和View互動,傳回結果。
1.3 Django的MVT
- M全拼為Model,與MVC中的M功能相同,負責和資料庫互動,進行資料處理。
- V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,傳回應答。
- T全拼為Template,與MVC中的V功能相同,負責封裝構造要傳回的html。
1.4 Django配置順序
bookmanager: 為工程目錄;
book: 為應用目錄;
bookmanager/settings.py -->> bookmanager/urls.py -->>
book/urls.py -->> book/views.py -->> templates/book/index.html
-->> book/models.py -->> 資料庫
1. 建立Django項目
django-admin startproject bookmanager
執行後,會多出一個新目錄名為bookmanager,此即為新建立的工程目錄。
- 與項目同名的目錄,此處為bookmanager。
- settings.py是項目的整體配置檔案。
- urls.py是項目的URL配置檔案。
- wsgi.py是項目與WSGI相容的Web伺服器入口。
- manage.py是項目管理檔案,通過它管理項目。
運作伺服器指令如下:
# vim ./bookmanager/settings.py 中設定ALLOWED_HOSTS = ['*']
# 設定後可遠端通路 ip 0.0.0.0:8000
python manage.py runserver ip:端口
或:
python manage.py runserver
2.建立Django子應用
在django中,建立子應用子產品目錄仍然可以通過指令來操作,即:
python manage.py startapp 子應用名稱
例如:cd ~/book
python manage.py startapp book
執行後,可以看到工程目錄中多出了一個名為book的子目錄
- admin.py檔案跟網站的背景管理站點配置相關。
- apps.py檔案用于配置目前子應用的相關資訊。
- migrations目錄用于存放資料庫遷移曆史檔案。
- models.py檔案使用者儲存資料庫模型類。
- tests.py檔案用于開發測試用例,編寫單元測試。
- views.py檔案用于編寫Web應用視圖。
3. 注冊安裝子應用
在工程配置檔案settings.py中,INSTALLED_APPS項儲存了工程中已經注冊安裝的子應用,初始工程中的INSTALLED_APPS如下:
例如,将剛建立的book子應用添加到工程中,可在INSTALLED_APPS清單中添加**‘book.apps.BookConfig’**。
vim ./bookmanager/settings.py
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加自己的子應用
'book.apps.BookConfig',
]
4. 使用Django進行資料庫開發
4.1. 定義模型類
子應用目錄models.py
中定義模型類,繼承自
models.Model
from django.db import models
# Create your models here.
# 準備書籍清單資訊的模型類
class BookInfo(models.Model):
# 建立字段,字段類型...
name = models.CharField(max_length=10)
# 準備人物清單資訊的模型類
class PeopleInfo(models.Model):
name = models.CharField(max_length=10)
gender = models.BooleanField()
# 外鍵限制:人物屬于哪本書
book = models.ForeignKey(BookInfo)
4.2. 模型遷移 (建表)
- 根據子應用目錄models.py的内容生成建立表的語句和在資料庫中建立表
- 生成遷移檔案:根據模型類生成建立表的語句
python manage.py makemigrations 子應用目錄下makemigrations目錄下會生成0001_initial.py
- 執行遷移:根據第一步生成的語句在資料庫中建立表
python manage.py migrate
- 提示:預設采用
資料庫來存儲資料sqlite3
5.站點管理
5.1.管理界面本地化
Django工程目錄下settings.py設定中文和時區:
# 設定中文
LANGUAGE_CODE = 'zh-Hans'
# 亞洲上海時區
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
5.2 建立管理者
建立管理者的指令 :
python manage.py createsuperuser
# 根據提示輸入管理使用者名和密碼
- 重置密碼
-
python manager.py changepassword 使用者名
啟動服務: python manage.py runserver ip:端口
登陸站點 :
http://127.0.0.1:8000/admin
管理資料庫。
在子應用目錄models.py中優化模型類展示:
# 準備書籍清單資訊的模型類
class BookInfo(models.Model):
# 建立字段,字段類型...
name = models.CharField(max_length=10)
def __str__(self):
"""将模型類以字元串的方式輸出"""
return self.name # 在網站管理清單中可以看到name屬性
6.視圖和URL
6.1. 定義視圖函數
在子應用目錄中的
views.py
裡定義
- 視圖就是一個
函數,被定義在Python
的應用
中.views.py
- 視圖的第一個參數是
類型的對象HttpRequest
,包含了所有reqeust
.請求資訊
- 視圖必須傳回
,包含傳回給請求者的HttpResponse對象
.響應資訊
- 需要導入
子產品 :HttpResponse
from django.http import HttpResponse
- 定義視圖函數 : 響應字元串
給用戶端OK!
# vim ./book/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse('OK!!!')
6.2. 配置URLconf
查找視圖的過程 :
- 1.請求者在浏覽器位址欄中輸入URL, 請求到網站.
- 2.網站擷取URL資訊.
- 3.然後與編寫好的URLconf逐條比對.
- 4.如果比對成功則調用對應的視圖.
- 5.如果所有的URLconf都沒有比對成功.則傳回404錯誤.
在工程目錄中settings.py 設定
URLconf
入口:
# vim ./bookmanager/settings.py
ROOT_URLCONF = 'bookmanager.urls'
- 需要兩步完成
配置URLconf
- 1.在
中定義項目
URLconf
- 2.在
中定義應用
URLconf
- 1.在
- 在
中定義項目
URLconf
# vim ./bookmanager/urls.py
from django.conf.urls import url,include # 導入
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 正則比對規則:隻要不是admin/ 就算比對成功
url(r'^', include('book.urls'))
]
- 在
中定義應用
URLconf
# 在子應用目錄下建立urls.py
# vim ./book/urls.py
from django.conf.urls import url
from book.views import index
# urlpatterns為固定寫法
urlpatterns = [
url(r'^$',index) # 路由引導視圖函數
]
7.模闆
7.1 模闆使用步驟
- 1.建立模闆
- 2.設定模闆查找路徑
- 3.模闆接收視圖傳入的資料
- 4.模闆處理資料
7.2建立模闆
- 在
同級目錄下建立模闆檔案夾應用
. 檔案夾名稱固定寫法.templates
- 在
檔案夾下, 建立templates
同名檔案夾. 例,應用
Book
- 在
同名檔案夾下建立應用
檔案. 例 :網頁模闆
index.html
7.3設定模闆查找路徑
在工程目錄下, vim bookmanager/setings.py 設定DIRS
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'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',
],
},
},
]
7.4.模闆接收視圖傳入的資料
在子應用目錄下編寫:
vim book/views.py
# -*- coding:utf-8 -*-
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
context = {'title':'測試模闆資料'}
return render(request, 'book/index.html', context)
7.5.模闆處理資料
# 編寫模闆資料html、css、js等
vim templates/book/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>測試模闆資料</title>
</head>
<body>
<h1>根路徑下的資料</h1>
<di style="background: red; font-size: 30px"> {{title}} </di>
</body>
</html>
7.6. 檢視模闆處理資料成果
1.運作伺服器: python manage.py runserver 0.0.0.0:8000
2.在伺服器中輸入: http://192.168.1.101:8000/ 通路
8.資料庫資料在網頁展示
實作步驟:
- 1.建立視圖
- 2.建立模闆
- 3.配置URLconf
8.1建立視圖
- 查詢資料庫資料
- 構造上下文
- 傳遞上下文到模闆
子應用目錄下修改: vim book/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from book.models import BookInfo,PeopleInfo
# BookInfo,PeopleInfo 模型類,在4.1定義遷移過
def index(request):
context = {'title':'測試模闆資料'}
return render(request, 'book/index.html', context)
# 定義視圖:提供書籍清單資訊
def bookList(request):
# 查詢資料庫書籍清單資料
books = BookInfo.objects.all()
# 構造上下文
context = {'books':books}
# 資料交給模闆處理,處理完成後通過視圖響應給用戶端
return render(request, 'book/booklist.html', context)
8.2.建立模闆
- 讀取上下文資料
- 構造網頁html文檔 : 書籍資訊以清單樣式展示
在模闆目錄下:
vim templates/book/booklist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>書籍清單資訊</title>
</head>
<body>
<ul>
{% for book in books %}
<li>{{ book.name }}</li>
{% endfor %}
</ul>
</body>
</html>
8.3.配置URLconf
修改子
應用
目錄中的
urls.py
檔案
from django.conf.urls import url
from book.views import index,bookList
urlpatterns = [
url(r'^$',index),
# 比對書籍清單資訊的URL,調用對應的bookList視圖
url(r'^booklist/$',bookList)
]
cd $HOME/bookmanager
啟動服務: python manage.py runserver 0.0.0.0:8000
在浏覽器輸入http://192.168.1.101:8000/booklist/
即可看到在資料庫的資料。
9.配置檔案和靜态檔案
9.1 setting配置檔案
BASE_DIR 屬性:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
目前工程的根目錄,Django會依此來定位工程内的相關檔案,我們也可以使用該參數來構造檔案路徑。
DEBUG屬性:
調試模式,建立工程後初始值為True,即預設工作在調試模式下。
作用:
- 修改代碼檔案,程式自動重新開機
- Django程式出現異常時,向前端顯示詳細的錯誤追蹤資訊
- 而非調試模式下,僅傳回Server Error (500)
注意:部署線上運作的Django不要運作在調式模式下,記得修改DEBUG=False和ALLOWED_HOSTS(通路ip)。
設定本地語言與時區
LANGUAGE_CODE = 'en-us' # 語言
TIME_ZONE = 'UTC' # 時區# 時區
将語言和時區修改為中國大陸資訊
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
9.2 靜态檔案
項目中的CSS、圖檔、js都是靜态檔案。一般會将靜态檔案放到一個單獨的目錄中。
為了提供靜态檔案,需要配置兩個參數:
- STATICFILES_DIRS存放查找靜态檔案的目錄
- STATIC_URL通路靜态檔案的URL字首
1) 在項目根目錄下建立static目錄來儲存靜态檔案。
2) 在bookmanager/settings.py中修改靜态檔案的兩個參數為
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
3)此時在static添加的任何靜态檔案都可以使用網址**/static/檔案在static中的路徑**來通路了。
例如,我們向static目錄中添加一個index.html檔案,在浏覽器中就可以使用127.0.0.1:8000/static/index.html來通路。
9.3App應用配置
我們将此類添加到工程settings.py中的INSTALLED_APPS清單中,表明注冊安裝具備此配置屬性的應用。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加自己的子應用
'book.apps.BookConfig',
]
在每個應用目錄中都包含了apps.py檔案,用于儲存該應用的相關資訊。
在建立應用時,Django會向apps.py檔案中寫入一個該應用的配置類,如
from django.apps import AppConfig
class BookConfig(AppConfig):
name = 'book'
- AppConfig.name屬性表示這個配置類是加載到哪個應用的,每個配置類必須包含此屬性,預設自動生成。
- AppConfig.verbose_name屬性用于設定該應用的直覺可讀的名字,此名字在Django提供的Admin管理站點中會顯示,如
from django.apps import AppConfig class UsersConfig(AppConfig): name = 'book' verbose_name = '圖書管理'