Flask框架初探-如何在本机发布一个web服务并通过requests访问自己发布的服务-简易入门版

news2024/10/5 18:30:18

Flask框架初探

       在接触到网络框架之前我其实一直对一个事情有疑惑,跨语言的API在需要传参的情况下究竟应该如何调用,之前做过的项目里,我用python做了一个代码使用一个算法得到一个结果之后我应该怎么给到做前端的同学或者同事,之前的解决方案是将自己的python文件打包成一个exe然后运行exe在指定路径文件夹下生成一个txt文件,然后其他人调用执行我的exe然后,再去读我生成的txt文件,但是运行exe文件每次都是从加载库开始运行,巨慢无比,而且还不能传参,但是对于划分责任来说倒是非常明确,在我接触到web应用框架之前,一说到要传参大家都是一脸无奈。接触到web应用框架之后我才发现这应该就是最好的解决方案了,当我运行了一个web应用,然后其他语言只需要向我发起一个请求就可以直接访问我的计算结果,不需要每次都重新加载库,需要用到什么API直接发起服务就可以了,这篇文章就介绍一下GPT4给我推荐的Flask框架。


文章目录

  • Flask框架初探
  • 1.Falsk框架简介
  • 2.Flask框架的安装
  • 3.使用Flask发布一个微型应用-Flask的Hello_world
  • 4.Flask的调试模式
  • 5.设置Flask监听所有地址的访问
  • 6.设置Flask服务端口
  • 7.使用python代码访问本地服务(requests库)
  • 结束

1.Falsk框架简介


Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask使用BSD授权。

在这里插入图片描述

对于入门的我们来说就第一句话有用。Flask是一个使用Python编写的轻量级Web框架,那什么是Web应用框架。

Web应用框架(Web application framework)是一种电脑软件框架,用来支持动态网站、网络应用程序及网络服务的开发。这种框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准模板以及会话管理等,可提升代码的可再用性。

web编程框架有非常多的种类,这里简单看一下不同的语言的web框架有哪些简单了解一下即可。比如js同事常说的vue框架也属于web应用框架的一种。
在这里插入图片描述

2.Flask框架的安装


现在每次在介绍新的框架或者安装库之后,我都要新建一个环境,这样不会导致一个环境各种库杂糅在一起。

首先新建一个环境python版本选择稳定版本中最新的3.10(写该文章的时候)

conda create --name flask python=3.10

查看最python稳定版本:https://www.python.org/downloads/
在这里插入图片描述

启动虚拟环境

conda activate flask

使用pip命令安装flask

pip install Flask

其他系统见官方文档的官方指南

https://flask.palletsprojects.com/en/3.0.x/installation/#install-flask
在这里插入图片描述

3.使用Flask发布一个微型应用-Flask的Hello_world


接下来给一个简单的例程,本文的例程为官方文章的QuickStart部分进行易于理解的改编,官方文档QuickStart网址

https://flask.palletsprojects.com/en/3.0.x/quickstart/

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"

if __name__ == "__main__":
    app.run(debug=False)

记下来结合官方文档和自己的在实际使用种的经验对每一句进行解释

  • from flask import Flask导入Flask类,这个类之后会帮我们构建自己的WSGI应用。

    Web服务器网关接口Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。(维基百科)

  • app = Flask(__name__)实例化一个app应用,按照官方解释__name__用于让Flask框架知道去哪里寻找一些资源,例如templates模板和static files. 一般情况记住就可以固定写法。

  • @app.route("/")使用route()装饰器来告诉Flask框架哪个URL会用来触发我们的function(功能API)。"/"表示通过默认URL路径访问之后会有例子介绍。

    统一资源定位符(英语:Uniform Resource Locator,缩写:URL,或称统一资源定位器定位地址URL地址[1])俗称网页地址,简称网址,是因特网上标准的资源的地址(Address),如同在网络上的门牌。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址,现在它已经被万维网联盟编制为因特网标准RFC 1738

  • def hello_world()要触发的功能函数,该示例中返回一个HelloWorld字符串

  • if __name__ == "__main__":判断当前脚本是不是被直接运行

  • app.run(debug=False)运行应用,关闭调试模式。

运行结果:
在这里插入图片描述
运行之后打印出了一个网页地址也就是URLhttp://127.0.0.1:5000(等效http://localhost:5000)其中http://为协议名词127.0.0.1为默认的本机IP地址(localhost默认地址),5000为端口号,将该网址输入浏览器,即可看到hello_world函数的运行结果,
在这里插入图片描述

每次访问之后都会在控制台看到一个访问的提示信息显示访问的IP地址和请求类型等等。
在这里插入图片描述

4.Flask的调试模式


