Web框架
-
Bottle
Bottle是一個快速、簡潔、輕量級的基于WSIG的微型Web框架,此框架只有一個 .py 檔案,除了Python的標準庫外,其不依賴任何其他模塊,
創建專案
from bottle import template, Bottle root = Bottle() @root.route('/hello/') def index(): return '<b>Hello World!</b>' root.run(host='localhost', port=8080, debug=True)詳情請看轉載鏈接:https://www.cnblogs.com/wupeiqi/articles/5341480.html
-
flask
Flask是一個基于Python開發并且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對于Werkzeug本質是Socket服務端,其用于接收http請求并對請求進行預處理,然后觸發Flask框架,開發人員基于Flask框架提供的功能對請求進行相應的處理,并回傳給用戶,如果要回傳給用戶復雜的內容時,需要借助jinja2模板來實作對模板的處理,即:將模板和資料進行渲染,將渲染后的字串回傳給用戶瀏覽器,
“微”(micro) 并不表示你需要把整個 Web 應用塞進單個 Python 檔案(雖然確實可以 ),也不意味著 Flask 在功能上有所欠缺,微框架中的“微”意味著 Flask 旨在保持核心簡單而易于擴展,Flask 不會替你做出太多決策——比如使用何種資料庫,而那些 Flask 所選擇的——比如使用何種模板引擎——則很容易替換,除此之外的一切都由可由你掌握,如此,Flask 可以與您珠聯璧合,
默認情況下,Flask 不包含資料庫抽象層、表單驗證,或是其它任何已有多種庫可以勝任的功能,然而,Flask 支持用擴展來給應用添加這些功能,如同是 Flask 本身實作的一樣,眾多的擴展提供了資料庫集成、表單驗證、上傳處理、各種各樣的開放認證技術等功能,Flask 也許是“微小”的,但它已準備好在需求繁雜的生產環境中投入使用,
路由映射的方式
- @app.route('/user/
') - @app.route('/post/int:post_id')
- @app.route('/post/float:post_id')
- @app.route('/post/path:path')
- @app.route('/login', methods=['GET', 'POST'])
獲取用戶請求相關的資訊
- request.method
- request.args
- request.form
- request.values
- request.files
- request.cookies
- request.headers
- request.path
- request.full_path
- request.script_root
- request.url
- request.base_url
- request.url_root
- request.host_url
- request.host
Flask框架九大基礎功能
# 后端代碼 from flask import Flask, render_template, request, make_response, redirect, session # 1.靜態檔案和模板路徑匹配 app = Flask(__name__) # 5.自定制前端模板函式 def text(): return '<a href="https://www.cnblogs.com/wylshkjj/p/#">鏈接</a>' @app.route('/', methods=['GET', 'POST']) def hello_world(): # 7.獲取請求內容,及請求方法 print(request.args) # 3.回傳字串 # return 'Hello World!' # 4.回傳模板 return render_template('index.html', k1='root', k2=[1, 2, 3], k3={'name': 'eric', 'pwd': '1234'}, k4=text) # 8.回應額外的資料 # resp = make_response(render_template('index.html', # k1='root', # k2=[1, 2, 3], # k3={'name': 'eric', 'pwd': '1234'}, # k4=text)) # resp.set_cookie('username', 'the name') # return resp # 9.重定向,類似于Django的reverse功能:url_for # return redirect('/hello/about') # url = url_for('hello', 'about') # return redirect(url) # 10.Session:你可以理解成我們用瀏覽器上網,到關閉瀏覽器的這一程序,session是會話程序中,服務器用來記錄特定用戶會話的資訊, # 6.路由映射 # - @app.route('/user/<username>') # - @app.route('/post/<int:post_id>') # - @app.route('/post/<float:post_id>') # - @app.route('/post/<path:path>') # - @app.route('/login', methods=['GET', 'POST']) # 以hello為路徑頭后面接括號中的:about,help,imprint,class,"foo, bar"這幾個引數發送請求 @app.route('/hello/<any(about,help,imprint,class,"foo, bar"):page_name>') def hello(page_name): return page_name if __name__ == '__main__': # 2.IP和埠的配置:默認埠5000 app.run()<!-- 前端代碼塊 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>Hello world!</h2> {{ k1 }} {{ k2 }} <ul> {% for item in k2 %} <li>{{ item }}</li> {% endfor %} </ul> {{ k3 }} <ul> {% for key,value in k3.items() %} <li>{{ key }}:{{ value }}</li> {% endfor %} </ul> {{ k4() | safe }} </body> </html>自定制中間件
類似于頁面的錯誤提示可以用到這個中間件
# Author:wylkjj # Date:2020/2/28 # -*- coding:utf-8 -*- from flask import Flask app = Flask(__name__) @app.route('/index/', methods=['GET', 'POST']) def hello_world(): print('...') return 'OK' def my_wsgi_app(environ, start_response): print('my_wsgi_app') start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello</h1>', encoding='utf-8'), ] class Foo: def __init__(self, w): self.w = w def __call__(self, environ, start_response): obj = self.w(environ, start_response) return obj if __name__ == '__main__': # app.wsgi_app = my_wsgi_app # 11.自定制中間件 app.wsgi_app = Foo(app.wsgi_app) app.run()Message
message是一個基于Session實作的用于保存資料的集合,其特點是:使用一次就洗掉
from flask import Flask, flash, render_template, request,get_flashed_messages app = Flask(__name__) @app.route('/') def index1(): # 12. 獲取訊息 v = get_flashed_messages() print(v) return render_template('s4.html') @app.route('/set') def index2(): v = request.args.get('p') # 13. 設定訊息 flash('kkkk') return 'ok' if __name__ == "__main__": app.run() - @app.route('/user/
-
tornado
Tornado 是 FriendFeed 使用的可擴展的非阻塞式 web 服務器及其相關工具的開源版本,這個 Web 框架看起來有些像web.py 或者 Google 的 webapp,不過為了能有效利用非阻塞式服務器環境,這個 Web 框架還包含了一些相關的有用工具 和優化,
Tornado 和現在的主流 Web 服務器框架(包括大多數 Python 的框架)有著明顯的區別:它是非阻塞式服務器,而且速度相當快,得利于其 非阻塞的方式和對 epoll 的運用,Tornado 每秒可以處理數以千計的連接,這意味著對于實時 Web 服務來說,Tornado 是一個理想的 Web 框架,我們開發這個 Web 服務器的主要目的就是為了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用里每一個活動用戶都會保持著一個服務器連接,(關于如何擴容 服務器,以處理數以千計的客戶端的連接的問題,請參閱 C10K problem,)
基本流程
第一步:執行腳本,監聽 8888 埠
第二步:瀏覽器客戶端訪問 /index --> http://127.0.0.1:8888/index
第三步:服務器接受請求,并交由對應的類處理該請求
第四步:類接受到請求之后,根據請求方式(post / get / delete ...)的不同呼叫并執行相應的方法
第五步:方法回傳值的字串內容發送瀏覽器
呼叫方法,框架的基本創建
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/index", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start() -
模板語言:(Django和jinja2語言相似)
- Django模板語言: ORM,模板語言
- Jinja2: 模板引擎
- bootle模板語言
-
三大組件
- 路由系統
- 控制器(含模板渲染)
- 資料庫操作
-
微型框架
- 依賴第三方寫的socket,遵循WSGI規范
- 本身功能少
-
安裝
- pip install bottle
- pip install flask
- pip install tornado
-
路由映射大約可分為三種:
-
Django的路由映射是一種:path = [ '/index/' , view.index ]
-
bottle的路由映射也是一種:
@route
def func():
? pass
-
最厲害的第三種:
url = ( [ ' /?P
\w+/ /?P\w+' ] ) / acount / login
acount.py
? login方法
-
Web組件的定制
- Session
- Form組件
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/188621.html
標籤:Python
上一篇:scrapy 當當網 爬蟲
