django框架之引入及介紹等相關內容-59
阿新 • • 發佈:2020-11-20
1 用瀏覽器訪問的應用程式
2 優點:
-不需要客戶端
-更新直接在服務端更新,客戶端感知不到
-跨平臺性好
3 缺點:
-強調瀏覽器的適用性
-使用者的資料都儲存在軟體廠商那邊
2 bs、cs架構
1 bs:瀏覽器---服務端 (本質還是cs)
2 cs:客戶端---服務端
3 手寫一個web應用
1 客戶端是瀏覽器,服務端自己寫(python)
2 靜態頁面,動態頁面
-靜態頁面:靜態的html,內容不會改變,每次訪問看到的資料都一樣
-動態頁面:頁面的資料會發生變化,每次訪問看到的可能都不一樣(資料來源可能是資料庫)
3.1 main.py
# 1 寫一個web應用的服務端,通過瀏覽器(客戶端),來訪問
import socket
server = socket.socket()
# server.bind(('127.0.0.1', 8080))
server.bind(('0.0.0.0', 8080))
server.listen(5)
while True:
conn, addr = server.accept()
# 接收瀏覽器傳過來的資料
data = conn.recv(1024)
print(data)
# 返回給瀏覽器資料(不符合http協議)
# conn.send(b'hello world')
# 返回資料符合http協議
# conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world')
# 返回符合html格式的資料
# conn.send('HTTP/1.1 200 ok \r\n\r\n <h1>title</h1>'.encode('utf-8'))
## 返回一個html頁面,開啟檔案,轉成二進位制,send一下
# with open('index.html','r',encoding='utf-8') as f:
# data=f.read()
#
# response='HTTP/1.1 200 ok \r\n\r\n %s'%data
# conn.send(response.encode('utf-8'))
## 實現動態頁面(靜態頁面,動態頁面)
# 在index.html中寫一個特殊標記,使用python的變數去替換這個特殊標記
import time
ctime=time.time() # 可能是資料庫查詢出來的
with open('index.html','r',encoding='utf-8') as f:
data=f.read().replace('{{time}}',str(ctime))
response='HTTP/1.1 200 ok \r\n\r\n %s'%data
conn.send(response.encode('utf-8'))
conn.close()
3.2 index.html
4 http協議
1 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於全球資訊網伺服器與本地瀏覽器之間傳輸超文字的傳送協議
2 應用層的協議
3 http協議特性(記一下)
-1 基於tcp/ip之上的應用層協議
-2 基於請求-響應模式
-3 無狀態儲存
-4 無連線
4 請求協議(瀏覽器發出來的)(記住)
三部分:請求首行,請求頭,請求體
'''
# 請求首行(以第一個\r\n區分的),
# 請求方式:GET 請求地址:/lqz/handsome 協議:http 版本:1.1版本
GET /lqz/handsome HTTP/1.1\r\n
# 請求頭(key:value形式)
Host: 192.168.11.211:8080\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n'
# \r\n\r\n 下面的是請求體的內容
'''
5 響應協議
'''
# 響應首行 響應協議和版本:HTTP/1.1 響應的狀態碼和標誌:200 ok
HTTP/1.1 200 ok \r\
# 響應頭(key:value形式)
key:value
key:valu
\r\n\r\n
# 響應體:在瀏覽器裡看到的東西(瀏覽器能把下面的html渲染成好看的樣子)
<!DOCTYPE html>
<html lang="en">
<h1>hello</h1>
</html>
'''
6 響應狀態碼
-1xx:請求正在處理(使用者一般看不到)
-2xx:請求成功(200)
-3xx:重定向(301 302)訪問一個地址,轉到另一個地址
-4xx:客戶端錯誤(404,403)
-5xx:服務端錯誤(502)
7 url:統一資源定位符
# 格式
http://127.0.0.1:8080/order.html
ftp://xxx
協議://IP:埠(80)/路徑?name=lqz&age=18
統一資源定位符是可以從網際網路上訪問資源的一種方式,協議就是資源的地址
5 web框架
1 web框架就是在以上十幾行程式碼基礎張擴展出來的,有很多簡單方便使用的方法,大大提高了開發的效率
6 基於wsgiref寫一個web框架
1 socket自己寫的,藉助於一個模組,已經實現了socket
2 wsgiref:django預設使用的
3 在web框架上繼續開發
-以後路徑都去urls.py中寫
-路徑匹配以後執行的函式,都放在views.py
-資料庫相關操作,在models.py中
7 django與其他web框架區別
1 python中主流web框架:django,flask,tornado(效能高),sanic,fastapi。。。。。 socket假設叫:a 路由的對映關係:b 模板渲染: c 自己寫的web框架: a:用了第三方wsgiref b:自己寫的 c:自己寫的 django: a:用了第三方wsgiref b:自己寫的 c:自己寫的 flask a:用了第三方 b:自己寫的 c:用了第三方 tornado a:自己寫的 b:自己寫的 c:自己寫的
8 django安裝與簡單使用
0 django的版本:1.x 2.x 3.x 版本之間是由差距的 1 安裝的幾種方式 -在cmd中敲:pip3 install django==1.11.9 預設裝最新版本(3.x) -pycharm中--》setting--》直譯器--》點+號,選擇版本,安裝 -pycharm的Terminal中敲 pip3 install django==1.11.9 2 裝完以後,會多個一個django-admin的命令,在D:\python38\Scripts 路徑下 由於D:\python38\Scripts之前就被加入到環境變數,在任意路徑指向django-admin都能找到 3 django-admin是用來建立django專案的命令(建立專案就是生成目錄,生成一堆py檔案) 4 建立專案(在哪個路徑下指向,專案就建立在哪,在c盤根路徑) django-admin startproject 專案名 django-admin startproject myfirstdjango 5 建立完以後,用pycharm開啟即可 6 在專案根路徑建立app python3 manage.py startapp app名字 7 django目錄結構 -views.py:函式,檢視函式 -urls.py:路徑(路由)和檢視函式的對應關係 -models.py:表模型(資料庫操作相關) 8 最簡單的方式,通過pychrm建立 100:問題 1 如果計算機名是中文,專案路徑中有中文空格,都可能會報錯 2 python3.7或者3.8 對django1.x的版本相容性可能存在問題,1.x版本推薦用python3.6
##
作業
1 搜尋一下http的狀態碼有哪些?分別代表什麼意思?
2 http的請求頭和http的響應頭有哪些,分別代表什麼意思?
3 django框架安裝好,跑起一個helloworld
4 上課講的整理成比較,發部落格
5 擴充套件:
-在django中實現訪問index,返回一個頁面(好看的頁面,放個圖)