Flask

第一個flask程序及運行過程

  1.當客戶端想要獲取資源時,通常會經過瀏覽器發起http請求html

  2.此時,Web服務器會把來自客戶端的全部請求都交給Flask程序實例python

  3.程序實例使用Werkzeug來作路由分發(URL請求和視圖函數之間的對應關係)web

  4.根據每一個URL請求,找到具體的視圖函數並進行調用flask

    在Flask程序中,路由的實現通常是經過程序實例的裝飾器實現瀏覽器

  5.Flask調用視圖函數後,能夠返回兩種內容:服務器

    1.字符串內容:將視圖函數的返回值做爲響應的內容,返回給客戶端app

    2.HTML模板內容:獲取到數據後,把數據傳入HTML模板文件中,模板引擎(Jinja2)負責渲染HTTP響應數據,而後返回響應數據給客戶端函數

# -*- coding:utf-8 -*-
# 1.導入Flask擴展
from flask import Flask
# 2.建立Flask應用程序實例
# 須要傳入__name__,做用是爲了肯定資源所在路徑
app = Flask(__name__)
# 3.定義路由及視圖函數
# Flask中定義路由是經過裝飾器實現的,路由默認只支持GET,若是須要增長,須要自行指定
@app.route('/',methods=['GET','POST'])
def hello_world():
    return 'Hello Flask'
# 4.啓動程序
if __name__ == '__main__':
    # 執行了app.run()就會將Flask程序運行在一個簡易的服務器(Flask提供的,用於測試的)上
    app.run()

路由定義的基本方式

  默認路由只支持GET請求,可是能夠經過methods指定http請求的方式測試

  如:@app.route('/',methods=['GET','POST'])url

給路由傳參示例

  有時候咱們須要將同一類URL映射到同一個視圖函數處理,好比使用同一個視圖函數來顯示不一樣用戶的訂單信息

  路由傳遞的參數默當作string:

# -*- coding:utf-8 -*-
# 1.導入Flask擴展
from flask import Flask
# 2.建立Flask應用程序實例
# 須要傳入__name__,做用是爲了肯定資源所在路徑
app = Flask(__name__)
# 3.定義路由及視圖函數
# Flask中定義路由是經過裝飾器實現的
@app.route('/')
def hello_world():
    return 'Hello Flask'

# 使用同一個視圖函數,來顯示不一樣用戶的訂單信息,<>定義路由的參數,<>內須要起一個名字
@app.route('/orders/<int:order_id>')# 參數默認類型爲字符串,經過int:強制轉換,若是轉換失敗沒法匹配該路由,如今參數爲int類型
def get_order_id(order_id):
    # 須要在視圖函數的()內填入參數名,那麼後面的代碼才能去使用
    return 'order_id: %s' % order_id
# 4.啓動程序
if __name__ == '__main__':
    # 執行了app.run()就會將Flask程序運行在一個簡易的服務器(Flask提供的,用於測試的)上
    app.run()

 Jinja2模板引擎

使用模板的好處

  1.視圖函數只負責業務邏輯和數據處理(業務邏輯方面)

  2.而模板則取到視圖函數的數據結果進行展現(視圖展現方面)

  3.代碼結構清晰,耦合度低

兩個概念

  1.Jinja2:是python下一個被普遍應用的模板引擎,是由python實現的模板語言,他的設計思想來源於Django的模板引擎,並擴展了其餘語法和一系列強大的功能,其是Flask內置的模板語言

  2.模板語言:是一種被設計來自動生成文檔的簡單文本格式,在模板語言中,通常都會把一些變量傳給模板,替換模板的特定位置上預先定義好的佔位變量名.

    好比:render_template('index.html', 模板中要使用的變量名=視圖函數中的變量)

模板渲染函數

  Flask提供的render_template函數封裝了該模板引擎

  render_template函數的第一個參數是模板的文件名(須要放在templates目錄下面),後面的參數都是鍵值對,表示模板中變量對應的真是值

模板語言的使用

  1.使用{# #}進行註釋

  2.變量代碼塊

    {{}}來表示變量名,這種{{}}語法叫作變量代碼塊

  3.Jinja2模板中的變量代碼能夠是Python類型或者對象,只要它可以被python的str()方法轉換爲一個字符串就能夠

控制代碼塊

  用{%%}定義的控制代碼塊,能夠實現一些語言層次的功能,好比循環或if語句

    {% if user %}

               {{user}}

    {%  else %}

    {%  for index in indexs%}

      {{index}}

    {% endfor %}

過濾器

  過濾器的本質就是函數,有時候咱們不單單只是須要輸出變量的值,咱們還須要修改變量的顯示,甚至格式化,運算等,而在模板中是不能直接調用python中的某些方法,那麼就用到了過濾器

  使用方式:

    過濾器的使用方式爲:變量名|過濾器

    {{variable | filter_name(*args)}}

    若是沒有任何參數傳遞給過濾器,則能夠把括號省略掉

    {{variable | filter_name}}

  鏈式調用

    {{variable | filter_name1 | filter_name2}}

from flask import Flask, render_template
app = Flask(__name__)
# 1.返回一個網頁(模板)
# 2.給模板填充數據
@app.route('/')
def index():
    url_str = 'www.baidu.com'
    my_list = [1,3,5,7]
    # html文件須要放在templates目錄下
    return render_template('index.html',
            tem_url=url_str,
            my_list=my_list)

if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
    <title>Flask</title>
</head>
<body>
    {#這是模板 #}
    這是首頁<br>
    百度網址:{{tem_url}}
    <hr>
    {%for num in my_list%}
        {% if num >=3 %}
            {{num}}<br>
        {% endif %}
    {% endfor%}
    {#過濾器#}
    {{tem_url | upper}}
</body>
</html>

 Web表單

在Flask中,爲了處理web表單,通常使用Flask-WTF擴展,它封裝了WTForms,而且它有驗證表單數據的功能

相關文章
相關標籤/搜索