WEB框架與Django簡介
HTTP協議:
? 超文本傳輸協議:規定了客戶端與服務端消息傳輸的格式
四大特性:
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 服務器錯誤
動靜態網頁:
靜態網頁:
? 頁面上的數據都是寫死的,萬年不變
動態網頁:
? 頁面上的數據是從后端動態獲取的
模板渲染
后端生成的數據直接傳遞給前端頁面使用(并且前端頁面可以靈活的操作修改數據)
模板語法需要依賴于第三方模塊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請求流程圖
web框架
python三大主流框架:
Django:大而全,自帶了很多功能模塊,類似于航空母艦(缺點:笨重)
Flask:短小精悍,自帶的功能模塊特別少,大部分都是依賴于第三方模塊(小而輕)
Tornado:異步非阻塞,主要用在處理高io,多路復用的情況,可以寫游戲后端
各自特點:
Django:socket用的別人的wsgiref
路由與視圖函數自己寫的
模板渲染自己寫的
Flask:socket用的別人的werkzeug
路由與視圖函數自己寫的
模板渲染用的別人的jinja2
Tornado:socket、路由與視圖函數、模板渲染都是自己寫的
Django簡介
注意:
- 1.計算機的名稱不能有中文
- 2.一個pycharm窗口就是一個項目,不要多個項目放在一個窗口里面
- 3.項目名不能起中文
django下載:版本問題推薦下載1.11.11版本
命令行直接下載:pip3 install django==1.11.11
驗證是否下載成功:django-admin
創建django項目的方式:
方式一(命令行創建):
創建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.一定記得清瀏覽器的緩存
app(應用)的概念
? 一個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' #也可以用簡寫
]
django各個文件的作用
應用名:
migration 數據遷移記錄相關數據
admin.py django后臺管理相關
models.py 模型表相關
views.py 視圖函數相關
項目名:
settings.py 配置文件
urls.py 路由與視圖函數的映射關系
templates:
項目用到的所有的html文件
manage.py:
django入口文件
django必會三板斧
from django.shortcuts import render,HttpResponse,redirect
HttpResponse:內部傳入一個字符串,返回給瀏覽器
def index(request):
#邏輯代碼
return HttpResonse('ok')
render:
除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()) #會把上面定義的全部變量傳給前端頁面
redirect:重定向
接收一個URL參數,表示跳轉到指定的URL
def index(request):
#業務邏輯
return redirect('www.baidu.com')