python与flask框架

news2025/5/25 1:32:21

一、理论
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 server


URL的组成部分:
	协议(protocol):指定了资源应该使用的访问方式,常见的协议有http、https、ftp等
	主机名(hostname):资源所在的服务器地址,可以是ip地址或域名。
	端口号(port):服务器上用于访问资源的技术接口。
	路径(path):资源在服务器上的具体位置。
	参数(parameters):提供给服务器的额外信息,通常以键值对的形式出现。
	查询(query):通过?与url的其他部分分隔,用于提供额外的请求信息。
	片段(fragment):通常以#开始,指向资源内部的一个锚点,如网页中的一个特定部分。


	url完整格式 http://www.hostname.com:80/index.html?lang=zh#content
	http是协议,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.coloradmin.cn/o/2385006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从数据到智能:openGauss+openEuler Intelligence的RAG架构实战

随着人工智能和大规模语言模型技术的崛起&#xff0c;传统的搜索引擎由于其只能提供简单的关键字匹配结果&#xff0c;已经越来越无法满足用户对于复杂、多样化和上下文相关的知识检索需求。与此相对&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术…

【Linux】初见,基础指令

前言 本文将讲解Linux中最基础的东西-----指令&#xff0c;带大家了解一下Linux中有哪些基础指令&#xff0c;分别有什么作用。 本文中的指令和选项并不全&#xff0c;只介绍较为常用的 pwd指令 语法&#xff1a;pwd 功能&#xff1a;显示当前所在位置&#xff08;路径&#xf…

什么是实时流数据?核心概念与应用场景解析

在当今数字经济时代&#xff0c;实时流数据正成为企业核心竞争力。金融机构需要实时风控系统在欺诈交易发生的瞬间进行拦截&#xff1b;电商平台需要根据用户实时行为提供个性化推荐&#xff1b;工业物联网需要监控设备状态预防故障。这些场景都要求系统能够“即时感知、即时分…

工业RTOS生态重构:从PLC到“端 - 边 - 云”协同调度

一、引言 在当今数字化浪潮席卷全球的背景下&#xff0c;工业领域正经历着深刻变革。工业自动化作为制造业发展的基石&#xff0c;其技术架构的演进直接关系到生产效率、产品质量以及企业的市场竞争力。传统的PLC&#xff08;可编程逻辑控制器&#xff09;架构虽然在工业控制领…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究

摘要&#xff1a;随着个性化与小众化消费的崛起&#xff0c;消费者消费心理和模式发生巨大变化&#xff0c;社群构建对商家迎合新型消费特点、融入市场经济发展至关重要。开源链动21模式AI智能名片S2B2C商城小程序的出现&#xff0c;为社群构建提供了创新工具。本文探讨该小程序…

高性能RPC框架--Dubbo(五)

Filter&#xff1a; filter过滤器动态拦截请求&#xff08;request&#xff09;或响应&#xff08;response&#xff09;以转换或使用请求或响应中包含的信息。同时对于filter过滤器不仅适合消费端而且还适合服务提供端。我们可以自定义在什么情况下去使用filter过滤器 Activa…

搭建自己的语音对话系统:开源 S2S 流水线深度解析与实战

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

feign调用指定服务ip端口

1 背景 在springcloud开发时候&#xff0c;同时修改了feign接口和调用方的代码&#xff0c;希望直接在某个环境调用修改的代码&#xff0c;而线上的服务又不希望被下线因为需要继续为其他访问页面的用户提供功能后端服务&#xff0c;有时候甚者包含你正在修改的功能。 2 修改…

【深尚想!爱普特APT32F1023H8S6单片机重构智能电机控制新标杆】

在智能家电与健康器械市场爆发的今天&#xff0c;核心驱动技术正成为产品突围的关键。传统电机控制方案面临集成度低、开发周期长、性能瓶颈三大痛点&#xff0c;而爱普特电子带来的APT32F1023H8S6单片机无感三合一方案&#xff0c;正在掀起一场智能电机控制的技术革命。 爆款基…

Unity EventCenter 消息中心的设计与实现

