python與flask框架

一、理論
Flask是一個輕量級的web框架,靈活易用。提供構建web應用所需的核心工具。

Flask依賴python的兩個庫
?? ?Werkzeug:flask的底層庫,提供了WSGI接口、HTTP請求和響應處理、路由等核心功能。
?? ?Jinja2:模板引擎,用于動態生成HTML頁面。
二、實踐
?

1、第一個flask應用
[root@localhost ~]# pip config set global.index-url http://mirrors.aliyun.com/pypi/simple
Writing to /root/.config/pip/pip.conf
[root@localhost ~]# pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple
Writing to /root/.config/pip/pip.conf
[root@localhost ~]# pip3 config set install.trusted-host mirrors.aliyun.com
Writing to /root/.config/pip/pip.conf
[root@localhost ~]# pip3 install --upgrade pip[root@localhost ~]# pip install flask[root@localhost ~]# vim a.py
from flask import Flask# 創建Flask應用實例
app=Flask(__name__)# 定義路由和視圖函數
@app.route('/')  # 用戶的訪問url為根時,flask會調用hello_world()函數。
def hello_world():return 'Hello,World!'# 啟動應用
if __name__ == '__main__':  # 該行用于確認當前腳本是否是通過命令行直接運行的,而不是作為其他模塊或程序的一部分被導入的。app.run(host='0.0.0.0',port='5000',debug=True)    # 啟動flask開發服務器,debug=true表示啟用調試模式,可在開發過程中自動重載應用,并在發生錯誤時顯示詳細信息。 host指定監聽的地址,這里監聽本機所有可用的地址,port指定監聽的端口。[root@localhost ~]# python3 a.py  # 運行該服務。* Serving Flask app 'a'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 112-870-242[root@localhost ~]# firewall-cmd --add-port=5000/tcp # 開放端口
success [root@localhost ~]# curl 192.168.10.101:5000
Hello,World![root@localhost ~]# # 這里會這樣顯示是因為return的末尾未加\n(換行),所以導致這樣顯示。(命令行中輸入完命令在末尾默認會加上換行,所以不會出現這種情況。)修改代碼from flask import Flask# 創建Flask應用實例
app=Flask(__name__)# 定義路由和視圖函數
@app.route('/')
def hello_world():return 'Hello,World!\n'  # 加上換行符即可。# 啟動應用
if __name__ == '__main__':app.run(host='0.0.0.0',port='5000',debug=True)[root@localhost ~]# curl 192.168.10.101:5000
Hello,World!
[root@localhost ~]# c^C[root@localhost ~]# vim a.py 
[root@localhost ~]# python3 a.py* Serving Flask app 'a'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 112-870-242
192.168.10.101 - - [21/Apr/2025 09:08:50] "GET / HTTP/1.1" 200 -
192.168.10.101 - - [21/Apr/2025 09:08:53] "GET / HTTP/1.1" 200 -2、flask路由與視圖函數
flask通過裝飾器@app.route()來定義路由,而視圖函數則負責處理用戶的請求并返回響應。[root@localhost ~]# vim a.py
from flask import Flask# 創建Flask應用實例
app=Flask(__name__)# 定義路由和視圖函數
@app.route('/')
def hello_world():return 'Hello,World!\n'@app.route('/greet/<name>')  # 這里定義了路徑ip/greet/<name> 如果輸入1,參數1會傳遞到下面的return中,會顯示hello,1.
def greet(name):return f'Hello,{name}!\n'  # f是用于字符串格式化,將輸出結果顯示為字符串。# 啟動應用
if __name__ == '__main__':app.run(host='0.0.0.0',port='5000',debug=True)[root@localhost ~]# python3 a.py* Serving Flask app 'a'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 112-870-242
192.168.10.101 - - [21/Apr/2025 09:14:38] "GET /greet/1 HTTP/1.1" 200 -[root@localhost ~]# curl 192.168.10.101:5000/greet/1
Hello,1!注意,這里只能這樣寫,寫為192.168.10.101/greet/1:5000會失敗,它會去找80端口。因為url的格式就是這樣,平時訪問網頁,就是ip:port只不過port被隱藏了(因為是80,443常用端口,不需要寫)。[root@localhost ~]# curl 192.168.10.101/greet/1:5000
curl: (7) Failed to connect to 192.168.10.101 port 80 after 0 ms: Couldn't connect to serverURL的組成部分:協議(protocol):指定了資源應該使用的訪問方式,常見的協議有http、https、ftp等主機名(hostname):資源所在的服務器地址,可以是ip地址或域名。端口號(port):服務器上用于訪問資源的技術接口。路徑(path):資源在服務器上的具體位置。參數(parameters):提供給服務器的額外信息,通常以鍵值對的形式出現。查詢(query):通過?與url的其他部分分隔,用于提供額外的請求信息。片段(fragment):通常以#開始,指向資源內部的一個錨點,如網頁中的一個特定部分。url完整格式 http://www.hostname.com:80/index.html?lang=zh#contenthttp是協議,www.hostname.com是主機名,80是端口,/index.html是路徑,lang=zh是查詢參數,content是片段標識符。3、指定允許的請求方法。
[root@localhost ~]# vim a.py 
from flask import Flask# 創建Flask應用實例
app=Flask(__name__)# 定義路由和視圖函數
@app.route('/')
def hello_world():return 'Hello,World!\n'@app.route('/greet/<name>')
def greet(name):return f'Hello,{name}!\n'@app.route('/submit',methods=['POST'])	
def submit():return 'Form submitted successfully!\n'  # Form是html里定義請求方式時用到的關鍵字。# 啟動應用
if __name__ == '__main__':app.run(host='0.0.0.0',port='5000',debug=True) [root@localhost ~]# python3 a.py * Serving Flask app 'a'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 112-870-242[root@localhost ~]# curl 192.168.10.101:5000/submit
<!doctype html>
<html lang=en>
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>
[root@localhost ~]# curl -XPOST 192.168.10.101:5000/submit
Form submitted successfully!4、使用jinja2模板渲染html[root@localhost ~]# mkdir templates
[root@localhost ~]# ls
anaconda-ks.cfg  a.py  templates  # 模板文件與主程序(a.py必須在同一級目錄下,否則會找不到,名稱也必須叫templates,否則也會找不到。)
[root@localhost ~]# cd templates/
[root@localhost templates]# vim greet.html
<html lang="en">
<head><meta charset="UTF-8"><title>Flask Example</title>
</head>
<body><h1>Hello,{{ name }}!<h1>  #  {{ }}  這種格式是jinja2模板格式。name同樣是參數傳遞,ip/greet/name中的name會傳遞到這里。
</body>
</html>[root@localhost ~]# vim a.py 
from flask import Flask
from flask import render_template# 創建Flask應用實例
app=Flask(__name__)# 定義路由和視圖函數
@app.route('/')
def hello_world():return 'Hello,World!\n'@app.route('/submit',methods=['POST'])
def submit():return 'Form submitted successfully!\n'@app.route('/greet/<name>')
def greet(name):return render_template('greet.html',name=name)# 啟動應用
if __name__ == '__main__':[root@localhost ~]# python3 a.py* Serving Flask app 'a'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 112-870-242[root@localhost ~]# curl 192.168.10.101:5000/greet/aaa
<html lang="en">
<head>	<meta charset="UTF-8"><title>Flask Example</title>
</head>
<body><h1>Hello,aaa!<h1>
</body>4、模板繼承與塊[root@localhost ~]# ls
anaconda-ks.cfg  a.py  templates
[root@localhost ~]# cat a.py
from flask import Flask
from flask import render_template# 創建Flask應用實例
app=Flask(__name__)# 定義路由和視圖函數
@app.route('/')
def hello_world():return 'Hello,World!\n'@app.route('/submit',methods=['POST'])
def submit():return 'Form submitted successfully!\n'@app.route('/index')
def index():return render_template('index.html')# 啟動應用
if __name__ == '__main__':app.run(host='0.0.0.0',port='5000',debug=True)[root@localhost ~]# cd templates/
[root@localhost templates]# ls
base.html  greet.html  index.html
[root@localhost templates]# cat base.html 
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}My Website{% endblock %}</title>  # 定義塊開始與結束位置,并定義其中的內容。子模板引用父模板就是通過塊來引用的。
</head>
<body><header><h1>Welcome to My Website</h1></header><div>  # div是html里的塊級元素,屬于容器,可包含標題、段落、表格等等。{% block content %}{% endblock %}  # 定義塊開始與結束,content是內容。</div><footer><p>&copy; 2025 My Website</p>   # 頁腳處的信息。</footer>
</body>
</html>
[root@localhost templates]# cat index.html 
{% extends 'base.html' %}{% block title %}Home{% endblock %}  # 網站標簽處的顯示信息。例如百度的,百度一下,你就知道。{% block content %}<h2> Welcome to the homepage !</h2>### 
{% extends 'base.html' %} 子模版繼承了base.html模板。
{% block title %}Home {% endblock %} 覆蓋父模板中的title塊。
{% block content %} 定義頁面的主要內容區域。[root@localhost ~]# python3 a.py* Serving Flask app 'a'* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:5000* Running on http://192.168.10.101:5000
Press CTRL+C to quit* Restarting with stat* Debugger is active!* Debugger PIN: 112-870-242[root@localhost ~]# curl 192.168.10.101:5000/index
<html lang="en">
<head><meta charset="UTF-8"><title>Home</title>
</head>
<body><header><h1>Welcome to My Website</h1></header><div><h2> Welcome to the homepage !</h2></div><footer><p>&copy; 2025 My Website</p></footer>
</body>

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

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

