我來記筆記啦-Django開發流程與配置

環境Ubuntu20.04Django1.11.1css

1.Django介紹

Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼複用,多個組件能夠很方便的以"插件"形式服務於整個框架,Django有許多功能強大的第三方插件,你甚至能夠很方便的開發出本身的工具包。這使得Django具備很強的可擴展性。它還強調快速開發和DRY(DoNotRepeatYourself)原則。html

1.1 重量級框架前端

對比Flask框架,Django原生提供了衆多的功能組件,讓開發更簡便快速。python

  • 提供項目工程管理的自動化腳本工具
  • 數據庫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是項目管理文件,經過它管理項目。

運行服務器命令以下:sql

# vim ./bookmanager/settings.py 中設置ALLOWED_HOSTS = ['*']
# 設置後可遠程訪問 ip 0.0.0.0:8000

python manage.py runserver ip:端口
或:
python manage.py runserver

2.建立Django子應用

在django中,建立子應用模塊目錄仍然能夠經過命令來操做,即:shell

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'django

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.Modelvim

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 = '圖書管理'
相關文章
相關標籤/搜索