1. 程式人生 > >Django部署與配置、Django專案與應用、django模型

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 表示降序排列