Flask學習筆記 - 項目結構 + 路由

前言

待業家中繼續學習。

Flask 項目結構

my_flask_app/
│
├── app/
│   ├── __init__.py
│   ├── routes/ -- 將不同功能模塊的路由分開管理
│   │   ├── __init__.py
│   │   ├── main.py -- 主模塊的路由
│   │   └── auth.py -- 認證相關的路由
│   ├── models/ -- 管理數據模型,通常與數據操作相關
│   │   ├── __init__.py 
│   │   └── user.py -- 用戶模型
│   ├── templates/ -- 存放 HTML 模板文件
│   │   ├── layout.html -- 布局相關
│   │   └── home.html
│   └── static/ -- 存放靜態文件,如CSS和JavaScript
│       ├── css/
│       └── js/
│
├── config.py -- 配置文件,包含應用的配置信息
├── requirements.txt -- 列出項目的依賴庫
├── migrations/
│   └── ...
└── run.py -- 用于啟動Flask應用

如何在Trae IDE中配置Python解釋器

看到app.py 報錯,因為沒有導入flask庫,但我的設備已經安裝了,所以應該是需要配置下。在設置中找半天沒有找到,后來搜索才知道原來是在Editor中,搜索python,然后將 Python: Default Interpreter Path的路徑設置為設備安裝的路徑。

藏的有點深,可能從產品的角度上看是不想局限在某種語言,可以在Editor設置的說明文案部分增加編譯器,解釋器。

Snip20250401_2.png

Snip20250401_3.png

路由

Flask 路由是Flask應用的核心部分,用于處理不同URL的請求,并將請求的處理委托給相應的視圖函數

路由的相關說明

  1. 定義路由: 使用 @app.route(‘/path’) 裝飾器定義URL和視圖函數的映射。
  2. 路由參數: 通過動態部分在URL中傳遞參數的類型
  3. 路由規則: 使用類型轉換器指定URL參數的類型
  4. 請求方法: 指定允許的HTTP請求方法。(GET,POST,DELETE,PUT)
  5. 路由函數返回: 視圖函數可以返回不同類型的響應
  6. 靜態文件和模板: 管理靜態文件和動態渲染 HTML 模板
  7. 路由優先級: 確保路由順序正確,以避免意外的匹配結果

定義路由

from flask import Flaskapp = Flask(__name__)@app.route('/') # 裝飾器,用于定義路由。/ 表示根 URL
def home(): return 'Welcome to the Home Page!'if __name__ == '__main__':app.run(debug=True)

在這里插入圖片描述

路由參數

...
@app.route('/greet/<name>') # 動態路由,<name> 是一個變量
def greet(name):return f'Hello, {name}!'if __name__ == '__main__':app.run(debug=True)

路由規則

路由規則支持不同

  • 字符串(默認): 匹配任意字符串
  • 整數(int:name): 匹配整數值
  • 浮點數float:value): 匹配浮點數值
  • path(path:name): 匹配任意字符,包括斜桿/
