內(nèi)容,F(xiàn)lask框架
1详囤、介紹Flask袒啼,Django,Tornado 框架
? ? ? Django:重量級web框架纬纪,內(nèi)部包含非常多的組件,例如:ORM包各,F(xiàn)orm,ModelForm问畅,緩存,Session护姆,中間件,信號等
? ? ? Flask:輕量級web框架卵皂,內(nèi)部沒有太多組件,但是第三方組件非常豐富灯变。網(wǎng)址https://dormousehole.readthedocs.io/en/latest/
? ? ? Troando:異步非阻塞框架(Node.js)
? ? ?
2、Flask安裝
? ? ? a添祸, 命令:pip install flask
? ? ? b,werkzeug實現(xiàn)
? ? ? 示例:
? ? ? from werkzeug.wrappers import Request,Response
? ? ? @Request.application
? ? ? def hello(request):
? ? ? ? ? return Response('Hello? World!')
? ? ? if __name__ =='__main__':
? ? ? ? ? from werkzeug.serving import run_simple
? ? ? ? ? run_simple('localhost',4000,hello)
? ? ? ? ? c,wsgiref示例
? ? ? ? ? from wsgiref.simple_server import make_server
? ? ? ? ? def
runserver(environ,start_response):
? ? ? ? ? start_response('200 ok',[('Content-Type','text/html')]
? ? ? ? ? return [bytes('<h1>Hello,web|</h1>',encoding='utf-8')]
? ? ? ? ? if __name__ == '__main__':
? ? ? ? ? ? ? httpd = make_server(' ',8000,runserver)
? ? ? ? ? ? ? httpd.server_forever()
上述通過wsgiref凡壤,和werkzeug都可以創(chuàng)建一個Hello World頁面
其實他們的本質(zhì)也就是相當于socket創(chuàng)建,
如下所示:
? ? ? ? ? import socket
? ? ? ? ? def handle_request(client):
? ? ? ? ? ? ? buf = client.recv(1024)
? ? ? ? ? ? ? client.send("HTTP/1.1 200 OK\r\n\r\n")
? ? ? ? ? ? ? client.send('Hello,Seven')
? ? ? ? ? def main():
? ? ? ? ? ? ? sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
? ? ? ? ? ? ? sock.bind(('localhost',8000))
? ? ? ? ? ? ? sock.listen(5)
? ? ? ? ? ? ? while True:
? ? ? ? ? ? ? ? ? connection,address = sock.accept()
? ? ? ? ? ? ? ? ? handle_request(connection)
? ? ? ? ? ? ? ? ? connection.close()
? ? ? ? ? if __name__ == '__main__':
? ? ? ? ? ? ? main()
2,Flask 創(chuàng)建
? ? from flask import Flask
? ? ? app = Flask(__name__)
? ? ? #創(chuàng)建路由
? ? ? @app.route('/')
? ? ? def hello _world():
? ? ? ? ? return 'Hello World'
? ? ? if __name__ == '__main__':
? ? ? ? ? app.run()
討論:
a曹体、Flask是一個基于Python開發(fā)并且依賴jinja2模板和Werkzeug WSGI服務(wù)的一個微型框架,對于Werkzeug本質(zhì)是Socket服務(wù)端,其用于接收http請求并對請求進行預(yù)處理狐援,然后觸發(fā)Flask框架,開發(fā)人員基于Flask框架提供的功能對請求進行相應(yīng)的處理啥酱,并返回給用戶,如果要返回給用戶復雜的內(nèi)容時镶殷,需要借助jinja2模板來實現(xiàn)對模板的處理,即:將模板和數(shù)據(jù)進行渲染颤陶,將渲染后的字符串返回給用戶瀏覽器
b、“微”(micro) 并不表示你需要把整個 Web 應(yīng)用塞進單個 Python 文件(雖然確實可以 )滓走,也不意味著 Flask 在功能上有所欠缺。微框架中的“微”意味著 Flask 旨在保持核心簡單而易于擴展搅方。Flask 不會替你做出太多決策——比如使用何種數(shù)據(jù)庫绽族。而那些 Flask 所選擇的——比如使用何種模板引擎——則很容易替換姨涡。除此之外的一切都由可由你掌握吧慢。如此,F(xiàn)lask 可以與您珠聯(lián)璧合检诗。
c、默認情況下岁诉,F(xiàn)lask 不包含數(shù)據(jù)庫抽象層、表單驗證涕癣,或是其它任何已有多種庫可以勝任的功能前标。然而距潘,F(xiàn)lask 支持用擴展來給應(yīng)用添加這些功能炼列,如同是 Flask 本身實現(xiàn)的一樣音比。眾多的擴展提供了數(shù)據(jù)庫集成、表單驗證洞翩、上傳處理、各種各樣的開放認證技術(shù)等功能骚亿。Flask 也許是“微小”的,但它已準備好在需求繁雜的生產(chǎn)環(huán)境中投入使用来屠。
? ? ?