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

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 Flaskapp = 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 Flaskapp = 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 Flaskapp = 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 Flaskapp = 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.mzph.cn/news/823457.shtml

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

相关文章

基于springboot 的医院信管系统

开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven…

SpringBoot新增菜品模块开发(事务管理+批量插入+主键回填)

需求分析与设计 一:产品原型 后台系统中可以管理菜品信息,通过 新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传菜品图片。 新增菜品原型: 当填写完表单信息, 点击"保存…

【数据分析】AHP层次分析法

博主总结:根据每个方案x各准则因素权重累加结果 对比来选择目标。数据主观性强 简介 AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能…

【数字人】AIGC技术引领数字人革命:从制作到应用到全景解析

AIGC技术引领虚拟数字人革命:从制作到应用的全景解析 一、AIGC技术为虚拟数字人注入智能灵魂二、AIGC型虚拟人制作流程实例分析1、采集数据2、建模3、内容生成 三、AIGC在虚拟数字人应用中的案例分析四、总结与展望 在科技的浪潮中,AIGC(人工…

Ubuntu:VSCode中编译运行C++代码

版本:Ubuntu22.04.1 LTS 目录 1 安装VSCode并汉化 2 检查Ubuntu是否已经安装了 GCC 3 在VScode中安装C/C扩展 4 在VSCode中进行C/C配置 1 安装VSCode并汉化 安装VSCode(参考之前博客Ubuntu:安装VSCode_ubuntu vscode-CSDN博客&#xff…

Linux sort/uniq/wc

文章目录 1. sort 排序将线程ID从大到小排序 2.uniq 临近去重3.wc word cnt 统计 1. sort 排序 将线程ID从大到小排序 grep -v是反向筛选,利用USER,排除掉首行 awk是打印第1 2列 sort -n是代码以数值大小做排序,不加的话会以字符排序。 -k是…

Gitee和Git学习笔记

Gitee和Git指令 Gitee提交代码方法1 先将仓库clone到本地,修改后再push到 Gitee 的仓库方法2 本地初始化一个仓库,设置远程仓库地址后再做push 切换分支下载代码通过git clone克隆仓库通过下载 ZIP 的方式下载代码 Git提交指令 解决本地库同时关联GitHub…

(C语言入门)复合类型、内存管理

目录 复合类型(自定义类型) 概述: 结构体变量的定义和初始化: 结构体成员的使用: 结构体做函数参数: 结构体值传参: 结构体地址传参: 共用体(联合体)&…

测试人员如何做好工作量评估和风险把控?

今天想聊一聊关于测试工作量评估及需求进度把控的内容。 我个人觉得有时候评估测试工作量其实也挺难的,比如有的需求没有需求文档,只能靠自己对需求的理解去大概评估,有可能评估的工作量比实际需要的工作量会少点,对于每周进行迭…

【Index to Lectures or Courses】

文章目录 1 Speech / Course2 Material3 Basic knowledge and tools4 职位缩写你知道几个? 1 Speech / Course 《中国文化文概论》(武汉大学)【Paper material】【阅读笔记】【Reading Notes】(1)【Reading Notes】(…

Mybatis-plus中的分页操作

Mybatis-plus中的分页操作 1.导入Mybatis-plus依赖2.创建mybatis配置类3.参数 1.导入Mybatis-plus依赖 因为是一个springboot项目&#xff0c;其中的pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns&q…

用于时空交通数据插补的多注意张量完成网络

用于时空交通数据插补的多注意张量完成网络 摘要:道路传感器在物联网(IoT)中的广泛部署可以实现细粒度的数据集成,这是数据驱动应用程序的基本需求。 由于网络通信不稳定、传感器故障等,不可避免地丢失和实质性异常的传感数据是不可避免的。最近的张量补全研究通过精确捕获…

提高 RAG 应用准确度,时下流行的 Reranker 了解一下?

检索增强生成&#xff08;RAG&#xff09;是一种新兴的 AI 技术栈&#xff0c;通过为大型语言模型&#xff08;LLM&#xff09;提供额外的“最新知识”来增强其能力。 基本的 RAG 应用包括四个关键技术组成部分&#xff1a; Embedding 模型&#xff1a;用于将外部文档和用户查询…

DDoS攻击类型与应对措施详解

攻击与防御简介 SYN Flood攻击 原理&#xff1a; SYN Flood攻击利用的是TCP协议的三次握手机制。在正常的TCP连接建立过程中&#xff0c;客户端发送一个SYN&#xff08;同步序列编号&#xff09;报文给服务器&#xff0c;服务器回应一个SYN-ACK&#xff08;同步和确认&#xf…

【HormonyOS4+NEXT】TypeScript基础语法详解

&#x1f64b;‍ 一日之际在于晨 ⭐本期内容&#xff1a;TypeScript基础语法详解 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS4NEXT&#xff1a;探索未来智能生态新纪元 文章目录 前言变量与类型函数类与接口类&#xff08;Class&#xff09;接口&#xff08;Interface&am…

Nginx常用配置,开箱即用

经常遇到Nginx安装和配置的问题。这里笔者将常用配置统统写在下面&#xff0c;方便咱们日常使用。这里本着开箱即用的原则&#xff0c;所以大多数时候不会解释为什么要这样去配置&#xff0c;也不涉及Nginx的安装步骤。下面的所有配置&#xff0c;都可以直接复制后粘贴使用&…

PTA L2-045 堆宝塔 (25 分)

堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小&#xff0c;按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下&#xff1a; 首先准备两根柱子&#xff0c;一根 A 柱串宝塔&#xff0c;一根 B 柱用于临时叠放。把第 1 块彩虹圈…

2024第二十一届五一数学建模A题思路 五一杯建模思路

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

Linux系统的引导过程与服务控制

目录 一、Linux操作系统引导过程 二、Linux系统服务控制 系统初始化进程 三、运行级别切换 *运行级别及切换 Linux系统的运行级别 四、优化开机自动加载服务 五、修复MBR扇区故障 一、Linux操作系统引导过程 主要步骤 开机自检&#xff1a; 检测硬件设备&#…

winform入门篇 第13章 菜单栏

菜单栏 本章内容 菜单栏 工具栏 右键菜单 重点是右键菜单的实现。 菜单栏 MenuStrip&#xff0c;支持可视化编辑 添加 MenuStrip 添加菜单、菜单项、分隔线给菜单项设置属性 —Name 字段名&#xff0c;Text 文本显示,Image:图标 给菜单项添加事件处理(双击即可) 1.添加菜单…