相關文章

esp32-idf框架學習筆記/教程

esp32型號: 環境搭建 安裝:就按這個來,別的試了好多次都不行,這個一次成功!!!! vscode下ESP32開發環境配置&#xff08;100%成功&#xff09;_嗶哩嗶哩_bilibili esp芯片的兩種模式: ESP32 固件燒錄教程_嗶哩嗶哩_bilibili 1.運行模式 2.下載模式 esp32s3程序下載 1.數據…

VKontakte(VK)注冊教程

VKontakte&#xff08;簡稱VK&#xff09;是俄羅斯最大的社交網絡平臺&#xff0c;類似于Facebook&#xff0c;用戶可以通過它進行社交、分享圖片、視頻、音樂等內容&#xff0c;并參與各類社群討論&#xff0c;是與俄羅斯及其他東歐地區的朋友建立聯系的便捷平臺。對于做俄羅斯…

STM32+ESP8266+ONENET+微信小程序上傳數據下發指令避坑指南

之前只做過類似的但是以為這種爛大街的功能應該不難結果還是踩了不少坑&#xff0c;記錄幾個需要注意的點 首先貼一個非常有用的視頻&#xff0c;里面講的很詳細&#xff0c;給的資料也很全【【新版OneNet云平臺】STM32ESP8266上傳數據&#xff0c;簡單易上手&#xff01;】 h…