什么是调试模式,一般而言如果我们在运行一个程序,在他运行的过程中如果调整代码,需要先关闭这个运行的程序,然后再运行,改动的代码才能生效,但是如果在项目中直接关掉服务可能会导致其他程序的工作混乱,因此需要一个在运行过程中不重启代码也能让改动生效的机制,在Flask框架中,在启动应用前设置app.run(debug=False)中的debugTure就可以开启调试模型

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello World!"

if __name__ == '__main__':
    app.run(debug=True)

在这里插入图片描述
接下来更改一下hello_world函数的返回内容,变成"Hello Hello!",改完之后会自动触发重加载,不需要重新运行程序。
在这里插入图片描述
再次使用浏览器访问URL网页内容显示已经改变为Hello!Hello!
在这里插入图片描述

5.设置Flask监听所有地址的访问


       在前面的例子中,我们只能接收来自本机的访问,因为在app.run()中有一个host参数用来设置监听的地址,默认情况下host=127.0.0.1只监听本机的访问请求,如果想监听同一网络环境下的所有设备则需将host设置成0.0.0.0只有这样才可以监听所有的网络设备的请求。即app.run(debug=True, host='0.0.0.0')改变app.run()中的设置时即使在debug模式下也需要重启代码才能运行

示例代码如下:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello Hello!"

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

       运行结果如下,可以看到监听地址多了一个通过本机访问的URL
在这里插入图片描述
在这里插入图片描述

6.设置Flask服务端口


       在允许了所有设备的访问之后,接下来需要设置服务所在端口,因为最后我们将代码部署在服务器上的时候,由于一个服务器上会同时又很多个服务,每个服务都需要一个端口,所以根据协调之后的结果我们需要按照约定修改我们的端口号。端口号设置在app.run()中的port(默认5000)参数.接下来将端口设置为9000代码如下。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello Hello!"

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=9000)

       运行结果如下,可以看见访问我们发布服务的本机的端口号已经变为9000

在这里插入图片描述

7.使用python代码访问本地服务(requests库)


       目前的访问方式都是通过网络浏览器来访问,接下来要使用代码来访问我们启动的网络服务中返回的结果。这里用到python的requests库来在代码中发送HTTP请求。这个库也是爬虫中经常用到的库。

pip install requests

       接下来用requests来访问一下上一部分发布的服务打印出访问服务得到的返回信息

import requests

# 发送GET请求
response = requests.get('http://127.0.0.1:9000')
print(response.text)  # 打印响应的文本内容s

在这里插入图片描述

结束


       其实本来打算把,传参,post格式,还有流式输出也写上,然后流式输出写上但是可能内容就有点多了,标题还说的简易入门,到时候是看看补在这个文章下面还是分开写。然后我本来想基于官方文档写,但是官方文档主要是面向Linux多一些,不是很容易理解,同学们去看官方文档的时候不太舒服的话也很正常,需要什么功能搜什么功能就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602676.html

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

相关文章

2024腾讯一道笔试题--大小写字母移动

题目🍗 有一个字符数组,其中只有大写字母和小写字母,将小写字母移到前面, 大写字符移到后面,保持小写字母本身的顺序不变,大写字母本身的顺序不变, 注意,不要分配新的数组.(如:wCelOlME,变为wellCOME). 思路分析🍗 类似于冒泡排序,两两比较…

JavaSE中的String类

