Falsk_day01

来源:https://www.cnblogs.com/W-Zing/archive/2018/08/26/9536297.html
-Advertisement-
Play Games

Flask簡介 Flask是用 Python 語言基於 Werkzeug 工具箱編寫的輕量級Web開發框架。 其 WSGI 工具箱採用 Werkzeug(路由模塊),模板引擎則使用 Jinja2。這兩個也是 Flask 框架的核心。 搭建虛擬環境(Ubuntu) 一、安裝虛擬環境命令: 二、創建虛擬 ...


Flask簡介

  Flask是用 Python 語言基於 Werkzeug 工具箱編寫的輕量級Web開發框架。

  其 WSGI 工具箱採用 Werkzeug(路由模塊),模板引擎則使用 Jinja2。這兩個也是 Flask 框架的核心。

搭建虛擬環境(Ubuntu)

  一、安裝虛擬環境命令:

  1、sudo pip install virtualenv

  2、sudo pip install virtualenvwrapper

  二、創建虛擬環境命令(需聯網):

  在python3中,創建虛擬環境(python2創建則不需要 -p python3):
  mkvirtualenv -p python3 虛擬環境名稱

  三、使用虛擬環境:

  1、查看虛擬環境的命令:workon 兩次tab鍵

  2、使用虛擬環境的命令:workon 虛擬環境名稱

  3、退出虛擬環境的命令:deactivate

  4、刪除虛擬環境的命令(先退出虛擬環境):rmvirtualenv 虛擬環境名稱

  5、在虛擬環境中安裝工具包:pip install 包名稱

    例:安裝flask-0.10.1的包 :pip install flask==0.10.1

  6、查看虛擬環境中安裝的包:pip freeze

 第一個Flask程式 HelloWord

  首選用 pycharm 選擇相應的虛擬環境的路徑

 1 # 導入Flask模塊
 2 from flask import Flask
 3 
 4 
 5 # 創建app實例
 6 app = Flask(__name__)
 7 
 8 
 9 # 通過裝飾器路由,把url與視圖函數綁定起來
10 @app.route('/')
11 def index():
12     return 'hello word!'
13 
14 
15 if __name__ == '__main__':
16     # 運行當前Flask應用程式
17     app.run()
Hello Word

Flask 程式初始化參數

1 app = Flask(__name__,  # import_name是 Flask 程式所在的包(模塊),傳__name__就可以。其可以決定 Flask 在訪問靜態文件時查找的路徑
2             # static_path='static',  已廢棄(用static_url_path代替)
3             static_url_path='/static',  # 靜態文件訪問路徑,可以不傳,預設為:/ + static_folder
4             static_folder='static',  # 靜態文件存儲的文件夾,可以不傳,預設為 static 
5             template_folder='templates'  # 模板文件存儲的文件夾,可以不傳,預設為 templates 
6             )
View Code

程式載入配置

  1、從配置對象中載入(常用):

class Config(object):
    DEBUG = True
app.config.from_object(Config)

  2、從配置文件中載入:

app.config.form_pyfile('配置文件名')

  3、從環境變數中載入:

app.config.from_envvar('環境變數名稱')

讀取配置

app.config.get()
# 在視圖函數中使用 current_app.config.get()

app.run的參數

app.run(host="0.0.0.0", port=5000, debug = True)

路由基本定義

  1、定義路由裝飾器 :@app.route(“/參數“)

  2、定義請求方式 :methods=[‘GET’,‘POST’]

  3、獲取請求方式 :request.method

  參考代碼:

# 路由傳遞參數
@app.route('/user/<user_id>', methods=['GET', 'POST'])  # methods給路由添加請求方式
def user_info(user_id):
    return 'hello %s %s' % (user_id, request.method)
# 路由傳遞的參數預設當做 string 處理,也可以指定參數的類型@app.route('/user/<int:user_id>')

