1. 程式人生 > >人生苦短,我用Python(六)—通過Flask結合Bootstrap框架快速搭建Web應用(實現前後臺聯動)-3

人生苦短,我用Python(六)—通過Flask結合Bootstrap框架快速搭建Web應用(實現前後臺聯動)-3

寫在前面:

這篇文章,寫的比較倉促,先在此致歉。具體情況,可以直接看總結部分。

Flask是一個基於Python開發,依賴jinja2模板和Werkzeug WSGI服務的一個微型框架。Werkzeug用來處理Socket服務,其在Flask中被用於接受和處理http請求;Jinja2被用來對模板進行處理,將模板和資料進行渲染,返回給使用者的瀏覽器。

Bootstrap是由Twitter推出的一個用於前端開發的開源工具包,給予HTML、CSS、JavaScriot,提供簡潔、直觀、強悍的前端開發框架,是目前最受環境的前端框架。

前面一篇文章已經講到了,如何通過flask結合Bootstrap框架構建我們想要的html前端頁面。

那麼下面我們來講講,如何實現html頁面與後臺應用程式的聯動,這包括以下三個部分:

  1. 前臺資料如何提交到後臺

  2. 後臺資料如何在前端顯示

  3. 按鈕功能對應後臺程式功能實現的一些方法

由於博主不是專門做這個的,所以下面的內容只是博主的一些理解和實際使用過程中的一些方法,並不能保證完全正確。


開始動手

1.如何將前臺頁面提交的資料傳遞到後臺

也就是說我們希望實現在html頁面中填寫的資料被後臺flask程式所獲取到

在這裡,我們使用的是在前臺通過表單提交資料,後臺獲取資料的方法來實現該功能

前臺HTML頁面如下:

{% extends "bootstrap/base.html" %}
{%- block head %}
<title>表單測試頁</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
{%- block styles %}
<!-- Bootstrap -->
<link href="{{bootstrap_find_resource('css/bootstrap.css', cdn='bootstrap')}}" rel="stylesheet">
<!-- Bootstrap core CSS -->
<link href="static/css/bootstrap.min.css" rel="stylesheet">
{%- endblock styles %}
{%- endblock head %}
{% block body -%}
<form role="form" method="POST">
<div class="form-group">
<label for="name">名稱</label>
<input type="text" id="name" name="name" placeholder="請輸入名稱">
</div>
<button type="submit" class="btn btn-default">提交</button>
</form>
{%- endblock body %}

實現頁面如下:

後臺程式如下:

@app.route('/form',methods = ['GET','POST'])
def hello_form():
if request.method == 'POST':
name=request.form.get('name')
print(name)
return render_template('form.html')
else:
return render_template('form.html')

這段程式實現的功能是,一開始瀏覽器請求/form這個相對URL時,採用的request method為get,此時返回form.html模板。

當在前臺頁面,點選提交按鈕時,觸發按鈕submit,進而觸發form定義的post提交資料的方法,這樣瀏覽器再次request /form這個相對URL時,採用的request method為POST,採用request.form.get()方法獲取與html文字中name欄位對應的值。此時我們可以看到在python程式的輸出中,name這個變數當前的值被列印了出來。   

WARNING: Do not use the development server in a production environment.
   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 - - [18/Nov/2018 01:11:16] "GET /form HTTP/1.1" 200 -
self_ip
127.0.0.1 - - [18/Nov/2018 01:11:19] "POST /form HTTP/1.1" 200 -
bbtest
127.0.0.1 - - [18/Nov/2018 01:16:39] "POST /form HTTP/1.1" 200 -

2.後臺資料如何在前端顯示

這個功能,也就是要求我們能夠將flask主程式,或其他python程式中,執行的變數,顯示在前臺的html頁面中

我們對之前的頁面,稍加修改

前臺程式碼如下:

修改後臺程式

@app.route('/form',methods = ['GET','POST'])
def hello_form():
if request.method == 'POST':
name=request.form.get('name')
print(name)
return render_template('form.html',name=name)
else:
return render_template('form.html')

讓我們嘗試一下,當我們在名稱的輸入欄中輸入bb時,頁面返回

可見,我們從前臺提交的資料,在被後臺獲取後,又通過前臺顯示了出來。實現了將後臺資料前臺展示的功能。

3.按鈕功能對應後臺程式功能實現的一些方法

我們繼續對我們的程式進行修改,修改如下:

def run():
print('Run!!!')

@app.route('/form',methods = ['GET','POST'])
def hello_form():
if request.method == 'POST':
name=request.form.get('name')
print(name)
return render_template('form.html',name=name,run=run())
else:
return render_template('form.html')

修改前臺頁面,增加一個執行按鈕:

前臺頁面呈現如下:

我們點選執行試一下,看一下flask輸出的結果:

* Environment: production
   WARNING: Do not use the development server in a production environment.
   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 - - [18/Nov/2018 01:37:23] "GET /form HTTP/1.1" 200 -

Run!!!

127.0.0.1 - - [18/Nov/2018 01:37:25] "POST /form HTTP/1.1" 200 -

可見,通過點選“執行”按鈕,實現了後臺對應程式的執行,滿足我們提出的要求。


總結

這篇文章,算是匆匆交差,一來是對每週一篇技術類博文更新這個承諾的兌現,二來也是給這一系列《flask結合bootstrap快速搭建web應用》文章的一個首尾。

最近博主在自主開發一個專案,在專案開發的過程中,越來越感覺到個人前臺相關技術能力的缺失。應付自己的需求尚不能滿足,要想滿足其他人的需求更是十分困難。一些功能雖然能夠勉強實現,但始終不是最優的解決方案。一些明明是可以在前臺就完成的功能,卻需要到後臺來,通過重新請求頁面來完成。尤其是Ajax,JavaScript等技術能力的確實,這對我理解一些問題的解決辦法時造成了很大的障礙。

由於以上種種原因,《flask結合bootstrap快速搭建web應用》文章暫時不再更新了,再更新下去也難免誤人子弟。

博主會爭取抽出時間,沉下心來學習前端所需的相關知識。等真的完全具備前端開發的能力,再來和大家講講~