1.定义方式 常见的三种字符串构造 public class Test1 {public static void main(String[] args) {// 使用常量串构造String str1 "abc";System.out.println(str1);// 直接newString对象String str2 new String("ABC");System.out.println(str2);// 使用…

ssm056基于Java语言校园快递代取系统的设计与实现+jsp

校园快递代取系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本校园快递代取系统就是在这样的大环境下诞生,其可以帮助管理者在短…

node基础 第二篇

01 ffmpeg开源跨平台多媒体处理工具,处理音视频,剪辑,合并,转码等 FFmpeg 的主要功能和特性:1.格式转换:FFmpeg 可以将一个媒体文件从一种格式转换为另一种格式,支持几乎所有常见的音频和视频格式,包括 MP…

工业控制(ICS)---OMRON

OMRON FINS 欧姆龙厂商 命令代码(Command CODE)特别多,主要关注读写相关,如: Memory Area Read (0x0101) Memory Area Write (0x0102) Multiple Memory Area Read (0x0104) Memory Area Transfer (0x0105) Parameter Area Read (0x0201) Pa…

ARM_day8:温湿度数据采集应用

1、IIC通信过程 主机发送起始信号、主机发送8位(7位从机地址1位传送方向(0W,1R))、从机应答、发数据、应答、数据传输完,主机发送停止信号 2、起始信号和终止信号 SCL时钟线,SDA数据线 SCL高电平,SDA由高到低——起始信号 SC…

Linux时间同步练习

题目如下: 一.配置server主机要求如下: 1.server主机的主机名称为 ntp_server.example.com 2.server主机的IP为: 172.25.254.100 3.server主机的时间为1984-11-11 11:11:11 4.配置server主机的时间同步服务要求可以被所…

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践

1.背景 1.1 现状 目前转转业财系统接收了上游各个业务系统(例如:订单、oms、支付、售后等系统)的数据,并将其转换为财务数据,最终输出财务相关报表和指标数据,帮助公司有效地进行财务管理和决策。 转转业…

Matlab|基于改进遗传算法的配电网故障定位

目录 1 主要内容 2 部分代码 3 部分程序结果 4 下载链接 1 主要内容 该程序复现文章《基于改进遗传算法的配电网故障定位》,将改进的遗传算法应用于配电网故障定位中, 并引入分级处理思想, 利用配电网呈辐射状的特点, 首先把整个配电网划分为主干支路和若干独立…

Pr2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Premiere简称“Pr”,是一款超强大的视频编辑软件,它可以提升您的创作能力和创作自由度,它是易学、高效、精确的视频剪辑软件,提供了采集、剪辑、调色、美化音频、字幕添加、输出、D…

minio如何配置防盗链

MinIO 是一个开源的对象存储服务器,用于存储大量的数据,同时提供了丰富的功能和 API。配置防盗链可以帮助你控制谁可以访问存储在 MinIO 上的对象。以下是在 MinIO 中配置防盗链的一般步骤: 编辑 config.json 文件: 找到 MinIO 服…

【Godot4自学手册】第三十七节钥匙控制开门

有些日子没有更新了,实在是琐事缠身啊,今天继续开始自学Godot4,继续完善地宫相关功能,在地宫中安装第二道门,只有主人公拿到钥匙才能开启这扇门,所以我们在合适位置放置一个宝箱,主人公开启宝箱…

vue+element作用域插槽

作用域插槽的样式由父组件决定&#xff0c;内容却由子组件控制。 在el-table使用作用域插槽 <el-table><el-table-column slot-scope" { row, column, $index }"></el-table-column> </el-table>在el-tree使用作用域插槽 <el-tree>…

【Java开发指南 | 第十一篇】Java运算符

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 算术运算符关系运算符位运算符逻辑运算符赋值运算符条件运算符&#xff08;?:&#xff09;instanceof 运算符Java运算符优先级 Java运算符包括&#xff1a;算术运算符、关系运算符、位运算符、逻辑运算符、赋值…

C语言入门案例-学生管理系统

要求&#xff1a;学员管理系统可以实现对学员的添加、全部显示、查询、修改、删除功能 完整代码示例&#xff1a; #include <stdio.h> // 定义容量 #define NUM 100//自定义结构体 typedef struct st {char name[30];int age;char sex[10]; }STU;//传入四个初始数据 STU…

PyTorch深度学习入门-2

PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】_哔哩哔哩_bilibili 一、神经网络的基本骨架 --nn.Module Neutral network torch.nn — PyTorch 2.2 documentation * import torch from torch import nnclass xiaofan(nn.Module):…

1997-2022年各省技术市场发展水平数据(原始数据+计算过程+计算结果)

1997-2022年各省技术市场发展水平数据&#xff08;原始数据计算过程计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;国家统计局、统计年鉴 3、范围&#xff1a;30省 4、指标&#xff1a;技术市场成交额、国内生产总值、技术市场发展水平 5、计算…

Git回滚版本并push到远端master

1、查看日志 git log 2、还原最近的版本 () --git reset --hard commit-id 如&#xff1a;git reset --hard d84da14bf2743683eca7a015f56114faaa344f42 3、覆盖分支版本 git push -f origin dev 回滚本地master完成后&#xff0c;将回滚后的代码push到远端master&#xf…

VIT论文阅读

论文地址&#xff1a;https://arxiv.org/pdf/2010.11929.pdf VIT论文阅读 摘要INTRODUCTION结论RELATEDWORKMETHOD1.VISIONTRANSFORMER(VIT)整体流程消融实验HEAD TYPE AND CLASSTOKENpoisitional embedding 整体过程公式Inductive biasHybrid Architecture 2.FINE-TUNINGANDH…

Nginx第1篇-安装和简单配置

Nginx可以做什么 可以做静态HTTP服务器做负载均衡做正向代理做反向代理 正向代理和反向代理 正向代理&#xff1a; 是一个位于客户端和目标服务器之间的服务器(代理服务器)&#xff0c;为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求并指定目标&…