Django部署與配置、Django專案與應用、django模型
一、部署django
1.1 Django概述
1.1.1 Django簡介
Django是一個開源的Web應用框架,由Python寫成。
1.1.2 框架介紹
Django框架的核心包括:
1. 面向物件的對映器,用作資料模型(以Python類的形式定義)和關聯性資料庫間的媒介;
2. 基於正則表示式的URL分發器;
3. 檢視系統,用於處理請求;
4. 模板系統。
1.1.3 MVC模式
1. 把資料存取邏輯、業務邏輯和表現邏輯組合在一起的概念被稱為軟體架構的
Model-View-Controller(MVC)模式
2. 在這個模式中, Model 代表資料存取層,View 代表的是系統中選擇顯示什麼和怎麼顯示的部分,
Controller 指的是系統中根據使用者輸入並視需要訪問模型,以決定使用哪個檢視響應客戶端
3. MVC圖解
1.1.4 MTV模式
1. Django的MTV模式本質上和MVC是一樣的,也是為
了各元件間保持鬆耦合關係,只是定義上有些許不同
– M 代表模型(Model):負責業務物件和資料庫的關
系對映(ORM)
– T 代表模板 (Template):負責如何把頁面展示給使用者
(html)
– V 代表檢視(View):負責業務邏輯,並在適當時候
呼叫Model和Template
2. 除了以上三層之外,還需要一個URL分發器,它的作
用是將一個個URL的頁面請求分發給不同的View處理,
View再呼叫相應的Model和Template
1.1.5 MTV響應模式
1. Web伺服器(中介軟體)收到一個http請求
2. Django在URLconf裡查詢對應的檢視(View)函式來處理http請求
3. 檢視函式呼叫相應的資料模型來存取資料、呼叫相應的模板向用戶展示頁面
4. 檢視函式處理結束後返回一個http的響應給Web伺服器
1.2 安裝django
1.2.1 python虛擬環境
django虛擬環境是一組隔離的資源,相當於docker容器
1.2.2 使用python虛擬環境
1. Python3中已經自帶虛擬環境,只要建立並激活即可
[[email protected] ~]# mkdir pyproject
[[email protected] ~]# cd pyproject/
[[email protected] pyproject]# python3 -m venv django_env #建立虛擬環境
[[email protected] pyproject]# source django_env/bin/activate #啟用虛擬環境
(django_env) [[email protected] pyproject]#
1.2.3 安裝django
1. 在啟用的虛擬環境中安裝django
(django_env) [[email protected] pyproject]# pip install django==1.11.6
2.如果安裝過於緩慢,可以使用國內映象站點
(django_env) [[email protected] pyproject]# cat ~/.pip/pip.conf
[global]
index-url=http://pypi.douban.com/simple/
[install]
trusted-host=pypi.douban.com
1.2.4 驗證django
1.Django安裝完畢後,就可以匯入相關模組了
(django_env) [[email protected] pyproject]# python
Python 3.6.4 (default, Apr 27 2018, 08:26:23)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.__version__
'1.11.6'
1.2.5 在pycharm中修改專案直譯器
File -> Settings -> Project Interpreter -> 齒輪,add local -> existing environment -> 找到/root/pyproject/bin/python
二、Django專案與應用
2.1 管理專案
2.1.1 建立專案
1. Djanog可以自動生成一些程式碼,這些程式碼建立一個
Django專案:一個Django例項的設定集合,包括數
據庫的配置、Django有關的選項和應用有關的選項
(django_env) [[email protected] pyproject]# django-admin startproject mysite
(django_env) [[email protected] pyproject]# tree mysite
mysite
├── manage.py
└── mysite
├── __init__.py
├── settigs.py
├── urls.py
└── wsgi.py
1 directory, 5 files
2.專案檔案說明
1. 外層的mysite/根目錄僅僅是專案的一個容器。 它的
名字與Django無關;可以將其重新命名為你喜歡的任
何內容
2. manage.py:一個命令列工具,可以使用多種方式
對Django專案進行互動。 可以在django-admin和
manage.py中讀到關於manage.py的所有細節
3. 內層的mysite/目錄是專案的真正的Python包。 它是
匯入任何東西時將需要使用的Python包的名字(例
如 mysite.urls)
2.1.2 在pycharm中配置django
file->settings->languages&frame works->Django
2.1.3 啟動內建伺服器
1. django專案最終應該放到apahce/nginx伺服器上,對外提供服務。在開發過程中,
為了方便,django提供了一個內建的伺服器。
2. 啟動內建伺服器,0:80是0.0.0.0:80的簡寫
(djenv) [[email protected] mysite]# python manage.py runserver 0:80
訪問http://127.0.0.1/可以看到預設頁面
2.1.4 修改設定
1. Django預設只允許本機訪問、英文環境,這些均可在settings.py中進行修改
# vim mysite/settings.py
ALLOWED_HOSTS = '*'
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
2.1.5 配置django預設連線的是mysql資料庫
1. 在mariadb中為django專案建立資料庫
[[email protected] mysite]# mysql -uroot -p12345
MariaDB [(none)]> CREATE DATABASE djangoDB DEFAULT CHARSET utf8;
2. 修改資料庫設定
# vim mysite/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangoDB',
'USER': 'root',
'PASSWORD': 'tedu.cn',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
3. 配置pymysql模組
(djenv) [[email protected] mysite]# pip install pymysql // python3不能直接使用mysqldb連線資料庫
# vim mysite/__init__.py
import pymysql
pymysql.install_as_MySQLdb()
2.1.6 生成表
(djenv) [[email protected] mysite]# python manage.py migrate
2.1.7 建立管理員賬號
(djenv) [[email protected] mysite]# python manage.py createsuperuser
2.1.8 管理員登入後臺
1. 一旦建立了專案,django自動生成了後臺管理頁面http://127.0.0.1:8000/admin
2.2 管理應用
2.2.1 建立應用
1. 應用可以放在Python path上的任何位置
2. 可以在manage.py檔案同級目錄建立應用,以便可
以將它作為頂層模組匯入,而不是mysite的子模組
(django_env) [[email protected] mysite]# python manage.py startapp polls
2.2.2 啟用應用
1. 建立應用後,需要將其安裝到專案中,否則應用不會生效
# vim mysite/settigs.py:
INSTALLED_APPS = [
...
'polls',
]
2.2.3 配置URLconf
1. 配置路由URLConf,當訪問http://127.0.0.1/polls/開頭的網址,都交由polls應用處理。
當用戶訪問一個網址時,都是找到mysite/urls.py查詢使用哪個檢視函式去處理。可以在該
檔案中授權將以http://127.0.0.1/polls/開頭的網址,交給polls/urls.py處理
# vim mysite/urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
2.2.4 建立polls應用的URLconf,配置訪問polls應用首頁的檢視
# vim polls/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index') # http://127.0.0.1/polls/
]
2.2.5 建立polls應用主頁的檢視
# vim polls/views.py
from django.shortcuts import render, HttpResponse
def index(request):
return HttpResponse('<h1>Polls OK</h1>')
2.2.6 驗證應用
訪問polls應用主頁http://127.0.0.1/polls/,返回正確結果
三、django模型
3.1 ORM對映
3.1.1 模型理念
django模型是指實體類,這個類包含了屬性和方法。這個類的類名對應資料庫表名,屬性對應資料庫裡面的欄位名
3.1.2 模型說明
1. 每個模型都用一個類表示,該類繼承自django.db.models.Model
2. 每個模型都有一些類變數,在模型中每個變數都代表了資料庫中的一個欄位
3. 每個欄位通過Field類的一個例項表示 —— 例如字元欄位CharField和日期欄位DateTimeField。 這種方
法告訴Django,每個欄位中儲存著什麼型別的資料
3.1.3 polls應用模型
1. 在這個簡單的投票應用中,我們將建立兩個模型:Question和Choice
2. Question物件具有一個question_text(問題)屬性和一個publish_date(釋出時間)屬性
3. Choice有兩個欄位:問題選項和選項的得票統計
4. 每個Choice與一個Question關聯
3.1.4 編寫模型
# vim polls/models.py
from django.db import models
#Question模型用於記錄問題型別,和釋出時間
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('data published')
def __str__(self):
return self.question_text
#Choice模型用於記錄問題的選擇和票數
class Choice(models.Model):
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)
question=models.ForeignKey(Question,on_delete=models.CASCADE) //外來鍵的值來自主鍵
def __str__(self):
return self.choice_text
3.2 資料庫管理
3.2.1 遷移Django儲存模型
1. polls應用建立了新的模型,該模型需要反饋到資料庫中
2. 通過執行makemigrations告訴Django,已經對模型做了一些更改,並且會將這些更改記錄為遷移檔案
3. 遷移檔案位於polls/migrations/目錄下
4. 通過執行migrate才真正把資料遷移到資料庫中
(djenv) [[email protected] mysite]# python manage.py makemigrations
(djenv) [[email protected] mysite]# python manage.py migrate
3.2.2 檢視資料庫
MariaDB [django]> desc polls_question;
MariaDB [django]> desc polls_question;
3.2.3 將模型註冊到管理後臺
1. 投票的問題和選項,可以通過後臺進行錄入、編輯
2. 只要把模型註冊到後臺管理介面即可
# vim polls/admin.py
from django.contrib import admin
from .models import Question,Choice
admin.site.register(Question,QuestionAdmin)
admin.site.register(Choice,ChoiceAdmin)
3.訪問管理後臺,可以看到兩個模型
3.3 自定義管理後臺
3.3.1 後面增加顯示的欄位
# vim polls/admin.py
from django.contrib import admin
from .models import Question, Choice
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'publish_date')
class ChoiceAdmin(admin.ModelAdmin):
list_display = ('question', 'choice_text', 'votes')
# admin.site.register(Question)
# admin.site.register(Choice)
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice, ChoiceAdmin)
3.3.2 為問題增加時間過濾器
# vim polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'publish_date')
list_filter = ('publish_date',) # 增加此項
3.3.3 為Question增加時間軸,點選時間,可以看到某個時間釋出的問題
# vim mysite/settings.py
USE_TZ = False #無時區的時間儲存
# vim polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'publish_date')
list_filter = ('publish_date',)
date_hierarchy = 'publish_date'
3.3.4 增加搜尋,可以通過問題中的關鍵字時行搜尋
# vim polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'publish_date')
list_filter = ('publish_date',)
date_hierarchy = 'publish_date'
search_fields = ('question_text',)
3.3.5 新增choice時,顯示Question的詳情(注意,必須是外來鍵關係)
# vim polls/admin.py
class ChoiceAdmin(admin.ModelAdmin):
list_display = ('question', 'choice_text', 'votes')
raw_id_fields = ('question',)
3.3.6 為question增加預設排序,第一標準是時間,第二標準是問題
# vim polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'publish_date')
list_filter = ('publish_date',)
date_hierarchy = 'publish_date'
search_fields = ('question_text',)
ordering = ('-publish_date', 'question_text') # -publish_date 表示降序排列