Falsk 返回 JSON 數據給客戶端( 常用 jsonify( )

 1 from flask import Flask, jsonify
 2 from flask import json
 3 
 4 app = Flask(__name__)
 5 
 6 
 7 @app.route('/')
 8 def index():
 9     return 'index'
10 
11 
12 @app.route('/demo2')
13 def demo2():
14     json_dict = {
15         "name": "wenwang",
16         "age": 18
17     }
18     # 使用json.dumps將字典轉成JSON字元串
19     # result = json.dumps(json_dict)
20     # 使用json.loads將JSON字元串轉成字典
21     # test_dict = json.loads('{"age": 18, "name": "wenwang"}')
22     # return result
23 
24     # TODO jsonify會指定響應內容數據的格式(告訴客戶端我返回給你的數據格式是什麼)
25     return jsonify(json_dict)
26 
27 if __name__ == '__main__':
28     app.run(debug=True)
View Code

重定向redirect( ) ,url_for( ) )

  例1、重定向到百度

# 重定向
@app.route('/demo1')
def demo1():
    return redirect('http://www.baidu.com')

  例2、重定向到視圖函數

 1 # 路由傳遞參數
 2 @app.route('/user/<int:user_id>')
 3 def user_info(user_id):
 4     return 'hello %d' % user_id
 5 
 6 # 重定向
 7 @app.route('/demo2')
 8 def demo2():
 9     # 使用 url_for 生成指定視圖函數所對應的 url
10     return redirect(url_for('user_info', user_id=100))
View Code

自定義狀態碼

@app.route('/demo6')
def demo6():
    return '狀態碼為 666', 666  # 666就為自定義狀態碼

正則匹配路由

  實現步驟:

  1、導入轉換器基類:在 Flask 中,所有的路由的匹配規則都是使用轉換器對象進行記錄。

  2、自定義轉換器:自定義類繼承於轉換器基類。

  3、添加轉換器到預設的轉換器字典中。

  4、使用自定義轉換器實現自定義匹配規則。

  代碼實現:

 1 from flask import Flask
 2 from flask import redirect
 3 from flask import url_for
 4 from werkzeug.routing import BaseConverter
 5 
 6 
 7 class RegexConverter(BaseConverter):
 8     """自定義正則的轉換器"""
 9     # regex = '[0-9]{6}'
10 
11     def __init__(self, url_map, *args):
12         super(RegexConverter, self).__init__(url_map)
13         # 取到第1個參數,給regex屬性賦值
14         self.regex = args[0]
15 
16 
17 class ListConverter(BaseConverter):
18     regex = "(\\d+,?)+\\d$"
19 
20     def to_python(self, value):
21         """當匹配到參數之後,對參數做進一步處理之後,再返回給視圖函數中"""
22         return value.split(',')
23 
24     def to_url(self, value):
25         """使用url_for的時候,對視圖函數傳的參數進行處理,處理完畢之後以便能夠進行路由匹配"""
26         result = ','.join(str(v) for v in value)
27         return result
28         
29 
30 app = Flask(__name__)
31 # 將自己的轉換器添加到預設的轉化器列表中
32 app.url_map.converters['re'] = RegexConverter
33 app.url_map.converters['list'] = ListConverter
34 
35 
36 @app.route('/')
37 def index():
38     return 'index'
39 
40 # 自定義轉換器
41 # @app.route('/user/<re:user_id>')
42 @app.route('/user/<re("[0-9]{6}"):user_id>')
43 def demo1(user_id):
44     return '用戶的id是 %s' % user_id
45 
46 
47 @app.route('/users/<list:user_ids>')
48 def demo2(user_ids):
49     return '用戶的id是 %s' % user_ids
50 
51 
52 @app.route('/demo3')
53 def demo3():
54     return redirect(url_for('demo2', user_ids=[1, 3, 4, 5]))
55 
56 
57 if __name__ == '__main__':
58     app.run(debug=True)
View Code

