Flask學習筆記(四)從helloworld開始

Flask程序運行過程:

所有Flask程序必須有一個程序實例。

Flask調用視圖函數後,會將視圖函數的返回值作爲響應的內容,返回給客戶端。一般情況下,響應內容主要是字符串和狀態碼。

當客戶端想要獲取資源時,一般會通過瀏覽器發起HTTP請求。此時,Web服務器使用WSGI(Web Server Gateway Interface)協議,把來自客戶端的所有請求都交給Flask程序實例。WSGI是爲 Python 語言定義的Web服務器和Web應用程序之間的一種簡單而通用的接口,它封裝了接受HTTP請求、解析HTTP請求、發送HTTP,響應等等的這些底層的代碼和操作,使開發者可以高效的編寫Web應用。

程序實例使用Werkzeug來做路由分發(URL請求和視圖函數之間的對應關係)。根據每個URL請求,找到具體的視圖函數。 在Flask程序中,路由的實現一般是通過程序實例的route裝飾器實現。route裝飾器內部會調用add_url_route()方法實現路由註冊。

調用視圖函數,獲取響應數據後,把數據傳入HTML模板文件中,模板引擎負責渲染響應數據,然後由Flask返回響應數據給瀏覽器,最後瀏覽器處理返回的結果顯示給客戶端。

示例:

新建文件hello.py:

# 導入Flask類
from flask import Flask

#Flask類接收一個參數__name__
app = Flask(__name__)

# 裝飾器的作用是將路由映射到視圖函數index
@app.route('/')
def index():
    return 'Hello World'

# Flask應用程序實例的run方法啓動WEB服務器
if __name__ == '__main__':
    app.run()

查看視圖函數中的路由:
在這裏插入圖片描述
給路由傳參示例:
有時我們需要將同一類URL映射到同一個視圖函數處理,比如:使用同一個視圖函數 來顯示不同用戶的個人信息。

# 路由傳遞的參數默認當做string處理,這裏指定int,尖括號中冒號後面的內容是動態的
@app.route('/user/<int:id>')
def hello_itcast(id):
    return 'hello itcast %d' %id

在這裏插入圖片描述
返回狀態碼示例:
return後面可以自主定義狀態碼(即使這個狀態碼不存在)。當客戶端的請求已經處理完成,由視圖函數決定返回給客戶端一個狀態碼,告知客戶端這次請求的處理結果。

@app.route('/')
def hello_itcast():
    return 'hello itcast',999

在這裏插入圖片描述
abort函數:
如果在視圖函數執行過程中,出現了異常錯誤,我們可以使用abort函數立即終止視圖函數的執行。通過abort函數,可以向前端返回一個http標準中存在的錯誤狀態碼,表示出現的錯誤信息。

使用abort拋出一個http標準中不存在的自定義的狀態碼,沒有實際意義。如果abort函數被觸發,其後面的語句將不會執行。其類似於python中raise。

from flask import Flask,abort
@app.route('/')
def hello_itcast():
    abort(404)
    return 'hello itcast',999

捕獲異常:
在Flask中通過裝飾器來實現捕獲異常,errorhandler()接收的參數爲異常狀態碼。視圖函數的參數,返回的是錯誤信息。

@app.errorhandler(404)
def error(e):
    return '您請求的頁面不存在了,請確認後再次訪問!%s'%e

在這裏插入圖片描述
重定向redirect示例

from flask import redirect
@app.route('/')
def hello_itcast():
    return redirect('http://www.itcast.cn')

在這裏插入圖片描述
正則URL示例:
正則URL是爲了匹配指定的URL,而匹配指定的URL則可以達到限制訪問,以及優化訪問路徑的目的。

from flask import Flask
from werkzeug.routing import BaseConverter

class Regex_url(BaseConverter):
    def __init__(self,url_map,*args):
        super(Regex_url,self).__init__(url_map)
        self.regex = args[0]

app = Flask(__name__)
app.url_map.converters['re'] = Regex_url

@app.route('/user/<re("[a-z]{3}"):id>')
def hello_itcast(id):
    return 'hello %s' %id

設置cookie和獲取cookie

from flask import Flask,make_response
@app.route('/cookie')
def set_cookie():
    resp = make_response('this is to set cookie')
    resp.set_cookie('username', 'itcast')
    return resp

在這裏插入圖片描述

from flask import Flask,request
#獲取cookie
@app.route('/request')
def resp_cookie():
    resp = request.cookies.get('username')
    return resp

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章