Django---搭建一個實(shí)驗框架的簡單說明

1. 構(gòu)建實(shí)驗環(huán)境

1.1 實(shí)驗機(jī)的環(huán)境準(zhǔn)備

1.1.1 實(shí)驗機(jī)系統(tǒng)規(guī)劃:

  • 本次實(shí)驗使用的系統(tǒng)版本為:

CentOS Linux release 7.6.1810 (Core)

  • 實(shí)驗用虛擬機(jī)的安裝和初始化請參見:
    • 安裝過程:略
    • 配置過程:請參見 《Linux-CentOS7.x_操作系統(tǒng)初始化的簡單介紹》

1.1.2 實(shí)驗網(wǎng)絡(luò)規(guī)劃:

IP 地址規(guī)劃

IP 掩碼 網(wǎng)關(guān) 用途
192.168.80.11 24 192.168.80.2 Django 開發(fā)環(huán)境

端口規(guī)劃

端口 協(xié)議 用途
8000 tcp 開發(fā)服務(wù)器

1.1.3 安裝路徑規(guī)劃

/usr/local/

1.1.4 用戶規(guī)劃

用戶名 密碼 用途

1.2 軟件環(huán)境的準(zhǔn)備

1.2.1 刪除沖突軟件

1.2.2 安裝依賴服務(wù)

本實(shí)驗所用到的 Python 環(huán)境,安裝方法請參見:

《python-Python-安裝的簡單說明》中附B 章節(jié)

1.2.3 安裝依賴軟件

升級 SQLite

詳情請參見 《附A:升級 SQLite》,如果不升級,會報如下錯誤

注:

如果啟動 runserver 報如下錯誤,解決方案詳見:《附A:升級 SQLite》

django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

1.3 獲取 Django 的安裝包

直接通過 pip 方式安裝,不需要單獨(dú)獲取安裝包

2. 安裝 Django

]# pip3 install django

查看 django 的版本

]# python3 -m django --version
2.2.4

3. 基礎(chǔ)配置 Django

3.1 新建一個項目

執(zhí)行如下命令,會在當(dāng)前目錄下新建一個名為 mysite 的目錄

]# cd /usr/local/

]# django-admin startproject mysite
]# tree 
.
└── mysite
    ├── manage.py
    └── mysite
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

2 directories, 5 files

簡單說明:

  • manage.py: 一個讓你用各種方式管理 Django 項目的命令行工具。
  • mysite: 里面一層的 mysite/ 目錄包含你的項目,它是一個純 Python 包。它的名字就是當(dāng)你引用它內(nèi)部任何東西時需要用到的 Python 包名。 (比如 mysite.urls).
    • mysite/__init__.py:一個空文件,告訴 Python 這個目錄應(yīng)該被認(rèn)為是一個 Python 包。
    • mysite/settings.py:Django 項目的配置文件。
    • mysite/urls.py:Django 項目的 URL 聲明,就像你網(wǎng)站的 “目錄”。
    • mysite/wsgi.py:作為你的項目的運(yùn)行在 WSGI 兼容的 Web 服務(wù)器上的入口。

注:

tree 命令通常需要自行安裝,安裝命令如下:

]# yum -y install tree 

3.2 全局配置

3.2.1 數(shù)據(jù)庫配置

此處使用默認(rèn)的 SQLite,因此不再額外配置

]# cd mysite/
]# vim mysite/settings.py
... 省略 ...

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
... 省略 ...

3.2.2 其它配置

  • 更改時區(qū):
]# vim mysite/settings.py
... 省略 ...
LANGUAGE_CODE = 'en-us' --> 'zh-hans'
TIME_ZONE = 'UTC' --> 'Asia/Shanghai'
... 省略 ...
USE_TZ = True --> False

注1:

zh-hans:

  • zh:表示語系
  • hans:表示中文簡體;類似的 hant 就表示中文繁體

注2:

USE_TZ:暫缺,后補(bǔ)

  • 更改訪問權(quán)限:
]# vim mysite/settings.py
... 省略 ...

ALLOWED_HOSTS = [] --> ['*']

... 省略 ...

注1:

如果不更改,使用瀏覽器訪問開發(fā)服務(wù)器時,會報如下錯誤:

You may need to add 'xx.xx.xx.xx' to ALLOWED_HOSTS.
  • 安全設(shè)置
    • SECRET_KEY:這個密匙值是 Django 網(wǎng)站安全策略的一部分。如果在開發(fā)環(huán)境中沒有包好這個密匙,把代碼投入生產(chǎn)環(huán)境時最好用不同的密匙代替。
    • DEBUG:這個會在 debug 日志里輸出錯誤信息,而不是輸入 HTTP 的返回碼。在生產(chǎn)環(huán)境中,它應(yīng)設(shè)置為 false,因為輸出的錯誤信息會幫助想要攻擊網(wǎng)站的人。

3.3 新建一個應(yīng)用

在 Django 中,每一個應(yīng)用都是一個 Python 包,并且遵循著相同的約定。項目和應(yīng)用有啥區(qū)別?

  • 應(yīng)用是一個專門做某件事的網(wǎng)絡(luò)應(yīng)用程序:比如博客系統(tǒng),或者公共記錄的數(shù)據(jù)庫,或者簡單的投票程序。
  • 項目則是一個網(wǎng)站使用的配置和應(yīng)用的集合。
  • 項目可以包含很多個應(yīng)用。應(yīng)用可以被很多個項目使用。

