python miniWeb框架搭建過程詳解
框架概念
框架和web服務器關系
·靜態資源:不是經常變化的資源、往往是固定不變的資源
·動態資源:經常變化的資源
·模板文件:提供瞭一個顯示的模板,顯示的內容不同,但是結構是一樣的
·服務器的作用:
o1)接受客戶端請求
o2)響應客戶端請求
o3)調用應用框架獲取
miniWeb框架構建基本構建
·思路:
o判斷請求的資源路徑是 是否是 .py 結尾
o如果 .py 結尾,——> 顯示動態內容
o如果.html 結尾,——> 顯示靜態內容
·核心代碼:
核心代碼: # index.py if file_path.endswith(".py"): # 2. 讓.py 顯示的內容和.html顯示的內容區別開開 response_body = "This is index Show! %s" % time.ctime() # 調用 utils 模塊的 create_http_response 函數,拼接響應協議 response_data = utils.create_http_response("200 OK", response_body.encode()) # index.html else: ....
miniWeb框架構建-動態顯示
·思路:
o首先必須是 .py 結尾的文件
o判斷請求的資源路徑,並且根據資源路徑不同設置 不同的 response_body
o當請求的資源路徑不存在,返回 404 錯誤
·核心代碼:
# 3. 判斷請求的資源路徑,根據不同的路徑顯示不同的額內容 if file_path == "/index.py": response_body = "This is index show!" # 調用 utils 模塊的 create_http_response 函數,拼接響應協議 response_data = utils.create_http_response("200 OK", response_body.encode()) elif file_path == "/center.py": response_body = "This is center show!" # 調用 utils 模塊的 create_http_response 函數,拼接響應協議 response_data = utils.create_http_response("200 OK", response_body.encode()) elif file_path == "/gettime.py": response_body = "helloworld! %s" % time.ctime() # 調用 utils 模塊的 create_http_response 函數,拼接響應協議 response_data = utils.create_http_response("200 OK", response_body.encode()) else: response_body = "Sorry Page Not Found ! 404" # 調用 utils 模塊的 create_http_response 函數,拼接響應協議 response_data = utils.create_http_response("404 Not Found", response_body.encode())
路由列表(django)
·實現步驟:
o創建 urls 模塊,模塊的作用提供一個路由字典
字典保存路徑和函數的對應關系
o導入函數的模塊 from application import funs
oroute_dict
定義路由字典
route_dict = { '/index.py': funs.index, '/center.py': funs.center, '/gettime.py': funs.gettime }
·創建 funs 模塊, 提供瞭具體的功能對應的函數
定義路徑對應的函數
import time def index(): """ 處理 index.py 請求 """ return "This is index show!--funs" def center(): """ 處理 index.py 請求 """ return "This is center show!" def gettime(): """ 處理 index.py 請求 """ return "This is gettime show! %s " % time.ctime()
·修改app文件中 動態顯示的判斷部分
1.判斷 路徑 是否在 路由字典中 key in 字典
2.如果在字典中,根據key(請求路徑) 取出 對應的函數的引用
3.執行函數,獲取函數的返回值,然後賦值 給 response_body
if file_path in urls.route_dict: # 根據key值,去urls.route_dict中,獲取值(函數引用) func = urls.route_dict[file_path] # 根據路由字典,獲取函數的引用,執行該函數,返回執行的結果, # 保存到 response_body 變量中 response_body = func() # 調用 utils 模塊的 create_http_response 函數,拼接響應協議 response_data = utils.create_http_response("200 OK", response_body.encode()) else:
裝飾器路由(flask)
使用裝飾器工廠,實現裝飾器路由
·修改urls模塊
route_dict = { }
·修改funs模塊
o導入 from application import urls
o創建裝飾器工廠,並且把路徑添加到字典中(創建路由字典)
def route(path): # path 向裝飾器內部傳遞的參數 path /index.py # 裝飾器 # 字典 # {"index.py":index函數引用} def function_out(func): #func index函數的引用 # 2----- urls.route_dict[path] = func # print("裝飾[%s]" % path) # 裝飾器內層函數 def function_in(): # 調用原函數並且執行 return func() return function_in return function_out
o裝飾函數
@route("/center.py") def center(): """ 處理 index.py 請求 """ return "This is center show!"
o在 app模塊中導入 funs 模塊
此時funs 模塊中的函數被加載,加載的同時被裝飾(就會向字典中添加路由信息)
模板替換
·思路
o拷貝資源(templates)到工程下
o修改 funs模塊中的 index 和 center函數
o在函數中讀取對應的文件
List item
o使用正則替換網頁中的內容 {%content%} —> helloworld!
o返回替換後的內容
with open("templates/index.html") as file:? content = file.read() return content
數據庫操作
數據加載
·創建並導入數據到數據庫
o創建數據庫 create database stock_db charset=utf8
o使用數據庫 use stock_db
o導入數據庫(先客戶端登錄)
o準備腳本文件
o導入腳本 source stock_db.sql
·修改index函數
o連接數據庫,獲取數據
§導入模塊
§建立連接
§創建遊標
§使用遊標執行sql
§獲取查詢的結果
data_from_mysql = str(cur.fetchall())
§關閉資源
先關閉遊標,在關閉連接
§替換為查詢的數據
content = re.sub(“{%content%}”,data_from_mysql,content)
渲染頁面
·思路:
o把查詢的數據進行遍歷,並且拼接html格式的文本
o表示一行 一列
o替換為拼接後的字符串
content = re.sub(“{%content%}”,data_from_myql,content)
o註意:
%s %s %s —> line # line 是一個元組
多表查詢
·思路:
o關聯查詢
select i.code,i.short,i.chg,i.turnover,i.price,i.highs,f.note_info from info i, focus f where i.id = f.id
o把查詢的數據進行遍歷,並且拼接html格式的文本
o表示一行 一列
o替換為拼接後的字符串
content = re.sub(“{%content%}”,data_from_myql,content)
多進程版
·設置進程守護
p1.daemon = True
·啟動進程
p1.start()
·關閉new_client_socket ,否則無法釋放套接字
new_client_socket.close()
到此這篇關於python miniWeb框架搭建的文章就介紹到這瞭,更多相關python miniWeb框架搭建內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python腳本框架webpy模板控制結構
- Python Django搭建文件下載服務器的實現
- Python開發自定義Web框架的示例詳解
- Python項目實戰之使用Django框架實現支付寶付款功能
- Flask response響應的具體使用