使用Flask和Pydantic實現參數驗證

使用Flask和Pydantic實現參數驗證

1 簡介

Pydantic是一個用于數據驗證和解析的 Python 庫,版本2的性能有較大提升,很多框架使用Pydantic做數據校驗。

# 官方參考文檔
https://docs.pydantic.dev/latest/# Github地址
https://github.com/pydantic/pydantic

2 使用Flask自定義參數校驗

2.1 結構

在這里插入圖片描述

2.2 源代碼

app_result.py

import jsonfrom flask import jsonifydef result(data: object = None, code: int = 200, msg: str = "success"):"""Set the result of web:param data: It is data of status:param code: It is code of status:param msg: It is a message of status:return: dict"""# 將對象轉化為json字符串data_json_str = json.dumps(data, ensure_ascii=False, default=lambda obj: obj.__dict__)# 將json字符串轉化為json字典data_json_dict = json.loads(data_json_str)# 設置返回值字典result_dict = {"code": code,"msg": msg,"data": data_json_dict}return jsonify(result_dict)

validate_request.py

from flask import request
from pydantic import ValidationErrorfrom entity.app.app_result import resultdef validate_form(form_object):# 設置含有請求參數的裝飾器def inner(fun):def inner_sub():try:# 獲取Content-Typecontent_type = request.content_typeif content_type is None:return result(code=400, msg="No parameters")# 驗證參數form_instance = None# 獲取 “application/json” 請求if "application/json" in content_type:# 獲取json字典數據parameters = request.get_json(silent=True)# 將字典轉化為對象form_instance = form_object(**parameters)else:# 獲取 "application/x-www-form-urlencoded" 或者 "multipart/form-data" 請求等parameters = request.form.to_dict()# 將字典轉化為對象form_instance = form_object(**parameters)# print(parameters)return fun(form_instance)except ValidationError as e:print(e.json())# 存儲錯誤參數列表parameters_invalid = list()# 處理參數for error in e.errors():parameters_invalid.append({"attr": error.get("loc")[0],"msg": error.get("msg")})return result(parameters_invalid, code=400, msg="The parameter is invalid")# 更改視圖名稱inner_sub.__name__ = fun.__name__return inner_subreturn inner

data_form.py

from typing import Optionalfrom pydantic import BaseModel, Field, field_validatorclass DataForm(BaseModel):# Python中"..."3個點是Ellipsis對象,主要用于切片操作和類型注解?# pydantic中Field的"..."3個點表示必填項name: str = Field(..., title="The name of the item", description="deldldlddl", max_length=5)desc: Optional[str] = Field(..., title="The description of the item", max_length=2)price: float = Field(..., title="The price of the item", ge=0.01)"""# 如果不使用Field設置驗證參數,可以使用@field_validator注解# 自定義驗證器@field_validator('price')# cls是一個用于類方法的參數,代表類本身def age_must_be_positive(cls, v):if v < 0:raise ValueError('年齡不能為負數')return v"""

index.py

from flask import Flask, Blueprintfrom test.data_form import DataForm
from entity.form.validate_request import validate_formapp = Flask(__name__)# 構建藍本
admin = Blueprint("admin", __name__)@admin.route("/info")
@validate_form(DataForm)
def info(info_form: DataForm):print(info_form.name)print(info_form.desc)return "Hello Admin"@admin.route("/msg")
@validate_form(DataForm)
def msg(msg_form: DataForm):print(msg_form)return "Hello Admin"# 注冊藍本
app.register_blueprint(admin, url_prefix='/admin')if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)

2.3 返回值

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66422.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ScratchLLMStepByStep:訓練自己的Tokenizer

1. 引言 分詞器是每個大語言模型必不可少的組件&#xff0c;但每個大語言模型的分詞器幾乎都不相同。如果要訓練自己的分詞器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要組件&#xff1a; Tokenizer: 分詞器的核心組件&#xff0c;定…

C# OpenCvSharp 部署3D人臉重建3DDFA-V3

目錄 說明 效果 模型信息 landmark.onnx net_recon.onnx net_recon_mbnet.onnx retinaface_resnet50.onnx 項目 代碼 下載 參考 C# OpenCvSharp 部署3D人臉重建3DDFA-V3 說明 地址&#xff1a;https://github.com/wang-zidu/3DDFA-V3 3DDFA_V3 uses the geometri…

從零開始學數據庫 day2 DML

從零開始學數據庫&#xff1a;DML操作詳解 在今天的數字化時代&#xff0c;數據庫的使用已經成為了各行各業的必備技能。無論你是想開發一個簡單的應用&#xff0c;還是想要管理復雜的數據&#xff0c;掌握數據庫的基本操作都是至關重要的。在這篇博客中&#xff0c;我們將專注…

Java 8 Stream API

文章目錄 Java 8 Stream API1. Stream2. Stream 的創建3. 常見的 Stream 操作3.1 中間操作3.2 終止操作 4. Stream 的并行操作 Java 8 Stream API Java 8 引入了 Stream API&#xff0c;使得對集合類&#xff08;如 List、Set 等&#xff09;的操作變得更加簡潔和直觀。Stream…

運行fastGPT 第五步 配置FastGPT和上傳知識庫 打造AI客服

運行fastGPT 第五步 配置FastGPT和上傳知識庫 打造AI客服 根據上一步的步驟&#xff0c;已經調試了ONE API的接口&#xff0c;下面&#xff0c;我們就登陸fastGPT吧 http://xxx.xxx.xxx.xxx:3000/ 這個就是你的fastGPT后臺地址&#xff0c;可以在configer文件中找到。 賬號是…

第4章 Kafka核心API——Kafka客戶端操作

