MVC(model view controller)是軟件工程中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(model)、視圖(view)和控制器(controller),具備耦合性低,重用性高,生命週期成本低等優勢。css
Django框架的設計模式借鑑了MVC框架的思想,也是分別三部分,來下降各個部分之間的耦合性。html
Django的MTV分別表明:前端
Model(模型):和數據庫相關的,負責業務對象與數據庫的對象(ORM)python
Template(模板):放全部的html文件,負責如何把頁面展現給用戶mysql
模板語法:目的是將自變量(數據庫的內容)如何巧妙的嵌入到html頁面中web
View(視圖):負責業務邏輯,並在適當的時候調用Model和Templatesql
此外,Django還有一個URL分發器。它的做用是將一個個URL的頁面請求分別發給不一樣的Views處理,Views再調用相應的Model和Template。shell
查看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 -->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
生成目錄結構以下:
注:命令行建立,不會建立templates模板【用於僅存放html文件,css,js等靜態文件放到新建的static目錄中】,
須要本身在項目根目錄即與manage.py同級目錄下建立templates文件夾,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,'templates')
打開pycharm--->file ---->new project ---> 選中django
建立完成後項目目錄結構以下:
注:上面app01爲建立的一個應用,Mysite爲建立django目錄時,自動在項目名下創建一個同名的目錄。
切換到django項目根目錄下(含有manage.py 的文件) # 默認爲本地,端口爲8000 python 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和端口改成實際的
一個項目就是一個包,不要單獨執行某個py文件,而是運行整個項目
注:由於一個項目要實現多個功能,所以一個Django項目能夠分爲不少個APP,用來隔離不一樣功能模塊的代碼
若是不創建app也能夠執行項目,即視圖函數直接寫在urls.py中,在settings.py中配置相關的模板,數據庫信息,靜態文件等信息。
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的manage.py工具來執行命名。在主菜單欄中選擇Tools,在下拉菜單中選擇Run manage.py task,會出現以下圖所示的工具對話框:
在彈出的命令窗口中直接輸入下面的命令即可建立app:
startapp app01
使用PyCharm的manage.py工具執行命令時,只用輸入命令及參數便可,再也不輸入python manage.py了。
建立完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文件內容以下圖:
一、安裝mysql數據庫軟件
二、安裝 模塊pymysql【python3.6後鏈接mysql只能用pymysql】
cmd--> pip3 install pymysql
三、手動鏈接數據庫,建立一個庫及建立一個操做此數據庫的用戶,賦予權限【django的ORM只能建立表,不能建立庫】
# 建立庫
create database db_name charset utf8;
# 建立用戶及賦予權限
grant all privileges on db_name.* to 'userName'@'ip' identified by 'pwd';
四、在Django項目總配置文件setting.py同級目錄下[不是app下的__init__]的__init__.py文件中配置項目使用pymysql來操做數據庫
import pymysql
pymysql.install_as_MySQLdb() # 告知django使用pymysql來鏈接書庫
五、在Django項目總配置文件setting.py中的DATABASES模塊中配置鏈接數據庫相關信息,格式以下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 修改數據庫引擎,默認爲sqlite3文本數據庫
'NAME': 'db_name',
'USER': '**',
'PASSWORD':'***',
'HOST':'ip',
'PORT': 3306, # 注意是數字,不是字符串
}
}
六、建表 在應用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中
類 對應數據庫中的 表
對象 對應數據庫中的 記錄(數據行)
屬性 對應數據庫中的 字段
七、建好類即表後,執行數據庫遷移命令【讓建立的表在數據庫中生成】
# 記錄models.py中類是否是有變化 將變化的內容記錄下來
python manage.py makemigrations
# 將model的變動同步到數據庫中
python manage.py migrate
注:執行第一條命令後models.py中的變化就會在到migrations目錄中建立一個新的文件並將變化寫入其中
若是在原有表張增長字段的話,會提示要設置默認值,由於新的那列數據不能爲空
1.一、檢查項目BASE_DIR是否以下:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
1.二、配置ALLOWED_HOSTS能夠運行本項目的ip,'*' 表明全部
ALLOWED_HOSTS = ['*',‘127.0.0.1’,‘192.168.19.66’]
注:如想別人訪問你的網站,需在啓動項目時將ip配置爲0.0.0.0,如何將運行項目的ip寫入上面列表,用戶就能夠經過你的主機ip訪問你的網站了
1.三、配置INSTALLED_APPS,爲建立的應用app進行註冊,否則操做數據庫時報錯
格式:'app_name.Apps.AppName.Config' 或 ‘app_name’
INSTALLED_APPS = [
'classModel.apps.ClassmodelConfig'
]
1.四、配置中間件MIDDLEWARE,註釋csrf,讓後臺可以接收全部的post請求,不關閉django將對不合法的post攔截403
將 'django.middleware.csrf.CsrfViewMiddleware'註釋掉,不然會出現下面的狀況。
注:上面的方案,不建議使用,不安全,能夠在html文件中要發送post請求的from表單里加入{% csrf_token %}就不用註釋上面的csrf的中間件了
以下圖:
前端實際效果爲:
1.五、配置模塊templates 中的DIRS須要檢查下是否爲空,若是爲空,添加上os.path.join(BASE_DIR,'templates')
命令建立的項目未建立模板templates目錄,需本身建立。
這是模板中沒有設置,設置模板在python安裝目錄中找到以下圖的路徑,打開settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,'templates')。下次建立項目就可再也不手動添加。
1.六、settings.py中增長靜態文件目錄STATICFILES_DIRS【(js,css,image)存放目錄】,這是放在templates中html文件可以使用js,css資源的關鍵
在項目根目錄即與manage.py文件同級下建立靜態文件夾static,若是有多個就建立多個,但網頁中不管是放在那個文件中,開始都以/static/開頭
1.七、templates文件夾下建立/或存放HTML文件,將html的js,css,imgs等文件放入images
業務函數的實現,業務函數與url的映射可都在此文件中書寫,之後規範化,可將業務函數移入到應用的views.py中,此文件僅編輯業務函數與url的映射關係,再導入views.py中全部的業務函數
即from app名 import views
下圖爲:直接將視圖函數寫在全局urls.py文件中
一、局域網中的瀏覽器輸入HTTP://IP:PORT/login 就可訪問驗證。
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相關內容。
在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