web框架
轉載:https://www.cnblogs.com/huang-yc/p/9647815.html
本文為純屬個人學習筆記,如有疏漏錯誤之處望前輩指正!
1. web 應用
? ? ? ?Web應用程序是一種可以通過Web訪問的應用程序,程序的最大好處是用戶很容易訪問應用程序,用戶只需要有瀏覽器即可,不需要再安裝其他軟件。
應用程序有兩種模式C/S、B/S。C/S是客戶端/服務器端程序,也就是說這類程序一般獨立運行。而B/S就是瀏覽器端/服務器端應用程序,這類應用程序一般借助谷歌,火狐等瀏覽器來運行。
WEB應用程序一般是B/S模式。Web應用程序首先是“應用程序”,和用標準的程序語言,如java,python等編寫出來的程序沒有什么本質上的不同。在網絡編程的意義下,瀏覽器是一個socket客戶端,服務器是一個socket服務端。
import socketdef handle_request(client):request_data = client.recv(1024)print("request_data: ",request_data)client.send("HTTP/1.1 200 OK\r\n\r\n".encode("utf8"))client.send("<h1 style='color:red'>Hello, web! </h1>".encode("utf8"))def main():sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('localhost',8000))sock.listen(5)while True:print("the server is waiting for client-connection....")connection, address = sock.accept()handle_request(connection)connection.close()if __name__ == '__main__':main()
?
2.web? 框架
? ? ? ?Web框架(Web framework)是一種開發框架,用來支持動態網站、網絡應用和網絡服務的開發。這大多數的web框架提供了一套開發和部署網站的方式,也為web行為提供了一套通用的方法。
web框架已經實現了很多功能,開發人員使用框架提供的方法并且完成自己的業務邏輯,就能快速開發web應用了。瀏覽器和服務器的是基于HTTP協議進行通信的。也可以說web框架就是在以上十幾行代碼基礎張擴展出來的,有很多簡單方便使用的方法,大大提高了開發的效率。
?
3.wsgi 模塊
? ? ? ?最簡單的Web應用就是先把HTML用文件保存好,用一個現成的HTTP服務器軟件,接收用戶請求,從文件中讀取HTML,返回。
如果要動態生成HTML,就需要把上述步驟自己來實現。不過,接受HTTP請求、解析HTTP請求、發送HTTP響應都是苦力活,如果我們自己來寫這些底層代碼,還沒開始寫動態HTML呢,就得花個把月去讀HTTP規范。
正確的做法是底層代碼由專門的服務器軟件實現,我們用Python專注于生成HTML文檔。因為我們不希望接觸到TCP連接、HTTP原始請求和響應格式,所以,需要一個統一的接口協議來實現這樣的服務器軟件,讓我們專心用Python編寫Web業務。這個接口就是WSGI:Web Server Gateway Interface。而wsgiref模塊就是python基于wsgi協議開發的服務模塊。
Python 3.x from wsgiref.simple_server import make_serverdef RunServer(environ, start_response):#environ客戶發來的所有數據start_response('200 OK', [('Content-Type', 'text/html')])#start_response 封裝要返回給客戶的數據,響應頭狀態return [b'<h1>Hello,web!</h1>']#返回給用戶的內容#b: 字符串轉字節(Python2.x中無bite.if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()
運行該程序,在網頁中輸入:127.0.0.1:8000,即可打印:
?
ps:字符串轉字節的三種方式:
①b'ffffff";
②bytes('ffffff', encoding = 'utf8');
③'ffffff'.encoding('utf8');
?
示例1:
from wsgiref.simple_server import make_serverdef handle_index():return [b'<h1>Hello,index!</h1>']def handle_date():return [b'<h1>Hello,date !</h1>']def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])current_url = environ['PATH_INFO']if current_url =='/index':return handle_index()elif current_url == '/date':return handle_date()else:return [b'<h1>404!</h1>']if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()
在網頁中輸入:127.0.0.1:8000/date,即可打印
?
?
------有很多URL怎么辦?
?示例2:
將URL存放于字典中:
from wsgiref.simple_server import make_serverdef handle_index():return [b'<h1>Hello,index!</h1>']def handle_date():return [b'<h1>Hello,date !</h1>']URL_DICT = {"/index": handle_index,"/date": handle_date, #可用正則表達式寫虛擬的 } def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])current_url = environ['PATH_INFO']func = Noneif current_url in URL_DICT:func =URL_DICT[current_url]if func:return func()else:return [b'<h1>404!</h1>']if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()
?
?
示例3:
可將需要打印的信息存放于HTML中,通過讀取HTML文件獲取打印信息:
from wsgiref.simple_server import make_serverdef handle_index(): f = open("index.html", mode='rb')data = f.read()f.close()return [data, ]def handle_date():return [b'<h1>Hello,date !</h1>']URL_DICT = {"/index": handle_index,"/date": handle_date, } def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])current_url = environ['PATH_INFO']func = Noneif current_url in URL_DICT:func =URL_DICT[current_url]if func:return func()else:return [b'<h1>404!</h1>']if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()
index.html文件:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>INDEX</h1> </body> </html>
?
通過以上代碼,當需要處理大量的重復的操作時,我們可以采取模板,或者將某一類文件放在同一個文件夾中,比如將模板文件放在Model文件夾中,將處理函數放在Controler文件夾中,將數據庫文件等放在View文件夾中,這樣有了MVC框架。
| ? MVC框架 | Model | View | Controler |
| ? | 數據庫 | 模板文件 | 業務處理 |
| MTV框架 | Model | Template | View |
| ? | 數據庫 | 模板文件 | 業務處理 |
?
?
?
?
?
?
?
?
?
?
?
注:?Django是標準的MTV框架。
?
轉載于:https://www.cnblogs.com/bltstop/p/11166895.html
總結
- 上一篇: 求一个陌陌伤感个性签名
- 下一篇: Data - 深入浅出学统计 - 下篇