Kafka客戶端操作 一. 客戶端操作1. AdminClient API 一. 客戶端操作 1. AdminClient API

【王樹森搜索引擎技術】相關性02:評價指標(AUC、正逆序比、DCG)

相關性的評價指標 Pointwise評價指標&#xff1a;Area Under the Curve&#xff08;AUC&#xff09;Pairwise評價指標&#xff1a;正逆序比&#xff08;Positive to Negative Ratio, PNR&#xff09;Listwise評價指標&#xff1a;Discounted Cumulative Gain(DCG)用AUC和PNR作…

人物一致性訓練測評數據集

1.Pulid 訓練:由1.5M張從互聯網收集的高質量人類圖像組成,圖像標題由blip2自動生成。 測試:從互聯網上收集了一個多樣化的肖像測試集,該數據集涵蓋了多種膚色、年齡和性別,共計120張圖像,我們稱之為DivID-120,作為補充資源,還使用了最近開源的測試集Unsplash-50,包含…

Android 項目依賴沖突問題:Duplicate class found in modules

問題描述與處理處理 1、問題描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…

計算機網絡 | 什么是公網、私網、NAT?

關注&#xff1a;CodingTechWork 引言 計算機網絡是現代信息社會的基石&#xff0c;而網絡通信的順暢性和安全性依賴于有效的IP地址管理和網絡轉換機制。在網絡中&#xff0c;IP地址起到了標識設備和進行數據傳輸的核心作用。本文將詳細討論公網IP、私網IP以及NAT轉換等網絡技…

python+django+Nacos實現配置動態更新-集中管理配置(實現mysql配置動態讀取及動態更新)

一、docker-compose.yml 部署nacos服務 version: "3" services:mysql:container_name: mysql# 5.7image: mysql:5.7environment:# mysql root用戶密碼MYSQL_ROOT_PASSWORD: rootTZ: Asia/Shanghai# 初始化數據庫(后續的初始化sql會在這個庫執行)MYSQL_DATABASE: nac…

深度學習項目--基于LSTM的火災預測研究(pytorch實現)

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 前言 LSTM模型一直是一個很經典的模型&#xff0c;這個模型當然也很復雜&#xff0c;一般需要先學習RNN、GRU模型之后再學&#xff0c;GRU、LSTM的模型講解將…

基于 WEB 開發的汽車養護系統設計與實現

標題:基于 WEB 開發的汽車養護系統設計與實現 內容:1.摘要 本文介紹了基于 WEB 開發的汽車養護系統的設計與實現。文章首先闡述了系統的背景和目的&#xff0c;即隨著汽車保有量的增加&#xff0c;汽車養護需求日益增長&#xff0c;傳統的汽車養護方式已經無法滿足人們的需求&…

GitLab集成Jira

GitLab與Jira集成的兩種方式 GitLab 提供了兩種 Jira 集成&#xff0c;即Jira議題集成和Jira開發面板集成&#xff0c;可以配置一個或者兩個都配置。 具體集成步驟可以參考官方文檔Jira 議題集成&#xff08;極狐GitLab文檔&#xff09;和Jira 開發面板集成&#xff08;極狐G…

【爬蟲】某某查cookie逆向

代碼僅供技術人員進行學習和研究使用&#xff0c;請勿將其用于非法用途或以任何方式竊取第三方數據。使用該代碼產生的所有風險均由用戶自行承擔&#xff0c;作者不對用戶因使用該代碼而造成的任何損失或損害承擔任何責任。 加密參數 加密參數主要是cookie&#xff0c;其中只有…

A5.Springboot-LLama3.2服務自動化構建(二)——Jenkins流水線構建配置初始化設置

下面我們接著上一篇文章《A4.Springboot-LLama3.2服務自動化構建(一)——構建docker鏡像配置》繼續往下分析,在自動化流水線構建過程當中的相關初始化設置和腳本編寫。 一、首先需要先安裝Jenkins 主部分請參考我前面寫的一篇文章《Jenkins持續集成與交付安裝配置》 二、…

如何設置HTTPS站點防御?

設置HTTPS站點防御涉及到多個層面的安全措施&#xff0c;包括但不限于配置Web服務器、應用安全頭信息、使用內容安全策略&#xff08;CSP&#xff09;、啟用HSTS和OCSP Stapling等。下面是一些關鍵的步驟來增強HTTPS網站的安全性&#xff1a; 1. 使用強加密協議和密鑰交換算法…

[Java]類和對象

1. 什么是類&#xff1f; 類&#xff08;Class&#xff09;是藍圖或者模板。它定義了對象的屬性和行為。 類就是一種抽象的模板&#xff0c;你可以通過它創建多個對象。類定義了對象的屬性&#xff08;變量&#xff09;和行為&#xff08;方法&#xff09;。我們可以把類理解…

win32匯編環境,窗口程序中基礎列表框的應用舉例

;運行效果 ;win32匯編環境,窗口程序中基礎列表框的應用舉例 ;比如在窗口程序中生成列表框&#xff0c;增加子項&#xff0c;刪除某項&#xff0c;取得指定項內容等 ;直接抄進RadAsm可編譯運行。重點部分加備注。 ;以下是ASM文件 ;>>>>>>>>>>>…

【機器學習實戰入門】使用LSTM機器學習預測股票價格

機器學習在股票價格預測中有重要的應用。在這個機器學習項目中&#xff0c;我們將討論如何預測股票的收益。這是一個非常復雜的任務&#xff0c;充滿了不確定性。我們將會把這個項目分成兩部分進行開發&#xff1a; 首先&#xff0c;我們將學習如何使用 LSTM 神經網絡預測股票…