通過以下命令,新建一個名為 login 的 app

]# pwd
/usr/local/mysite

]# python3 manage.py startapp login

]# tree login/
login/
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

1 directory, 7 files

3.4 注冊 login 應(yīng)用

]# vim mysite/settings.py
... 省略 ...

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin', --> admin 管理后臺站點(diǎn)
    'django.contrib.auth', --> 身份認(rèn)證系統(tǒng)
    'django.contrib.contenttypes', --> 內(nèi)容類型框架
    'django.contrib.sessions', --> 會話框架
    'django.contrib.messages', --> 消息框架
    'django.contrib.staticfiles', --> 靜態(tài)文件管理框架
    'polls.apps.PollsConfig', --> 新增(也可以直接簡寫成 polls)
]

... 省略 ...

其實(shí)就是導(dǎo)入的這個 LoginConfig

]# head login/apps.py 
from django.apps import AppConfig


class LoginConfig(AppConfig):
    name = 'login'

3.5 創(chuàng)建首頁視圖

]# vim polls/views.py
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def index(request):
    return HttpResponse("Hello, world. You're at the login page.")

3.6 鏈接 URL 映射器

創(chuàng)建 login/urls.py 文件

]# vim login/urls.py
from django.conf.urls import url
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

設(shè)置由 login 應(yīng)用管理自己的 url 規(guī)則

]# vim mysite/urls.py
... 省略 ...

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', include('login.urls')),
]

4 啟動與驗證

至此一個開發(fā)框架就已經(jīng)搭建完成了,下面我們開始驗證一下

運(yùn)行數(shù)據(jù)庫遷移

]# python3 manage.py makemigrations
]# python3 manage.py migrate

啟動開發(fā)服務(wù)器,驗證項目創(chuàng)建成功

]# python3 manage.py runserver

注:

開發(fā)服務(wù)器默認(rèn)只能本地訪問,如果實(shí)現(xiàn)遠(yuǎn)程訪問,可以執(zhí)行以下命令

]# python3 manage.py runserver 0.0.0.0:8000

在瀏覽器中訪問如下地址

http://192.168.80.11:8000/login/

頁面返回如下內(nèi)容,說明應(yīng)用創(chuàng)建成功

Hello, world. You're at the login page.

附A 升級 SQLite

查看當(dāng)前系統(tǒng)默認(rèn) SQLite 版本

]# sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

下載最新 SQLite 安裝包

寫該文檔時,最新版本為 3.29

]# cd /usr/local/src/
]# wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz

解壓、編譯安裝

]# tar -xzf sqlite-autoconf-3290000.tar.gz
]# cd sqlite-autoconf-3290000/
]# ./configure --prefix=/usr/local/sqlite/
]# make -j$(nproc)
]# make install

更新系統(tǒng) lib 信息

]# echo '/usr/local/sqlite/lib' > /etc/ld.so.conf.d/sqlite.conf
]# ldconfig -v

替換系統(tǒng)默認(rèn)的 SQLite

]# ln -s /usr/local/sqlite/bin/sqlite3 /usr/bin/sqlite3

驗證安裝

]# sqlite3 --version
3.29.0 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6

附B path() 方法的簡單介紹

path() 方法可以接收4個參數(shù),其中2個是必須的:routeview,以及2個可選的參數(shù):kwargsname

  • route:

route 是一個匹配 URL 的準(zhǔn)則(類似正則表達(dá)式)。當(dāng) Django 響應(yīng)一個請求時,它會從 urlpatterns 的第一項開始,按順序依次匹配列表中的項,直到找到匹配的項,然后執(zhí)行該條目映射的視圖函數(shù)或下級路由,其后的條目將不再繼續(xù)匹配。因此,url 路由的編寫順序非常重要!

  • view:

view 指的是處理當(dāng)前 url 請求的視圖函數(shù)。當(dāng) Django 匹配到某個路由條目時,自動將封裝的 HttpRequest 對象作為第一個參數(shù),被“捕獲”的參數(shù)以關(guān)鍵字參數(shù)的形式,傳遞給該條目指定的視圖 view。

  • kwargs:

任意數(shù)量的關(guān)鍵字參數(shù)可以作為一個字典傳遞給目標(biāo)視圖。

  • name:

對你的 URL 進(jìn)行命名,讓你能夠在 Django 的任意處,尤其是模板內(nèi)顯式地引用它。這是一個非常強(qiáng)大的功能,相當(dāng)于給 URL 取了個全局變量名,不會將 URL 匹配地址寫死。

附C 配置后臺使用 Mysql 數(shù)據(jù)庫

創(chuàng)建項目所需的數(shù)據(jù)庫 mysite

> CREATE DATABASE mysite CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysite             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

下載 python 訪問 Mysql 所需的模塊

]# pip3 install mysqlclient

編輯 settings.py 使其支持 Mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'USER': 'root',
        'PASSWORD': 'Emc20160',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
                      "init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
                  }
    }
}

注:

init_command 主要是為了解決以下告警

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
    HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/2.2/ref/databases/#mysql-sql-mode

大意就是沒有給 mysql 連接啟用嚴(yán)格模式,而嚴(yán)格模式能解決很多數(shù)據(jù)完整性問題,官方強(qiáng)烈建議開啟。

嚴(yán)格模式對于數(shù)據(jù)完整性校驗比較嚴(yán)格,對 SQL 語句的健壯性要求更高,比如不允許 NOT NULL 字段插入沒有默認(rèn)值的數(shù)據(jù)等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容