2、基于wsgiref模块DIY一个web框架
一 web框架
Web框架(Web framework)是一種開發(fā)框架,用來支持動態(tài)網(wǎng)站、網(wǎng)絡(luò)應(yīng)用和網(wǎng)絡(luò)服務(wù)的開發(fā)。這大多數(shù)的web框架提供了一套開發(fā)和部署網(wǎng)站的方式,也為web行為提供了一套通用的方法。web框架已經(jīng)實(shí)現(xiàn)了很多功能,開發(fā)人員使用框架提供的方法并且完成自己的業(yè)務(wù)邏輯,就能快速開發(fā)web應(yīng)用了。瀏覽器和服務(wù)器的是基于HTTP協(xié)議進(jìn)行通信的。也可以說web框架就是在以上十幾行代碼基礎(chǔ)張擴(kuò)展出來的,有很多簡單方便使用的方法,大大提高了開發(fā)的效率。
二 wsgiref模塊
最簡單的Web應(yīng)用就是先把HTML用文件保存好,用一個現(xiàn)成的HTTP服務(wù)器軟件,接收用戶請求,從文件中讀取HTML,返回。如果要動態(tài)生成HTML,就需要把上述步驟自己來實(shí)現(xiàn)。不過,接受HTTP請求、解析HTTP請求、發(fā)送HTTP響應(yīng)都是苦力活,如果我們自己來寫這些底層代碼,還沒開始寫動態(tài)HTML呢,就得花個把月去讀HTTP規(guī)范。正確的做法是底層代碼由專門的服務(wù)器軟件實(shí)現(xiàn),我們用Python專注于業(yè)務(wù)邏輯。因?yàn)槲覀儾幌M佑|到TCP連接、HTTP原始請求和響應(yīng)格式,所以,需要一個統(tǒng)一的接口協(xié)議來實(shí)現(xiàn)這樣的服務(wù)器軟件,讓我們專心用Python編寫Web業(yè)務(wù)。這個接口就是WSGI:Web Server Gateway Interface。而wsgiref模塊就是python基于wsgi協(xié)議開發(fā)的服務(wù)模塊。
from wsgiref.simple_server import make_serverdef application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])return [b'<h1>Hello, web!</h1>']httpd = make_server('', 8080, application)print('Serving HTTP on port 8000...') # 開始監(jiān)聽HTTP請求: httpd.serve_forever()三 DIY一個web框架
為了做出一個動態(tài)網(wǎng)站,我們需要擴(kuò)展功能,比如用戶訪問url的路徑是login時提供一個登錄頁面,路徑是index時響應(yīng)一個首頁面。
3.1 啟動文件:manage.py
from wsgiref.simple_server import make_server from views import * from urls import urlpatternsdef application(environ, start_response):#print("environ",environ)start_response('200 OK', [('Content-Type', 'text/html')])# 獲取當(dāng)前請求路徑print("PATH_INFO",environ.get("PATH_INFO"))path=environ.get("PATH_INFO")# 分支func=Nonefor item in urlpatterns:if path == item[0]:func=item[1]breakif not func:ret=notFound(environ)else:ret=func(environ)return [ret]httpd = make_server('', 8080, application) # 開始監(jiān)聽HTTP請求: httpd.serve_forever()3.2 url控制文件:urls.py
from views import *urlpatterns = [("/login", login),("/index", home), ]3.3 視圖文件:views.py
# 視圖函數(shù) def home(environ):with open("templates/home.html", "rb") as f:data = f.read()return datadef login(environ):with open("templates/login.html", "rb") as f:data = f.read()return datadef notFound(environ):return b"<h1>404...</h1>"3.4 模板文件Templates
login.html:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <form action="http://127.0.0.1:8800" method="post">用戶名 <input type="text" name="user">密碼 <input type="text" name="pwd"><input type="submit"> </form> </body> </html>home.html:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h3>This is index!</h3> </body> </html>到這里,pyyuan這個包就是一個web框架,當(dāng)這個框架的基礎(chǔ)上,添加業(yè)務(wù)功能就很簡單了,比如,我們添加一個查看時間的頁面,只需要完成兩部即可:
(1) 在urls.py中添加:
("/timer", timer),(2) 在views.py中添加:
def timer(request):import datetimenow=datetime.datetime.now().strftime("%Y-%m-%d")return now.encode()是不是很簡單,有了web框架,你就不用再從創(chuàng)建socket開始一行行碼代碼了!
轉(zhuǎn)載于:https://www.cnblogs.com/pyedu/p/10289253.html
總結(jié)
以上是生活随笔為你收集整理的2、基于wsgiref模块DIY一个web框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Markdown 基础学习
- 下一篇: esp分区创建 linux_善用EFI系