MVC和MTV框架html
Web服務器開發領域裏著名的MVC模式,所謂MVC就是把Web應用分爲模型(M),控制器(C)和視圖(V)三層,他們之間以一種插件式的、鬆耦合的方式鏈接在一塊兒,模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互(頁面),控制器接受用戶的輸入調用模型和視圖完成用戶的請求,其示意圖以下所示:python
M:model.py 就是和數據庫打交道用的,建立表等操做web
V:View 視圖(視圖函數,html文件)shell
C:controller 控制器(其實就是我百度雲代碼裏面那個urls文件裏面的內容,url(路徑)分發與視圖函數的邏輯處理)數據庫
Django的MTV模式本質上和MVC是同樣的,也是爲了各組件間保持鬆耦合關係,只是定義上有些許不一樣,Django的MTV分別是值:django
除了以上三層以外,還須要一個URL分發器,它的做用是將一個個URL的頁面請求分發給不一樣的View處理,View再調用相應的Model和Template,MTV的響應模式以下所示:小程序
通常是用戶經過瀏覽器向咱們的服務器發起一個請求(request),這個請求回去訪問視圖函數,(若是不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶),視圖函數調用模型,模型去數據庫查找數據,而後逐級返回,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。瀏覽器
Django官網下載頁面服務器
在cmd命令提示符或者pycharm中terminal中輸入:微信
pip3 install django==1.11.9
在cmd命令提示符輸入:
django-admin startproject mydjango 建立了一個名爲"mydjango "的Django 項目:
當前目錄下會生成mydjango的工程,目錄結構以下:(你們注意昂,pip下載下來的django你就理解成一個模塊,而不是django項目,這個模塊能夠幫咱們建立django項目)
python manage.py runserver 127.0.0.1:8001 #此時已經能夠啓動django項目了,只不過什麼邏輯也沒有
你會發現,上面沒有什麼view視圖函數的文件啊,這裏咱們說一個應用與項目的關係,上面咱們只是建立了一個項目,並無建立應用,以微信來舉例,微信是否是一個大的項目,可是微信裏面是否是有不少個應用,支付應用、聊天應用、朋友圈、小程序等這些在必定程度上都是相互獨立的應用,也就是說一個大的項目裏面能夠有多個應用,也就是說項目是包含應用的,它沒有將view放到這個項目目錄裏面是由於它以爲,一個項目裏面能夠有多個應用,而每一個應用都有本身這個應用的邏輯內容,因此他以爲這個view應該放到應用裏面,好比說咱們的微信,剛纔說了幾個應用,這幾個應用的邏輯能放到一塊兒嗎,放到一塊兒是否是就亂套啦,也很差管理和維護,因此這些應用的邏輯都分開來放,它就幫咱們提煉出來了,提煉出來一個叫作應用的東西,因此咱們須要來建立這個應用。
python manage.py startapp app01 #經過執行manage.py文件來建立應用,執行這句話必定要注意,你應該在這個manage.py的文件所在目錄下執行這句話,由於其餘目錄裏面沒有這個文件 python manage.py startapp app02 #每一個應用都有本身的目錄,每一個應用的目錄下都有本身的views.py視圖函數和models.py數據庫操做相關的文件
models.py :以前咱們寫的那個名爲model的文件就是建立表用的,這個文件就是存放與該app(應用)相關的表結構的
views.py :存放與該app相關的視圖函數的
python manage.py runserver 8001 # python manage.py runserver 127.0.0.1:8001,本機就不用寫ip地址了 若是連端口都沒寫,默認是本機的8000端口
用pycharm來建立django項目:
修改login.html文件內容:
示例:用戶登錄,登錄成功跳轉index.html 頁面,失敗顯示文字:
urls.py:
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^login/', views.login), ]
views.py:
from django.shortcuts import render,HttpResponse # Create your views here. def login(request): if request.method =='GET': return render(request,'login.html',{'username':'alex'}) else: username = request.POST.get('username') password = request.POST.get('password') if username == 'xu' and password == '123': return render(request,'index.html') else: return HttpResponse('登錄失敗!')
login.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>當前用戶是{{ username }}</h1> <form action="/login/" method="post"> 用戶名: <input type="text" name="username"> 密碼: <input type="password" name="password"> <input type="submit"> </form> </body> </html>
index.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>登錄成功!</h1> </body> </html>
注意:須要將settings中
'django.middleware.csrf.CsrfViewMiddleware',
註釋掉