天天看點

Django開發流程與配置1.Django介紹1. 建立Django項目2.建立Django子應用3. 注冊安裝子應用4. 使用Django進行資料庫開發5.站點管理6.視圖和URL7.模闆8.資料庫資料在網頁展示9.配置檔案和靜态檔案

文章目錄

  • 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

  • 項目

    中定義

    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 = '圖書管理'