異常捕獲( abort() ,@app.errorhandler()

  HTTP 異常主動拋出

abort(404)

  捕獲異常

@app.errorhandler(404)
def internal_server_error(e):
    return '網址找不到了'

  捕獲指定異常

@app.errorhandler(ZeroDivisionError)  # 捕獲除數不能為0的異常
def zero_division_error(e):
    return '除數不能為0'

 請求鉤子( before_request ,after_request )

  為了讓每個視圖函數避免編寫重覆功能的代碼,Flask提供了通用設施的功能,即請求鉤子。

  請求鉤子是通過裝飾器的形式實現,Flask支持如下四種請求鉤子:

  1、before_first_request

    • 在處理第一個請求前執行

  2、before_request

    • 在每次請求前執行
    • 如果在某修飾的函數中返回了一個響應,視圖函數將不再被調用

  3、after_request

    • 如果沒有拋出錯誤,在每次請求後執行
    • 接受一個參數:視圖函數作出的響應
    • 在此函數中可以對響應值在返回之前做最後一步修改處理
    • 需要將參數中的響應在此參數中進行返回

  4、teardown_request

    • 在每次請求後執行
    • 接受一個參數:錯誤信息,如果有相關錯誤拋出

   測試代碼:

 1 from flask import Flask
 2 
 3 app = Flask(__name__)
 4 
 5 
 6 @app.before_first_request
 7 def before_first_request():
 8     """在第一次請求之前會訪問該函數"""
 9     print('before_first_request')
10 
11 
12 @app.before_request
13 def before_request():
14     """在每次請求之前都會調用"""
15     print('before_request')
16     # 可以對一些的請求進行阻止
17 
18 
19 @app.after_request
20 def after_request(response):
21     """在請求之後會調用,並且函數裡面接受一個參數:響應,還需要將響應進行返回"""
22     print('after_request')
23     # 可以在此函數中對響應數據做統一的處理
24     return response
25 
26 
27 @app.teardown_request
28 def teardown_request(error):
29     """在請求之後會執行,如果請求的函數報有異常,會把具體異常傳入到此函數"""
30     print('teardown_request')
31 
32 
33 @app.route('/')
34 def index():
35     return 'index'
36 
37 
38 if __name__ == '__main__':
39     app.run(debug=True)
View Code

 

 

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在雙模的項目中,我遇到了一個問題,我公司的雙模項目是基於ECShop的框架,在完成訂單列表的頁面時,我寫了兩個form表單來單獨傳輸數據,第一個表單是用來做搜素的,第二個表單是用來顯示表單信息的,在控制器中我並不是用index方法來渲染這個頁面的,這是這個問題的關鍵,我用的是同一個控制器下的prod... ...
  • 會員登錄在我們的好多項目中都有用到,比如在後臺管理系統,它的第一步就需要你進行登錄,還有在我們常見的京東、淘寶、網易雲音樂等一系列的軟體上面都需要進行登錄。 下麵我們直接上代碼 現在我們可以看到,我使用的post方法向伺服器端發送數據,當請求成功的時候,我們暫時把它存儲在本地,這裡也可以結合redu ...
  • 一,實現拼圖的搭建: <div class="box"> <table id="table1" class="mytable"> <tr> <td id="1"><img src="Files/01.gif" /></td> <td id="2"><img src="Files/02.gif" /> ...
  • 1、jQuery中的prop()和attr()的區別 prop()是在jQuery1.6版本之後才有的,在之前一直都是使用attr(), prop()修複了attr()的一些小bug。 2、推薦用法: prop() :在HTML元素固有屬性的時候用prop() attr() : 推薦在HTML非固有 ...
  • 這是設計模式的最後一篇,最近事還是挺多,自己的東西還是沒進步。其實我這個人不用和領導套近乎,我有自己的職業素養,工匠精神。我喜歡獨處,喜歡自由,也喜歡女人,我訂婚後也很幸福。 今年我31周歲了,現在不是回想以前的時候,但是還是我應該努力的時候,不停的上進,堅持最後一定會成功!最怕傻逼式的堅持! 朋友 ...
  • 概述 面向消息的中間件(message-oriented middleware 簡稱 MOM)支持在分散式系統之間發送和接收消息的軟體或硬體基礎橋梁。MOM允許應用程式模塊分佈在各個平臺上,並減少了跨多個操作系統和網路協議的開發應用程式的複雜性。中間件創建了一個分散式通信層,將應用程式開發人員與各種 ...
  • 1、自定義類型的定義及使用 2、自定義類的記憶體圖 3、ArrayList集合的基本功能 4、隨機點名器案例及庫存案例代碼優化 ...
  • Asp.Net MVC EF之一:使用Database類在EF框架中執行Sql語句 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...