WEB開發(fā)是現(xiàn)在程序必會的技能,,因為大部分軟件都以Web形式提供,及時制作后臺開發(fā),,或者只做前臺開發(fā),,也需要了解Web開發(fā)的概念和特點,。由于Python是解釋性腳本語言,用來做Web開發(fā)非常適合,,而且Python有上百種Web開發(fā)框架,,以及成熟的模板技術(shù),使得Web開發(fā)如虎添翼,。今天借用Flask框架,,快速學(xué)習(xí)一下Python的Web開發(fā)知識。 Flask框架Flask的設(shè)計易于使用和擴展,。它的初衷是為各種復(fù)雜的Web應(yīng)用程序構(gòu)建堅實的基礎(chǔ),。可以自由地插入任何擴展,。也可以自由構(gòu)建自己的模塊,。Flask適合各種項目。它對原型設(shè)計特別有用,。Flask依賴于兩個外部庫:Jinja2模板引擎和Werkzeug WSGI工具包,。Flask是最精致,功能最豐富的微框架之一,。Flask還很年輕,,擁有蓬勃發(fā)展的社區(qū),一流的擴展和漂亮的API,。Flask具有快速模板,,強大的WSGI功能,在Web應(yīng)用程序和庫級別的完整單元可測性,,以及大量文檔等優(yōu)點。選用Flask框架也是因為它方便入手,,結(jié)構(gòu)簡單,,零配置,是個學(xué)習(xí)Python Web開發(fā)的好工具,。 安裝Flask像其他模塊一樣,,F(xiàn)lask的安裝很簡單,下面通過pip包管理器來安裝 pip install flask 檢查一下是否安裝正確
在命令行下輸入 >>> import flask >>> 如果沒有錯誤提醒,,就說明安裝成功了 Hello world下面寫個最簡單的Web應(yīng)用 from flask import Flask # 引入Flask模塊
app = Flask(__name__) # 創(chuàng)建一個應(yīng)用
@app.route('/') def index(): # 定義根目錄處理器 return '<h1>Hello World!</h1>' if __name__ == '__main__': app.run() # 啟動服務(wù) 打開終端,,跳轉(zhuǎn)到 >>> python hello.py 如果一起正常的話會有類似下面的反饋 * Serving Flask app "hello" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
此時,,打開瀏覽器,,輸入 127.0.0.1:5000/ 或者 localhost:5000/, 就可以看到 Hello World!歡迎字樣,。 路由路由是Web開發(fā)中一個很重要的概念,,用來將不同的請求,映射到響應(yīng)的處理方法上,,這個方法被稱為視圖函數(shù),。比如剛才的 簡單路由如 訪問 @app.route('/hello') def hello(): return 'Hello!' 動態(tài)路由如訪問 @app.route('/user/<name>') def user(name): return '<h1>Hello, %s! </h1>' % name 動態(tài)域名中動態(tài)的部分可以作為視圖函數(shù)的參數(shù),,也支持多個動態(tài)參數(shù),,如訪問 @app.route('/user/<name>/<age>') def user(name, age): return "<h1> Hello, %s, you're %s years old" % (name, age) 還可以指定動態(tài)部分的數(shù)據(jù)類型,如 @app.route('/post/<int:post_id>') def show_post(post_id): # show the post with the given id, the id is an integer return 'Post %d' % post_id
@app.route('/path/<path:subpath>') def show_subpath(subpath): # show the subpath after /path/ return 'Subpath %s' % escape(subpath) 支持的數(shù)據(jù)類型
指定HTTP 方法HTTP協(xié)議,,支持多種HTTP 方法,例如 @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return do_the_login() else: return show_the_login_form() 復(fù)合路由也可以將多個路由規(guī)則,,用于一個視圖函數(shù), 如訪問 @app.route('/job/') @app.route('/work/') def show_works(): return 'This is works page' 再復(fù)雜一點的例子 @app.route('/users/', defaults={'page': 1}) @app.route('/users/page/<int:page>') def show_users(page): pass 上面的代碼表示,當訪問 請求和響應(yīng)Web應(yīng)用,最重要的事情就是處理接收到的請求,,并返回響應(yīng),。Flask框架也一樣,它提供了請求對象 請求Flask將客戶端發(fā)送的HTTP請求封裝成了
Flask有兩種上下文,,分別為程序上下文和請求上下文,,各自對應(yīng)的全局變量如下表:
使用 from flash import request
@app.route('/login', methods=['POST', 'GET']) def login(): error = None if request.method == 'POST': if valid_login(request.form['username'], request.form['password']): return log_the_user_in(request.form['username']) else: error = 'Invalid username/password' # the code below is executed if the request method # was GET or the credentials were invalid return render_template('login.html', error=error)
如果要操作 URL (如 ?key=value )中提交的參數(shù)可以使用 args 屬性,如 : 請求鉤子有時在處理請求之前或之后執(zhí)行代碼會很有用,。例如,,在請求開始時,可能需要創(chuàng)建數(shù)據(jù)庫連接或者認證發(fā)起請求的用戶,。為了避免在每個視圖函數(shù)中都使用重復(fù)的代碼,,F(xiàn)lask提供了注冊通用函數(shù)的功能,注冊的函數(shù)可在請求被分發(fā)到視圖函數(shù)之前或之后調(diào)用,。請求鉤子使用修飾器實現(xiàn),。Flask支持以下4種鉤子:
示例: 在接受到第一個請求是,,打印一句話: @app.before_first_request def first_quest(): print("run before first request") 在請求鉤子函數(shù)和視圖函數(shù)之間共享數(shù)據(jù)一般使用上下文全局變量g。例如,,before_request處理程序可以從數(shù)據(jù)庫中加載已登錄用戶,,并將其保存到g.user中,。隨后調(diào)用視圖函數(shù)時,視圖函數(shù)再使用g.user獲取用戶,。 響應(yīng)響應(yīng)是Web服務(wù)器對請求的一個回應(yīng),,在Flask中,有多種形式的響應(yīng),。視圖函數(shù)的返回值會自動轉(zhuǎn)換為一個響應(yīng)對象,。如果返回值是一個字符串,那么會被 轉(zhuǎn)換為一個包含作為響應(yīng)體的字符串,、一個 200 OK 出錯代碼 和一個
除此之外,,還可以通過 使用 from flask import make_response 示例:
@app.errorhandler(404) def not_found(error): return render_template('error.html'), 404
@app.errorhandler(404) def not_found(error): resp = make_response(render_template('error.html'), 404) resp.headers['X-Something'] = 'A value' return resp 總結(jié)本文借助Flask框架,,簡要介紹了下Python Web開發(fā)的基本知識和技術(shù),,希望能幫助您快速入門,在Python學(xué)習(xí)的道路上走的更順暢,。后續(xù)還會將就Web開發(fā)的話題,,對模板、數(shù)據(jù)庫 以及擴展功能等進行講解,,敬請期待! 參考
參考資料圖書: Flask Web開發(fā): https://item.jd.com/12418677.html [2]Flask快速上手: https://dormousehole./en/latest/quickstart.html [3]Flask入門到精通(二): https://www.cnblogs.com/java-wgm/p/6602900.html [4]Web服務(wù)器網(wǎng)關(guān)接口: https://zh./wiki/Web%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BD%91%E5%85%B3%E6%8E%A5%E5%8F%A3
|
|
來自: Python技術(shù) > 《待分類》