在开发过程中&#xff0c;想要传递信号和数据&#xff0c;就得在不同模块之间实现通信。直接通过单例调用虽然简单&#xff0c;但会导致代码高度耦合&#xff0c;难以维护。消息中心提供了一种松耦合的通信方式&#xff1a;发布者不需要知道谁接收事件&#xff0c;接收者不需要…

MySQL远程连接10060错误:防火墙端口设置指南

问题描述&#xff1a; 如果你通过本机服务器远程连接MySQL&#xff0c;出现10060错误&#xff0c;那可能是你的防火墙的问题 解决&#xff1a; 第一步&#xff1a;查看防火墙规则 通过以下命令查询&#xff0c;看ports是否开放了3306端口&#xff0c;目前只开放了22端口 f…

使用 OpenCV 实现 ArUco 码识别与坐标轴绘制

&#x1f3af; 使用 OpenCV 实现 ArUco 码识别与坐标轴绘制&#xff08;含Python源码&#xff09; Aruco 是一种广泛用于机器人、增强现实&#xff08;AR&#xff09;和相机标定的方形标记系统。本文将带你一步一步使用 Python OpenCV 实现图像中多个 ArUco 码的检测与坐标轴…

canal实现mysql数据同步

目录 1、canal下载 2、mysql同步用户创建和授权 3、canal admin安装和启动 4、canal server安装和启动 5、java 端集成监听canal 同步的mysql数据 6、java tcp同步只是其中一种方式&#xff0c;还可以通过kafka、rabbitmq等方式进行数据同步 1、canal下载 canal实现mysq…

易境通专线散拼系统:全方位支持多种专线物流业务!

在全球化电商快速发展的今天&#xff0c;跨境电商物流已成为电商运营中极为重要的环节。为了确保物流效率、降低运输成本&#xff0c;越来越多的电商卖家选择专线物流服务。专线物流作为五大主要跨境电商物流模式之一&#xff0c;通过固定的运输路线和流程&#xff0c;极大提高…

06 如何定义方法,掌握有参无参,有无返回值,调用数组作为参数的方法,方法的重载

1.调用方法 2.掌握有参函数 3.调用数组作为参数 一个例题&#xff1a;数组参数&#xff0c;返回值 方法的重载 两个例题&#xff1a;冒泡排序和九九乘法表的格式学习

使用vscode MSVC CMake进行C++开发和Debug

使用vscode MSVC CMake进行C开发和Debug 前言软件安装安装插件构建debuug方案一debug方案二其他 前言 一般情况下我都是使用visual studio来进行c开发的&#xff0c;但是由于python用的是vscode&#xff0c;所以二者如果统一的话能稍微提高一点效率。 软件安装 需要安装的软…

提升开发运维效率:原力棱镜游戏公司的 Amazon Q Developer CLI 实践

引言 在当今快速发展的云计算环境中&#xff0c;游戏开发者面临着新的挑战和机遇。为了提升开发效率&#xff0c;需要更智能的工具来辅助工作流程。Amazon Q Developer CLI 作为亚马逊云科技推出的生成式 AI 助手&#xff0c;为开发者提供了一种新的方式来与云服务交互。 Ama…

@Column 注解属性详解

提示&#xff1a;文章旨在说明 Column 注解属性如何在日常开发中使用&#xff0c;数据库类型为 MySql&#xff0c;其他类型数据库可能存在偏差&#xff0c;需要注意。 文章目录 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…

基于 ESP32 与 AWS 全托管服务的 IoT 架构:MQTT + WebSocket 实现设备-云-APP 高效互联

目录 一、总体架构图 二、设备端(ESP32)低功耗设计(适配 AWS IoT) 1.MQTT 设置(ESP32 连接 AWS IoT Core) 2.低功耗策略总结(ESP32) 三、云端架构(基于 AWS Serverless + IoT Core) 1.AWS IoT Core 接入 2.云端 → APP:WebSocket 推送方案 流程: 3.数据存…

unity在urp管线中插入事件

由于在urp下&#xff0c;打包后传统的相机事件有些无法正确执行&#xff0c;这时候我们需要在urp管线中的特定时机进行处理一些事件&#xff0c;需要创建继承ScriptableRenderPass和ScriptableRendererFeature的脚本&#xff0c;示例如下&#xff1a; PluginEventPass&#xf…