框架,即framework ['fremwɝk],特指爲解決一個開放性問題而設計的具備必定約束性的支撐結構,使用框架能夠幫你快速開發特定的系統,簡單地說,就是你用別人搭建好的舞臺來作表演。css
對於全部的web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。html
最簡單的Web應用就是先把HTML用文件保存好,用一個現成的HTTP服務器軟件,接收用戶請求,從文件中讀取HTML,返回。python
若是要動態生成HTML,就須要把上述步驟本身來實現。不過,接受HTTP請求、解析HTTP請求、發送HTTP響應都是苦力活,若是咱們本身來寫這些底層代碼,還沒開始寫動態HTML呢,就得花個把月去讀HTTP規範。mysql
正確的作法是底層代碼由專門的服務器軟件實現,咱們用Python專一於生成HTML文檔。由於咱們不但願接觸到TCP鏈接、HTTP原始請求和響應格式,因此,須要一個統一的接口,讓咱們專心用Python編寫Web業務。web
這個接口就是WSGI:Web Server Gateway Interface。sql
MVC模式:所謂MVC就是把Web應用分爲模型(M),控制器(C)和視圖(V)三層;他們之間以一種插件式的、鬆耦合的方式鏈接在一塊兒,模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互(頁面),控制器接受用戶的輸入調用模型和視圖完成用戶的請求,其示意圖以下所示:數據庫
Django的MTV模式本質上和MVC是同樣的,也是爲了各組件間保持鬆耦合關係,只是定義上有些許不一樣,Django的MTV分別是值:django
除了以上三層以外,Django還須要一個 url 分發器,它的做用是將一個個 url 的頁面請求分發給不一樣的 view 處理,view 再調用相應的 Model 和 Template,MTV的響應模式以下所示:後端
通常是用戶經過瀏覽器向咱們的服務器發起一個請求(request),這個請求回去訪問視圖函數,(若是不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶),視圖函數調用模型,模型去數據庫查找數據,而後逐級返回,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。瀏覽器
# 指定版本安裝,不指定版本將安裝最新版 pip install django==1.11.16
# 當前目錄下建立Django項目 django-admin startproject mysite
# 在mysite目錄下建立應用 python manage.py startapp 應用名
# 啓動django項目,在項目的根目錄下 python manage.py runserver IP:端口 python manage.py runserver 端口 python manage.py runserver
1.若是沒有Templates(存放Html文件的配置)就建立一個 2.註釋掉setting.py中'django.middleware.csrf.CsrfViewMiddleware'(當出現Forbidden(403)錯誤時,通常是這行沒有被註釋)
複習回來補充:(之後不用註釋掉了)
csrf(跨站請求僞造),在頁面的 form 表單裏面寫上 {% csrf_token %}
當提交POST數據的時候,Django的這個中間件會作檢驗,若是校驗不經過則拒絕這次請求
3.在setting.py最後中加入如下內容,用來存放全部靜態文件(css/js/圖片)的路勁 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), ]
4.在項目根目錄下建立一個static目錄,用來存放靜態文件,固然也能夠建立多個,好比static1,static2,但不必
1.ORM不能建立數據庫,因此得本身事先建立好; 2.在setting.py中設置鏈接數據庫的配置,把原來的註釋或刪掉; DATABASES = { 'default':{ 'ENGINE': 'django.db.backends.mysql', # 鏈接的數據庫類型 'USER': 'root', # 用戶名 'PASSWORD': '', # 密碼 'HOST': '127.0.0.1', # 鏈接數據庫的地址 'PORT': 3306, # 端口 'NAME': 'testdb' # 使用的數據庫名稱(要事先建立好) } } 3.告訴Django用pymysql代替默認的MySQLDB鏈接我們的MySQL數據庫,在項目下的__init__.py文件中,加入下面兩句: import pymysql pymysql.install_as_MySQLdb() 4.在建立的應用(好比appxx/blog)目錄下的models.py文件中定義一個類,這個類必須繼承models.Model,示例以下: class UserInfo(models.Model): id = models.AutoField(primary_key=True) # 建立一個自增的主鍵字段 name = models.CharField(null=False, max_length=20) # 建立一個varchar(20)類型的不能爲空的字段 5.依次執行下面兩條命令,便可在相應的數據庫(好比上面寫的testdb)下新建項目須要的表: python manage.py makemigrations # 生成同步數據庫的腳本 python3 manage.py migrate # 同步數據庫
在views.py文件裏寫一個登陸函數:
登陸失敗返回的 login.html 頁面會帶有反饋信息給用戶
在url.py文件裏寫映射關係:
將寫好的 login.html 文件放置在 templates 目錄下,將要用到的靜態文件(CSS,JS,圖片)放置在 static 目錄:
通過了一番配置後,就能夠啓動Django項目了,在pycharm的右上角有個三角的綠色圖標,點擊便可讓服務跑起來了,在瀏覽器輸入相應的IP地址和端口便可訪問頁面了。
5.1 當在建立APP時,必定要記得在setting.py文件裏添加下面圖片箭頭中的那一行,新建的APP叫什麼名字就寫對應的信息
5.2 ORM的對應關係,在models.py文件裏寫類,多少個類就對應多少張表
5.3 ORM單表的查詢數據和增長數據
5.4 GET請求和POST請求
5.5 form表單日後端提交數據須要注意三點:
5.6 render() 與 redirect()
就拿上面登陸這個例子說吧
上圖中的 user_list 也是 html 文件,可是用 redirect() 就寫成 "/user_list/" ,而用 render() 就須要有 request,"add_user.html" 也不一樣