標籤:應用 其他 template 開啟 不用 映射關係 技術分享 you use
Django架構簡介一、軟體架構模式MVC和MTV1、MVC模型
MVC(model view controller)是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(model)、視圖(view)和控制器(controller),具有耦合性低,重用性高,生命週期成本低等優點。
2、MTV模型
Django架構的設計模式借鑒了MVC架構的思想,也是分別三部分,來降低各個部分之間的耦合性。
Django的MTV分別代表:
Model(模型):和資料庫相關的,負責業務對象與資料庫的對象(ORM)
Template(模板):放所有的html檔案,負責如何把頁面展示給使用者
模板文法:目的是將自變數(資料庫的內容)如何巧妙的嵌入到html頁面中
View(視圖):負責商務邏輯,並在適當的時候調用Model和Template
此外,Django還有一個URL分發器。它的作用是將一個個URL的頁面請求分別發給不同的Views處理,Views再調用相應的Model和Template。
3、MVC和MTCV的比較
二、Django 下載安裝
查看django版本:
cmd——>python -m django --version
pycharm——> import django ; print(django.version)
命令列下載安裝:
dos視窗中:pip install django== 1.11.15 # 等號後為版本號碼,不加的話預設安裝最新版本pip install -i https://pypi.doubanio.com/simple/ django==1.11.15(或者-i 指定源)
pycharm的方式安裝
開啟pycharm -->file -->settings --> project interpreter --> 點擊右側綠色加號 -->在彈出對話方塊中輸入django -->選中specify version,指定下載版本,預設最高版 -->最後點擊左下角 install package註:預設從https://pypi.python.org/simple下載模組,可更改國內的豆瓣源,點擊install package 右側的Manage Repositories 在裡面添加其它的源,如https://pypi.doubanio.com/simple/
詳細見:
三、建立Django項目對象 命令列建立:
切換目錄到預存放專案檔的檔案目錄django-admin startproject 項目名稱eg: django-admin startproject myblog
組建目錄結構如下:
- manage.py------開機檔案 (Django項目裡面的工具,通過它可以調用Django shell的數目和資料庫等)
- settings.py------包含了項目的一些設定,包括資料庫資訊、調試標誌以及其他一些工作的變數。
- urls.py-----------路徑與視圖函數的映射關係
- wsgi.py ...........幫我們實現socket,響應http請求
註:命令列建立,不會建立templates模板【用於僅存放html檔案,css,js等靜態檔案放到建立的static目錄中】,
需要自己在項目根目錄即與manage.py同級目錄下建立templates檔案夾,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,‘templates‘)
pycharm方式建立
開啟pycharm--->file ---->new project ---> 選中django
建立完成後項目目錄結構如下:
註:上面app01為建立的一個應用,Mysite為建立django目錄時,自動在項目名下建立一個同名的目錄。
四、啟動Django項目 1、命令列方式
切換到django項目根目錄下(含有manage.py 的檔案)# 預設為本地,連接埠為8000python manage.py runserver # 127.0.0.1:8000 # 可修改連接埠python manage.py runserver 80 # 127.0.0.1:80# 可修改ip和連接埠,4個零表示所有人都可以訪問python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80註:當項目上線後,需將ip和連接埠改為實際的
2、pycharm方式
一個項目就是一個包,不要單獨執行某個py檔案,而是運行整個項目
五、建立應用
註:因為一個項目要實現多個功能,因此一個Django項目可以分為很多個APP,用來隔離不同功能模組的代碼
如果不建立app也可以執行項目,即視圖函數直接寫在urls.py中,在settings.py中配置相關的模板,資料庫資訊,靜態檔案等資訊。
命令列建立app
python manage.py startapp 應用程式名稱eg: python manage.py startapp app01
執行命令後,項目目錄下多出一個app01的檔案夾,目錄結構如下:
app01/ migrations 記錄修改models即orm操作資料庫的更改資訊,每次更改都會在改目錄下建立一個檔案 __init__.py __init__.py admin.py apps.py 記錄app資訊,當在settings.py中註冊app時是從此處找 models.py 記錄建立類【即相當如向資料庫中建立表】在此處建立 tests.py views.py 本app自己的商務邏輯函數即視圖函數寫在這裡
使用PyCharm建立
可以使用PyCharm的manage.py工具來執行命名。在主功能表列中選擇Tools,在下拉式功能表中選擇Run manage.py task,會出現如所示的工具對話方塊:
在彈出的命令視窗中直接輸入下面的命令便可建立app:
startapp app01
使用PyCharm的manage.py工具執行命令時,只用輸入命令及參數即可,不再輸入python manage.py了。
註冊app應用
建立完app後,想要使用,需先註冊才能使用,在django根目錄下的settings.py檔案中的INSTALLED_APPS模組中註冊app資訊
格式如下:
應用程式名稱.apps.應用程式名稱Config
樣本:【本質是匯入應用目錄下apps中為app建立的類】
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘classModel.apps.ClassmodelConfig‘]
apps.py檔案內容如:
六、配置django項目與資料庫mysql的串連
1、安裝mysql資料庫軟體
2、安裝 模組pymysql【python3.6後串連mysql只能用pymysql】
cmd--> pip3 install pymysql
3、手動串連資料庫,建立一個庫及建立一個操作此資料庫的使用者,賦予許可權【django的ORM只能建立表,不能建立庫】
# 建立庫create database db_name charset utf8;# 建立使用者及賦予許可權grant all privileges on db_name.* to ‘userName‘@‘ip‘ identified by ‘pwd‘;
4、在Django項目總設定檔setting.py同級目錄下[不是app下的__init__]的__init__.py檔案中設定項目使用pymysql來操作資料庫
import pymysqlpymysql.install_as_MySQLdb() # 告知django使用pymysql來串連書庫
5、在Django項目總設定檔setting.py中的DATABASES模組中配置串連資料庫相關資訊,格式如下
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, # 修改資料庫引擎,預設為sqlite3文本資料庫 ‘NAME‘: ‘db_name‘, ‘USER‘: ‘**‘, ‘PASSWORD‘:‘***‘, ‘HOST‘:‘ip‘, ‘PORT‘: 3306, # 注意是數字,不是字串 } }
6、建表 在應用app的目錄下的models.py中寫類【必須繼承models.Model類】
from django.db import models # 需先匯入models模組class Class(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=20, unique=True) def __str__(self): return self.name# 在orm中類 對應資料庫中的 表對象 對應資料庫中的 記錄(資料行)屬性 對應資料庫中的 欄位
7、建好類即表後,執行資料庫遷移命令【讓建立的表在資料庫中產生】
# 記錄models.py中類是不是有變化 將變化的內容記錄下來 python manage.py makemigrations# 將model的變更同步到資料庫中python manage.py migrate註:執行第一條命令後models.py中的變化就會在到migrations目錄中建立一個新的檔案並將變化寫入其中
如果在原有表張增加欄位的話,會提示要設定預設值,因為新的那列資料不可為空
七、項目啟動後相關配置 1、更改setting.py
1.1、檢查項目BASE_DIR是否如下:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
1.2、配置ALLOWED_HOSTS可以運行本項目的ip,‘*‘ 代表所有
ALLOWED_HOSTS = [‘*‘,‘127.0.0.1’,‘192.168.19.66’]
註:如想別人訪問你的網站,需在啟動項目時將ip配置為0.0.0.0,如何將運行項目的ip寫入上面列表,使用者就可以通過你的主機ip訪問你的網站了
1.3、配置INSTALLED_APPS,為建立的應用app進行註冊,不然操作資料庫時報錯
格式:‘app_name.Apps.AppName.Config‘ 或 ‘app_name’
INSTALLED_APPS = [ ‘classModel.apps.ClassmodelConfig‘]
1.4、配置中介軟體MIDDLEWARE,注釋csrf,讓後台能夠接收所有的post請求,不關閉django將對不合法的post攔截403
將 ‘django.middleware.csrf.CsrfViewMiddleware‘注釋掉,否則會出現下面的情況。
註:上面的方案,不建議使用,不安全,可以在html檔案中要發送post請求的from表單裡加入{% csrf_token %}就不用注釋上面的csrf的中介軟體了
如:
前端實際效果為:
1.5、配置模組templates 中的DIRS需要檢查下是否為空白,如果為空白,添加上os.path.join(BASE_DIR,‘templates‘)
命令建立的項目未建立模板templates目錄,需自己建立。
這是模板中沒有設定,設定模板在python安裝目錄中找到如的路徑,開啟settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,‘templates‘)。下次建立項目就可不再手動添加。
1.6、settings.py中增加靜態檔案目錄STATICFILES_DIRS【(js,css,image)存放目錄】,這是放在templates中html檔案能夠使用js,css資源的關鍵
在項目根目錄即與manage.py檔案同級下建立靜態檔案夾static,如果有多個就建立多個,但網頁中不論是放在那個檔案中,開始都以/static/開頭
1.7、templates檔案夾下建立/或存放HTML檔案,將html的js,css,imgs等檔案放入images
2、編輯urls.py檔案,增加映射關係。
業務函數的實現,業務函數與url的映射可都在此檔案中書寫,以後正常化,可將業務函數移入到應用的views.py中,此檔案僅編輯業務函數與url的映射關係,再匯入views.py中所有的業務函數
即from app名 import views
為:直接將視圖函數寫在全域urls.py檔案中
八、訪問web
1、區域網路中的瀏覽器輸入HTTP://IP:PORT/login 就可訪問驗證。
九、如何完全的刪除一個應用app?
1.刪除models.py
無論是刪除一個單獨的model還是刪除整個App,都需要首先刪除models.py檔案中的模型。
確認沒有其他檔案引用models.py中的類。
遷移或者刪除你的資料庫,Django提供了簡便的方法方便使用者刪除某App下的所有資料(Django 1.7)。
python manage.py migrate your_app_name zero
刪除models.py中的資料模型。
2.刪除App
再次確認其他App中沒有引用此App的檔案
刪除整個App檔案夾
在settings.py的Installed Apps中移除該app
在urls.py中移除該App相關內容。
十、Django快速開發配置小結:
在app的models.py建立類(即資料庫中的表)
在views.py下建立業務視圖函數[匯入orm模組]
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
from classModel import models
在django的templates目錄下建立前端html檔案
在在django的static目錄下存放js,css.images 檔案
在urls.py下建立映射關係
from classModel import views
Django架構-基礎篇