# 訪問/user/1 能正常輸出User ID:1
@app.route('/user/<int:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'# 訪問/user/1 能正常輸出User ID:1
@app.route('/user/<user_id>')
def user_profile(user_id):return f'User ID: {user_id}'# 訪問/user/1 int和user_id同時存在時走int
@app.route('/user/<user_id>')
def user_profile2(user_id):return f'User ID2: {user_id}'# 換成float,訪問/user/1
# Not Found
# The requested URL was not found on the server. If you entered the URL # manually please check your spelling and try again.
@app.route('/user/<float:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'

請求方法

Flask 路由支持不同的 HTTP 請求方法,如 GET、POST、PUT、DELETE 等。可以通過 methods 參數指定允許的請求方法。

@app.route('/submit', methods=['POST'])
def submit():return 'Form submitted!'

此時設置了是POST請求,如果用Trae自帶的瀏覽器訪問,因為實際是GET請求,會報405錯誤碼不允許

2025-04-02 10.58.36.png

使用postman發送post請求驗證能獲得正常的返回

2025-04-02 11.45.25.png

路由函數返回

  • 字符串: 返回純文本響應
  • HTML: 返回HTML頁面
  • JSON: 返回JSON數據
  • Response對象: 自定義響應
from flask import jsonify, Response@app.route('/json')
def json_response():data = {'key': 'value'}return jsonify(data)@app.route('/custom')
def custom_response():response = Response('Custom response with headers', status=200)response.headers['X-Custom-Header'] = 'Value'return response

返回json

2025-04-02 11.52.26.png

返回自定義響應

2025-04-02 11.52.56.png

靜態文件和模板

靜態文件(如 CSS、JavaScript、圖片)可以通過 static 路由訪問。模板文件則通過 templates 文件夾組織,用于渲染 HTML 頁面。

styles.css

<link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
p {color: #940f0f;
}

這個格式默認是在找工程下的static目錄下的styles.css

app.py

@app.route('/tutorial02/<name>')
def hello(name):return render_template('02.html', name=name)

02.html

<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}"><title>02</title>
</head>
<body><h1>02</h1><p>{{ name }}</p>
</body>
</html>

Snip20250402_9.png

路由優先級

Flask 按照定義的順序匹配路由,第一個匹配成功的路由將被處理。確保更具體的路由放在更一般的路由之前。

@app.route('/user/<int:user_id>')
def user_profile(user_id):return f'User ID: {user_id}'@app.route('/user')
def user_list():return 'User List'

/user/123 將匹配到 /user/<int:user_id>,而 /user 將匹配到 user_list

參考

  1. Flask項目結構
  2. Flask路由

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

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

相關文章

SQL 轉 PHP Eloquent、Doctrine ORM, 支持多數據庫

SQL 轉 PHP 說明 在 PHP 開發中&#xff0c;常使用 ORM&#xff08;如 Eloquent、Doctrine&#xff09;操作數據庫。手寫 ORM 模型繁瑣&#xff0c;gotool.top 提供 SQL 轉 PHP 工具&#xff0c;可自動生成 PHP 代碼&#xff0c;提高開發效率。 特色 支持 Laravel Eloquent …

【Python】Python 環境 + Pycharm 編譯器 官網免費下載安裝(圖文教程,新手安裝,Windows 10 系統)

目錄 Python 環境的下載安裝第一步 進入官網第二步 找到匹配 windows 系統的 python 下載頁面第三步 根據電腦 cpu 架構選擇 python 版本第四步 安裝 python 環境第五步 驗證 python 環境變量 Pycharm 的下載安裝第一步 進入官網第二步 安裝 Pycharm Community Edition第三步 第…

基于javaweb的SpringBoot圖片管理系統圖片相冊系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

局域網:電腦或移動設備作為主機實現局域網訪問

電腦作為主機 1. 啟用電腦的網絡發現、SMB功能 2. 將訪問設備開啟WIFI或熱點&#xff0c;用此電腦連接&#xff1b;或多臺設備連接到同一WIFI 3. 此電腦打開命令行窗口&#xff0c;查看電腦本地的IP地址 Win系統&#xff1a;輸入"ipconfig"&#xff0c;回車后如圖 4.…

use_tempaddr 筆記250405

use_tempaddr 筆記250405 use_tempaddr 是 Linux 系統中用于控制 IPv6 臨時隱私地址生成策略 的關鍵參數。以下是其詳細說明&#xff1a; &#x1f4dc; 參數定義 路徑&#xff1a; /proc/sys/net/ipv6/conf/<接口>/use_tempaddr默認值&#xff1a; 1&#xff08;大多數…

NO.66十六屆藍橋杯備戰|基礎算法-貪心-區間問題|凌亂的yyy|Rader Installation|Sunscreen|牛欄預定(C++)

區間問題是另?種?較經典的貪?問題。題??對的對象是?個?個的區間&#xff0c;讓我們在每個區間上做出取舍。 這種題?的解決?式?般就是按照區間的左端點或者是右端點排序&#xff0c;然后在排序之后的區間上&#xff0c;根據題?要求&#xff0c;制定出相應的貪?策略&…

用C語言控制鍵盤上的方向鍵

各位同學&#xff0c;大家好&#xff01;相信大家在學習C語言的過程中&#xff0c;都和我一樣&#xff0c;經常使用scanf函數來接受字符&#xff0c;數字&#xff0c;這些標準輸入信息&#xff0c;來實現自己設計的程序效果。 而我突然有一天&#xff08;對就是今天&#xff09…

特殊的質數肋骨--dfs+isp

1.dfs全排列組數&#xff0c;an記得還原 2.如果范圍確定且只比較質數&#xff0c;isp比線性篩快&#xff0c;主要這個范圍太大了 https://www.luogu.com.cn/problem/P1218 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typed…

定積分的應用(4.39-4.48)

battle cry 前言4.394.404.414.424.434.444.454.464.474.48 前言 題目確實比較多。slow down and take your time. 4.39 狂算了一遍&#xff0c;然后發現不是計算出問題了&#xff0c;是積分上下限寫錯了。還有把函數代進去也出了一點問題。 點火公式一家人我不記得&#x…

如何高效使用 Ubuntu 中文官方網站

Ubuntu 中文官方網站 一、快速導航與核心模塊 首頁焦點區 頂部菜單欄:快速訪問「下載」「文檔」「支持」「商店」等核心功能。輪播圖區:展示最新版本(如 Ubuntu 24.04 LTS)和特色功能(如 Ubuntu Pro 訂閱服務)。搜索框:支持中文關鍵詞搜索(如 "邊緣計算"),…

form實現pdf文件轉換成jpg文件

說明&#xff1a; 我希望將pdf文件轉換成jpg文件 請去下載并安裝 Ghostscript&#xff0c;gs10050w64.exe 配置環境變量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路徑&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 輸出文件目錄&#xff1a;C:\Users\wan…

Spring 核心技術解析【純干貨版】- XVIII:Spring 網絡模塊 Spring-WebSocket 模塊精講

在現代 Web 開發中&#xff0c;實時通信已成為提升用戶體驗的關鍵技術之一。傳統的 HTTP 輪詢方式存在較高的延遲和帶寬開銷&#xff0c;而 WebSocket 作為一種全雙工通信協議&#xff0c;能夠在客戶端和服務器之間建立持久連接&#xff0c;實現高效的雙向數據傳輸。 Spring 框…

VirtualBox安裝FnOS

1.下載FnOS鏡像 下載網址&#xff1a; https://www.fnnas.com/2.創建虛擬機 虛擬機配置如圖所示&#xff08;注意操作系統類型和網卡配置&#xff09; &#xff08;注意啟動順序&#xff09; 3.啟動虛擬機 網卡類型選擇橋接的Virtual Adapter 如果沒有IP地址或者IP地址無法…

java根據集合中對象的屬性值大小生成排名

1&#xff1a;根據對象屬性降序排列 public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {Linked…

grep命令: 過濾

[rootxxx ~]# grep root /etc/passwd [rootxxx ~]# grep -A 2 root /etc/passwd -A #匹配行后兩行 [rootxxx ~]# grep -B 2 root /etc/passwd -B #匹配行前兩行 [rootxxx ~]# grep -C 2 root /etc/passwd -C #前后2行 [rootxxx ~]# grep -n root /…

二十種中藥果實識別分類系統,Python/resnet18/pytorch

二十種中藥果實識別分類系統,Python/resnet18/pytorch 基于pytorch訓練, resnet18網絡&#xff0c;可用于訓練其他分類問題&#xff0c;也可自己重新訓練 20類中藥材具體包括&#xff1a;(1) 補骨脂&#xff0c;(2) 草豆蔻&#xff0c;(3) 川楝子&#xff0c;(4) 地膚子&…

SpringBoot啟動run方法分析

SpringBoot啟動run方法分析 1.場景引入 在項目啟動的時候&#xff0c;有時候我們需要在啟動的時候&#xff0c;執行一些邏輯。 比如說&#xff0c;項目啟動的時候&#xff0c;我想把一些熱門商品的數據加載到緩存中去&#xff1b; 比如說&#xff0c;自定義了一個netty服務…

Linux信號——信號的處理(3)

信號是什么時候被處理&#xff1f; 進程從內核態&#xff0c;切換到用戶態的時候&#xff0c;信號會被檢測處理。 內核態&#xff1a;操作系統的狀態&#xff0c;權限級別高 用戶態&#xff1a;你自己的狀態 內核態和用戶態 進程地址空間第三次 所謂的系統調用本質其實是一堆…

MySQL篇(四)事務相關知識詳解

MySQL篇(四&#xff09;事務相關知識詳解 MySQL篇(四&#xff09;事務相關知識詳解一、事務的特性&#xff08;ACID&#xff09;原子性&#xff08;Atomicity&#xff09;一致性&#xff08;Consistency&#xff09;隔離性&#xff08;Isolation&#xff09;持久性&#xff08;…

SpringBoot定時任務深度優化指南

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 SpringBoot定時任務深度優化指南 引言 在分布式系統架構中&#xff0c;定時任務是實現業務邏輯自動化的重要組件。SpringBoot通過Scheduled注解提供了便捷的…