01web框架的本質
學習內容
這個階段的學習內容
1. Django基礎
2. Redis基礎
3. Django實戰項目
4. linux基礎
django這個階段,知識點很多,很碎,要記憶的很多
所需知識點:
Python的基礎語法
函數 模塊與包 面向對象 安裝MySQL 創建數據庫 前端
回顧知識
-
python,pycharm的含義是什么?這兩者的關系是什么?
python是個解釋器,將符合python這門語言的語法代碼解釋給電腦聽,并且讓電腦執行
pycharm說白了就是一個牛逼的記事本,記事本不太好的地方,沒有代碼的提示,沒有這些牛逼的功能的
pycharm配置好了python的解釋器以后,就擁有這些代碼提示,鼠標點一下就可以直接運行python代碼 -
我們的代碼有沒有問題,取決于運行的結果的,不能依賴pycharm(只是一個好用的工具罷了),代碼出現了紅色波浪線并一定會報錯
-
運行python代碼的方式:
-
臨時的
進入Python解釋器內執行代碼,解釋器一旦關閉,代碼就失效了
作用:一般只有臨時的調試一些簡單的代碼 -
永久的
好處:代碼永遠都在,代碼保存在一份文件中,可以持久化保存
文件的后綴名字可以是任意的(.txt,.dwda,.gfdg),但一般使用.py
-
-
運行python文件本質
python解釋器的路徑 Python的文件的路徑
環境變量
解決下面的錯誤:
'xxx' 不是內部或外部命令,也不是可運行的程序或批處理文件
解決方式:去配置環境變量
同學提問:普通記事本代碼有Python環境就可以運行的嗎?
運行Python的代碼 ,只需要Python解釋器
web框架
三大類
基礎的 沒他不行 Python基礎 前端 HTML css js
進階型 沒他了也能玩的轉,但是很多問題會出現 MySQL
精華型 沒他也可以,但是有他,就可以簡化我們很多的事情 框架 jquery bootstarp 內部的一些代碼
通過一個需求,我們自己做一個web框架
需求:做一個網站出來
網絡編程(基于網絡傳輸信息) -- socket
bs架構的本質是cs架構
hhtp,https(加密,更安全)通信協議 根據規則來進行通信
# 寫代碼 用socket 實現網絡傳遞信息
import socket
# 1. 買手機
server = socket.socket()
# 2. 綁定手機卡
# IP 利用IP 可以找到世界上任意一臺電腦 IP
# PORT 利用port 可以找到一臺電腦上任意一個程序
# IP+PORT 可以找到世界上任意一臺電腦上的一個程序
server.bind(('127.0.0.1',8000))
# 3. 開機
server.listen()
while True:
# 4. 等電話的鏈接
conn,addr = server.accept()
# 5. 收發消息
data = conn.recv(1024)
print(data)
conn.send(b'hello')
# 6.掛電話
conn.close()
# 7.關機
server.close()
運行這份代碼,在瀏覽器的導航欄中輸入:127.0.0.1:8000結果發現下面這個錯誤
為什么會出現這個錯誤?
因為沒有遵守http協議
用戶的瀏覽器已輸入網址,會給服務端發送數據,發什么數據,收什么數據,怎么發?怎么收?
必須要有規定,不然就亂了,無規則不成方圓,那么這些規則,我們叫做http協議
修改代碼,增加一行,來遵守HTTP協議
import socket
# 1.買手機
server = socket.socket()
# 2.綁定手機號
"""
IP 利用IP 可以找到世界上任意一臺電腦 IP
PORT 利用port 可以找到一臺電腦上任意一個程序
IP+PORT 可以找到世界上任意一臺電腦上的一個程序
"""
server.bind(('127.0.0.1', 8000))
# 3.開機
server.listen()
while True:
# 4. 等電話的鏈接
conn, addr = server.accept()
# 5. 收發消息
data = conn.recv(1024)
print(data)
"""新增這一行代碼 遵守HTTP協議"""
conn.send(b'HTTP1.1 200 OK\r\n\r\n')
conn.send(b'<strong>good</strong>')
# 6.掛電話
conn.close()
# 7.關機
server.close()
利用十幾行代碼,實現了最基本的需求,在瀏覽器中輸入一個網址,就可以看到內容
根據URL的不同,返回的內容也是不一樣
怎么取實現這個需求 如何獲取到url
import socket
# 1.買手機
server = socket.socket()
# 2.綁定手機號
server.bind(('127.0.0.1', 8000))
# 3.開機
server.listen()
while True:
# 4. 等電話的鏈接
conn, addr = server.accept()
# 5. 收發消息
data = conn.recv(1024)
# decode將二進制數據轉成字符串 再按照\r\n進行切割
data = data.decode().split('\r\n')
print(data, type(data))
# 拿到了瀏覽器的url
url = data[0].split(' ')[1]
print(url)
"""新增這一行代碼 遵守HTTP協議"""
conn.send(b'HTTP1.1 200 OK\r\n\r\n')
if url == '/nice':
conn.send(b'<h1>nice</h1>')
elif url == '/nb':
conn.send(b'nb')
else:
conn.send(b'404')
# 6.掛電話
conn.close()
# 7.關機
server.close()
基本功能實現了,但url一多,這么寫就不行了,考慮優化代碼
import socket
def nb():
return b'nb'
def nice():
return b'<h1>nice</h1>'
def not_found(): # 形參
return b'<h1>404</h1>'
li_content = [
('/nb', nb),
('/nice', nice)
]
# 1.買手機
server = socket.socket()
# 2.綁定手機號
server.bind(('127.0.0.1', 8000))
# 3.開機
server.listen()
while True:
# 4. 等電話的鏈接
conn, addr = server.accept()
# 5. 收發消息
data = conn.recv(1024)
# decode將二進制數據轉成字符串 再按照\r\n進行切割
data = data.decode().split('\r\n')
print(data, type(data))
# 拿到了瀏覽器的url
url = data[0].split(' ')[1]
print(url)
"""新增這一行代碼 遵守HTTP協議"""
conn.send(b'HTTP1.1 200 OK\r\n\r\n')
for content in li_content:
if url == content[0]:
conn.send(content[1]())
break
else:
conn.send(not_found())
# 6.掛電話
conn.close()
# 7.關機
server.close()

浙公網安備 33010602011771號