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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…