1. 程式人生 > >跟我學Flask(二)-從HelloWorld講起

跟我學Flask(二)-從HelloWorld講起

從本節開始,會一步步帶領大家從零開發一個網站,前面為理論教程,後面為專案實戰

本節主要以例項為主,熟悉flask基本語法,下一節會介紹程式執行的流程


一、從簡單的Hello World開始

我們先看一段最簡單的程式碼,然後在進行具體的分析

# 匯入Flask
from flask import Flask

# 建立Flask類的物件
app = Flask(__name__)

#定義路由地址
@app.route('/')
def hello():
    #返回資料
    return 'hello world'


if __name__=='__main__'
: app.run()

在這裡插入圖片描述
在這裡插入圖片描述

執行程式碼後會在本地開啟伺服器,瀏覽器訪問該網址就能看到頁面上打印出了helloworld

127.0.0.1是本地主機地址,5000為預設的埠號

二、初始化引數

Flask 程式例項在建立的時候,需要預設傳入當前 Flask 程式所指定的包(模組),接下來就來詳細檢視一下 Flask 應用程式在建立的時候一些需要我們關注的引數:
在這裡插入圖片描述

  • import_name
    • 必須傳入該引數
    • Flask程式所在的包(模組),傳 __name__ 就可以
    • 引數型別必須是字串
    • 如果傳入標準模組名,只會影響靜態路徑的訪問,不會影響檢視函式的訪問。
  • static_path
    • 靜態檔案訪問路徑(不推薦使用,使用 static_url_path 代替)
  • static_url_path
    • 靜態檔案訪問路徑,可以不傳,預設為:/ + static_folder
  • static_folder
    • 靜態檔案儲存的資料夾,可以不傳,預設為 static
  • template_folder
    • 模板檔案儲存的資料夾,可以不傳,預設為 templates

三、路由引數配置

@app.route('/add'
,methods=['POST','GET','PUT','DELETE']) def add(): pass

上面程式碼作用:通過裝飾器定義路由url地址,在瀏覽器訪問此url時呼叫被裝飾的函式

上面的add函式為檢視函式,檢視函式不能重名,但url可以重複,因為同一url地址可能有不同的請求方法,所以一般使用列表來儲存路由對映

可以使用app.url_map獲取路由對映表

第一個引數為路由地址,第二個引數為方法,方法可以指定多個,不指定時預設為GET

不使用裝飾器也可以實現路由對映。

# 通過程式例項呼叫新增url規則,也可以實現路由對映。
app.add_url_rule('/123','add',add)

四、檢視函式

上面程式碼中add函式為檢視函式,檢視函式主要作用為接受引數,業務處理,返回想用資料

具體接受引數問題會單獨一篇文章說明

# 1、檢視函式不能重名。
# @app.route('/')
# def hello2019():
    # a = 1
    # b = 2
    # return a,b
    # 不能返回字典
    # my_dict = {'a':'123'}
    # return my_dict
    # 不能返回列表
    # my_list = [1,2,3]
    # return my_list

  • 返回值型別

    return (需要返回的資料, 狀態碼, 響應資訊)

    需要返回的資料必須為字串,如果返回json型別資料,需要先進行轉換

    所以返回值可以為元組,但元組中資料格式要與上面相符

  • 返回json資料

# 返回json資料方法一
@app.route("/")
def index():
    # return '<h1>hello world</h1>'
    data = {'itcast':'python18'}
    # 呼叫標註模組json中的dumps方法,把字典轉成json
    # json.dump()
    return json.dumps(data)
    # return data

# 返回json資料方法二(常用)
@app.route('/json')
def hello():
    data = {'itcast':'sy_python18'}
    # jsonify是flask內建的函式,可以把字典轉成json字串
    # jsonify封裝了響應的資料型別為application/json;image/jpg
    return jsonify(data)