【知識點】關于vue3中markRow、shallowRef、shallowReactive的了解

首先我們先了解一下這三個函數的定義以及區別 markRow 定義&#xff1a; 一個用于標記對象為非響應式的工具函數 shallowRef 定義&#xff1a; 一個用于創建淺層響應式引用的函數&#xff0c;只對 .value 本身進行響應式處理&#xff0c;不會遞歸地將 .value 指向的對象或…

后端開發實習生-抖音生活服務

職位描述 ByteIntern&#xff1a;面向2026屆畢業生&#xff08;2025年9月-2026年8月期間畢業&#xff09;&#xff0c;為符合崗位要求的同學提供轉正機會。 團隊介紹&#xff1a;生活服務業務依托于抖音、抖音極速版等平臺&#xff0c;致力于促進用戶與本地服務的連接。過去一…

OceanBase 共享存儲:云原生數據庫的存儲

目錄 探會——第三屆 OceanBase 開發者大會 重磅發布&#xff1a;OceanBase 4.3 開發者生態全面升級 實戰演講&#xff1a;用戶案例與行業落地 OceanBase 共享存儲架構解析 什么是共享存儲架構&#xff1f; 云原生數據庫的架構 性能、彈性與多云的統一 為何OceanBase能…

C++ 結構體封裝模式與 Promise 鏈式調用:設計思想的異曲同工

C 結構體封裝模式與 Promise 鏈式調用&#xff1a;設計思想的異曲同工 在軟件開發中&#xff0c;我們常常追求代碼的可維護性、可擴展性和可讀性。不同的編程語言和場景下&#xff0c;雖然實現方式各異&#xff0c;但背后的設計思想往往存在著奇妙的相似性。本文將探討 C 中結…

【Go】1、Go語言基礎

前言 本系列文章參考自稀土掘金上的 【字節內部課】公開課&#xff0c;做自我學習總結整理。 Go語言的特點 Go語言由Google團隊設計&#xff0c;以簡潔、高效、并發友好為核心目標。 具有以下優點&#xff1a; 語法簡單、學習曲線平緩&#xff1a;語法關鍵字很少&#xff0c;且…

AI時代的新營銷范式:生成式引擎優化(GEO)的崛起——品牌如何被大模型收錄

在數字化浪潮席卷全球的今天&#xff0c;我們正站在一個前所未有的歷史拐點。如果說過去二十年&#xff0c;搜索引擎優化&#xff08;SEO&#xff09;重塑了企業與消費者的連接方式&#xff0c;那么未來二十年&#xff0c;生成式引擎優化&#xff08;GEO&#xff09;將徹底顛覆…

實用藍牙耳機哪款好?先做好使用場景分析!

