超文本傳輸協議:規定了客戶端與服務端消息傳輸的格式html
1.基於TCP/IP協議做用於應用層的協議 2.基於請求響應 3.無狀態 4.無鏈接
1.請求首行 2.請求頭(一堆k,v鍵值對) 3. //空格不能忘了 4.請求體(post請求攜帶的數據)
1.響應首行 2.響應頭(一堆k,v鍵值對) 3. //空格不能忘 4.響應體(post請求攜帶的數據)
1xx 服務器已經成功接收到數據正在處理,能夠繼續提交其餘數據 2xx 請求成功 服務器已經將你請求的數據發送給你了 3xx 重定向 4xx 請求資源不存在 5xx 服務器錯誤
靜態網頁:前端
頁面上的數據都是寫死的,萬年不變python
動態網頁:web
頁面上的數據是從後端動態獲取的數據庫
後端生成的數據直接傳遞給前端頁面使用(而且前端頁面能夠靈活的操做修改數據)django
模板語法須要依賴於第三方模塊jinja2後端
from jinja2 import Temlate
模板語法 jinjia2支持前端直接使用相似於python的語法操做數據瀏覽器
<!--user_dic是後端定義的變量--> <p>{{user_dic}}</p> <p>{{user_dic.name}}</p> <p>{{user_dic['password']}}</p> <p>{{user_dic.get('name')}}</p> <!--鏈接數據庫--> {% for user in user_dic} <!--數據格式[{},{},{}]--> <tr> <td>{{user_dic.id}}</td> <td>{{user_dic.name}}</td> <td>{{user_dic.password}}</td> </tr> {% endfor %}
簡易版本的web請求流程圖緩存
Django:大而全,自帶了不少功能模塊,相似於航空母艦(缺點:笨重) Flask:短小精悍,自帶的功能模塊特別少,大部分都是依賴於第三方模塊(小而輕) Tornado:異步非阻塞,主要用在處理高io,多路複用的狀況,能夠寫遊戲後端
Django:socket用的別人的wsgiref 路由與視圖函數本身寫的 模板渲染本身寫的 Flask:socket用的別人的werkzeug 路由與視圖函數本身寫的 模板渲染用的別人的jinja2 Tornado:socket、路由與視圖函數、模板渲染都是本身寫的
注意:服務器
django下載:版本問題推薦下載1.11.11版本 命令行直接下載:pip3 install django==1.11.11 驗證是否下載成功:django-admin
方式一(命令行建立): 建立Django項目:django-admin startproject 項目名 建立app應用:python3 manage.py startapp app01 啓動django項目:python3 manage.py runserver ps:用命令行建立django默認不會自動建立templates文件夾,須要你手動本身建立(注意改文件夾路勁是否被添加配置文件中)
方拾二(pycharm建立): FILE => new project選擇第二個,django,須要注意名字不能有中文,選擇本地的解釋器,勾選後臺管理 建立app:1.pycharm命令行鍵 python3 manage.py startapp app01 2.Tools下面run manage task功能欄 啓動:點綠色小箭頭 強調: 1.用jdango必定要保證只有一個在運行狀態 2.必定記得清瀏覽器的緩存
一個django項目就是一所大學
app就是大學裏面的學院
注意新建立的app須要在配置文件中註冊才能生效
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config' #能夠用全稱 'app01' #也能夠用簡寫 ]
應用名: migration 數據遷移記錄相關數據 admin.py django後臺管理相關 models.py 模型表相關 views.py 視圖函數相關 項目名: settings.py 配置文件 urls.py 路由與視圖函數的映射關係 templates: 項目用到的全部的html文件 manage.py: django入口文件
from django.shortcuts import render,HttpResponse,redirect
def index(request): #邏輯代碼 return HttpResonse('ok')
除request參數外還接受一個待渲染的模板文件和一個保存具體數據的字典參數,將數據填充進模板文件,最後把結果返回給瀏覽器
兩種給前端頁面傳值的方式:
def reg(request): user_dic = {'name':'lucas','age':18} return render(request,'reg.html',{'user_dic':user_dic})
def reg(request): user_dic = {'name':'lucas','age':18} return render(request,'reg.html',locals()) #會把上面定義的所有變量傳給前端頁面
接收一個URL參數,表示跳轉到指定的URL
def index(request): #業務邏輯 return redirect('www.baidu.com')