市面上的藍牙耳機款式繁多&#xff0c;618到來之際&#xff0c;消費者如何選擇適合自己的藍牙耳機&#xff1f;實用藍牙耳機哪款好&#xff1f;關鍵在于做好使用場景分析&#xff01;今天&#xff0c;就帶大家結合不同的使用場景&#xff0c;分享三款倍思音頻的精品藍牙耳機。 …

PTA刷題筆記3(微難,有詳解)

7-15 計算圓周率 代碼如下&#xff1a; #include <stdio.h>int main() {double threshold;scanf("%lf", &threshold);double pi_over_2 1.0; // π/2的初始值&#xff08;第一項1&#xff09;double term 1.0; // 當前項的值int n 1; …

基于SpringBoot+Vue的社區醫院信息平臺設計與實現

項目背景與概述 隨著醫療健康信息化的發展&#xff0c;社區醫院的管理逐漸由傳統的手工模式轉向信息化管理。為了提高醫院的管理效率、減少人工操作、提升服務質量&#xff0c;開發一個高效且實用的社區醫院信息平臺顯得尤為重要。本系統基于Spring Boot框架與MySQL數據庫設計…

舊物回收小程序:讓閑置煥發光彩,為生活增添價值

你是否常常為家中堆積如山的閑置物品而煩惱&#xff1f;那些曾經心愛的物品&#xff0c;如今卻成了占據空間的“雞肋”&#xff0c;丟棄可惜&#xff0c;留著又無處安放。別擔心&#xff0c;一款舊物二手回收小程序將為你解決這一難題&#xff0c;讓閑置物品重新煥發光彩&#…

掩碼與網關是什么?

1. 子網掩碼&#xff08;Subnet Mask&#xff09; 作用&#xff1a;劃分“小區”范圍 想象你住在一個小區&#xff08;子網&#xff09;里&#xff1a; 小區門牌號 IP地址&#xff08;如 192.168.1.10&#xff09; 小區邊界 子網掩碼&#xff08;如 255.255.255.0&#xf…

【Bluedroid】藍牙HID Host disconnect流程源碼解析

本文基于 Android 藍牙 HID&#xff08;Human Interface Device&#xff09;Host 模塊的源碼&#xff0c;深入解析 HID 設備斷開連接的完整流程。重點覆蓋從應用層觸發斷開請求&#xff0c;到 BTIF 層&#xff08;接口適配層&#xff09;狀態校驗與異步傳遞、BTA 層&#xff08…

python定時刪除指定索引

腳本 import logging from datetime import datetime, timedelta from elasticsearch import Elasticsearch# 配置日志記錄 logging.basicConfig(filenamedelete_uat_indices.log,levellogging.INFO,format%(asctime)s - %(levelname)s - %(message)s )# Elasticsearch 集群的…

GESP編程等級認證C++三級7-字符、字符數組與字符串2

2.3 用字符串定義字符數組的好處 使用字符串定義字符數組需要額外考慮其末尾的“\0”&#xff0c;為什么還要使用這種看上去“麻煩”的方法呢&#xff1f;從圖5所示的代碼就能看出原因。 圖5 用字符串定義字符數組好處的代碼 從圖5中可以看出&#xff0c;a4是用字符串進行初始…

EasyRTC音視頻實時通話WebP2P技術賦能的全場景實時通信解決方案

一、技術背景 在數字化浪潮席卷全球的當下&#xff0c;實時通信技術憑借其即時性、高效性的優勢&#xff0c;已然成為推動各行業創新發展的核心動能。EasyRTC深度融合WebP2P技術&#xff0c;構建起去中心化的通信架構&#xff0c;實現了低延遲、高可靠的數據傳輸&#xff0c;為…

Claude MCP協議從入門到精通

目錄 一、什么是MCP協議? 二、Function Calling 和 MCP 協議的區別? 三、MCP相關網站 3.1 官方文檔 3.2 綜合型 MCP 資源聚合平臺 3.3 垂直領域 MCP Server 工具 3.4 開發者工具與社區 3.5 企業級服務與數據庫集成 3.6 新手友好型平臺 四、MCP 架構 4.1. MCP Hosts…

YOLOv11改進 | Conv/卷積篇 | 2024 ECCV最新大感受野的小波卷積WTConv助力YOLOv11有效漲點

YOLOv11改進 | Conv/卷積篇 | 2024 ECCV最新大感受野的小波卷積WTConv助力YOLOv11有效漲點 引言 在計算機視覺領域&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;的核心操作——卷積運算正經歷著革命性的變革。2024年ECCV會議提出的**小波卷積&#xff08;WTConv, Wav…