使用flask开启一个简单的应用

2023-11-15

Flask是非常流行的 Python Web框架,它能如此流行,原因主要有如下几点:
。有非常齐全的官方文档,上手非常方便。
。有非常好的扩展机制和第三方扩展环境,.工作中常见的软件都会有对应的扩展。自己动手实现扩展也很容易。
。社区活跃度非常高。
。微框架的形式给开发者更大的选择空间。
.Pocoo团队出品,Flask和相关依赖(Jinja2、Werkzeug )的设计很优秀。比如使用装饰器配置路由、用Blueprint实现模块化、请求/应用上下文等。
我们可以从Flask框架入手,之后再学习Django框架

1、开启一个简单的应用

1、安装Flask

pip install Flask

2、开始一个简单的应用,创建一个文件web.py

#--coding:utf-8
from flask import Flask

app = Flask(__name__)

@app.route('/show/index')
def func():
    return "我爱我的祖国"

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

运行web.py
在这里插入图片描述
在浏览器打开,输入http://127.0.0.1:5000/show/index 看到如下效果:
在这里插入图片描述
下面我们来解释下上面几行代码
第1行 ,#–coding:utf-8 :是声明Python源文件编码的语法。该编码信息后续会被Python解析器用于解析源文件。如果没有特殊的原因,应该统一地使用utf-8,而不要使用gb18030,gb2312等类型。
第2行,引入Flask类,Flask类实现了一个wSGI应用。
第4行,app是 Flask的实例,它接收包或者模块的名字作为参数,但-般都是传递__name__。让flask.helpers.get_root_path函数通过传入这个名字确定程序的根目录,以便获得静态文件和模板文件的目录。
第6~8行,使用app.route装饰器会将URL和执行的视图函数的关系保存到app.url_map属性上。处理URL和视图函数的关系的程序就是路由,这里的视图函数就是func。装饰器里面的url就是我们访问的路径。
第11行,执行app.run就可以启动服务了。默认Flask只监听虚拟机的本地127.0.0.1这个地址,端口为5000。如果要修改端口就需要加参数 app.run(host=‘0.0.0.0’,port=8080)。0.0.0.0表示监听所有地址,这样就可以在本机访问了。指定了8080端口后,浏览器要访问 http://127.0.0.1:8080/show/index
注意,默认的app.run的启动方式只适合调试,不要在生产环境中使用,生产环境应该使用Gunicorn或者uwSGI

2、配置管理

项目中的一些全局的配置我们应该存放到一个文件中,app.config支持多种更新配置的方式。假如现在有个config.py的配置文件,其中的内容如下:
A=1
方式一:

app.config.from_object('config')   #通过字符串的模块名字
#或者引用之后直接传入模块对象
import comfig
app.config.from_object(config)

方式二:
通过文件名字加载。直接传入文件名字,但是不限于只使用.py后缀的文件名。

app.config.from_pyfile('config.py', silent=True) #默认当配置文件不存在时会抛出异常,使用silent=True的时候只是返回False,但不会抛出异常

动态url 规则

URL 规则可以添加变量部分,也就是将符合同种规则的URL抽象成一个URL模式,如/item/1/ 、/litem/2/、/item/3.…我们就得这样写:

#--coding:utf-8
from flask import Flask

app = Flask(__name__)

@app.route('/item/<id>/')
def item(id):
    return 'Item:{}'.format(id)

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

运行后:
在这里插入图片描述
在这里插入图片描述
尖括号中的内容是动态的,凡是匹配到/item/前缀的URL都会被映射到这个路由上,在内部把id作为参数而获得。
它使用了特殊的字段标记<variable_name>,默认类型是字符串。如果需要指定参数类型需要标记成converter:variable_name这样的格式,converter有下面几种:

  • string:接受任何没有斜杠“/”的文本(默认)。
  • int:接受整数。
  • float:同 int,但是接受浮点数。
  • path:和默认的相似,但也接受斜杠。
  • uuid:只接受uuid字符串。
  • any:可以指定多种路径,但是需要传入参数。

调试模式

虽然app.run这样的方式适用于启动本地的开发服务器,但是每次修改代码后都要手动重启的话,比较麻烦。如果启用了调试模式,服务器会在代码修改后自动重新载入,并在发生错误时提供一个能获得错误上下文及可执行代码的调试页面
有两种途径来启动调试模式:
1、直接在应用对象上设置:

 app.debug = True
    app.run()

2、作为run的参数传入

 app.run(debug=True)

启动后

F:\myfile\python\code\webproject\venv\Scripts\python.exe F:/myfile/python/code/webproject/web.py
 * Serving Flask app 'web'
 * 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 http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 343-485-244

当程序有异常而进入错误堆栈模式,第一次点击某个堆栈想查看对应变量的值的时候,浏览器会弹出一个要求你输入这个PIN值的输入框。这个时候需要在输人框中输入343-485-244,然后确认,Werkzeug会把这个PIN作为cookie的一部分存起来(失效时间默认是8小时),失效之前不需要重复输入。而这个PIN码攻击者是无法知道的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用flask开启一个简单的应用 的相关文章

  • 将tensorflow 2.0 BatchDataset转换为numpy数组

    我有这个代码 train images test images tf keras datasets mnist load data train dataset tf data Dataset from tensor slices train
  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • 如何从 PyCharm 项目中获取我的“exe”[重复]

    这个问题在这里已经有答案了 通过 PyCharm 在 Python 上编写一些项目 我想从中获取一个exe文件 我尝试过 另存为 gt XXX exe 但是 当我尝试执行它时出现错误 此类操作系统不支持该文件 附注 我有win7 x64 它
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • PIL Image.size 返回相反的宽度/高度

    使用PIL确定图像的宽度和高度 在特定图像上 幸运的是只有这一个 但这很麻烦 从 image size 返回的宽度 高度是相反的 图片 http storage googleapis com cookila 533ebf752b9d1f7c
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • 如何使用Python的super()来更新父值?

    我对继承很陌生 之前所有关于继承和 Python 的 super 函数的讨论都有点超出我的理解 我当前使用以下代码来更新父对象的值 usr bin env python test py class Master object mydata
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • 无法截取宽度为 0 的屏幕截图

    我正在尝试截取 Bootstrap 模态内元素的屏幕截图 经过一番努力 我终于想出了这段代码 driver get https enlinea sunedu gob pe driver find element by xpath div c
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 如何有效地从 loadmat 函数生成的嵌套 numpy 数组中提取值?

    python中是否有更有效的方法从嵌套的python列表中提取数据 例如A array array 12000000 dtype object 我一直在使用A 0 0 0 0 当你有很多像 A 这样的数据时 这似乎不是一个有效的方法 我也用
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • Python组合目录中的所有csv文件并按日期时间排序

    我有 2 年的每日数据分成每月文件 我想将所有这些数据合并到一个按日期和时间排序的文件中 我正在使用的代码组合了所有文件 但不按顺序 我正在使用的代码 import pandas as pd import glob os import cs
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码

随机推荐

  • 正确的认识乱码与编码

    文章目录 编码的本质 乱码的几个例子及思考解决方案 浏览器输入到后端乱码 后端返回浏览器乱码 java 枚举类乱码 数据库存储乱码 Linux系统显示乱码 总结 编码的本质 编码将内存字节作用于磁盘文件或者网络文件的过程 是将磁盘文件 网络
  • 微信小程序图片等比缩放显示正中间

    这是小程序 image标签的mode 对图片的缩放做的处理 缩放 scaleToFill 不保持纵横比缩放图片 使图片的宽高完全拉伸至填满 image 元素 缩放 aspectFit 保持纵横比缩放图片 使图片的长边能完全显示出来 也就是说
  • 基于前馈神经网络(SLFN)的极限学习机-遗传算法相结合

    文章目录 一 极限学习机 1 1 概要 1 2 优点 1 3 不足 1 4 改进 二 前馈神经网络结构 2 1 构成 2 2 变量解释 2 3 求解 三 遗传算法 GA 3 1 概要 3 2 遗传算法流程 3 3 执行过程 一 极限学习机
  • unity实现简单自动寻路

    unity实现简单自动寻路 1 打开unity创建一个简单的场景 如下图 2 除了场景中的两个对象将所创建的地形设置为静态 3 给主角添加Nav mesh Agent 组件 4 烘焙地图 简单来说就是烘焙自动行走的路径 要注意蓝色区域为烘焙
  • web使用js调用摄像头扫码、拍照、录像

    又是好一阵忙碌 终于迎来短暂的闲暇 忙里偷闲写了这篇文章 最近项目中使用到了摄像头扫码 拍照 因为是web项目 不能直接使用java调用摄像头 更不能写个插件让客户去安装 唯一的方法只能使用js去调用摄像头 由此记录下自己的实现 开始准备使
  • 简历制作-技术栈和项目经历如何写?

    1 一 技术栈写法 1 把所有的技术要点全部梳理出来 然后再根据简历去复习 不熟悉或者怕问到的 再做减法 2 不要复制 可以借鉴 结合自己的情况梳理出来属于自己的技术栈 3 分文别类 4 关键字使用 熟练 熟悉 掌握 了解 怎么去写 第一阶
  • ML --Softmax Function (Multiclass Classification) --Andrew Ng ---- Optional Lab

    Optional Lab Softmax Function In this lab we will explore the softmax function This function is used in both Softmax Reg
  • mongodb时间差8小时,原因及解决方案

    只要涉及到mongo的增删改查 他都会默认将时间 8 进行操作 不需要我们在代码中再进行时区设置 或者是为时间增加8小时 具体解析如下 PS 下面时区设置不起作用 该少8小时 还是少8小时 1 传参数 2017 06 28 14 13 28
  • js基础之Promise(全面+手写实现)

    1 是什么 Promise是一种异步编程的解决方案 用于处理异步操作并返回结果 主要作用是解决回调函数嵌套 回调地狱 的问题 使异步操作更加清晰 易于理解和维护 2 怎么用 Promise有三种状态 pending 进行中 fulfille
  • 算法题目:目标移动

    算法题目 目标移动 题目描述 给定一个数组 nums 以及一个整数 target 你需要把数组中等于target的元素移动到数组的最前面 并且其余的元素相对顺序不变 你的所有移动操作都应该在原数组上面操作 示例 1 输入 nums 5 1
  • 基于Prometheus的node_exporter源码编译和二次开发

    首先从GitHub上拉取node exporter源码 go get github com prometheus node exporter 在拉取过程中一般会出错 主要是由于golang官网被墙导致golang的有些工具库拉取不下来 如果
  • 【IntelliJ IDEA】编码设置终极版

    近期 团队多个小伙伴咨询 IntelliJ IDEA 乱码问题 记录一下IDEA常用的4种编码设置 一 IDEA配置文件范围 IDEA的配置有两个范围 如下图 Settings 设置当前工程配置 New Projects Settings
  • Docker安装redis并以配置文件方式启动

    关于docker安装redis 网上有各种教程 大家可自行安装 写这篇文章的目的是关于以配置文件挂载的方式启动失败的总结 一 Docker安装Redis redis版本 Redis 6 2 6 安装过程中所使用的redis版本 请自行确认
  • 标志位寄存器与CF、OF标志位的区分

    8086CPU的flag寄存器 16位 各标志位如下 这是32位EFLAG的低十六位图 但是32位与16位是一样的 只不过32位多了16位且高16位没有使用到 标志位寄存器中保存的是当前指令运算的信息状态 比如进位信息保存在CF标志位 注意
  • 微信小程序调试过程中页面加载不出来

    实习进入公司微信小程序第一个项目在调试过程中发现页面加载不出来 问题显示 module components form box date miniprogram computed js is not defined 百度搜索了一下 看到社区
  • Mongodb数据库初识

    Mongodb数据库初识 一 什么是数据库 1 标准定义 2 数据库的概念 3 数据库的简单理解 4 使用数据库的原因 普通文件系统存储大量数据的问题 数据库的高效性 二 数据库的分类 1 关系型数据库 关系型数据库定义 关系型数据库的软件
  • 1030 完美数列 (25 分)

    题目 题目链接 题解 思维 从小到大排序后 从左开始选取一个数作为 m m m 二分选取右边的数作为 M M M 时间复杂度 O
  • 计算方法——C语言实现——全主元高斯消元法求解非线性方程

    最近在上计算方法这门课 要求是用MATLAB做练习题 但是我觉得C语言也很棒棒啊 题目 高斯消元法是线性方程组的直接解法 可能会造成很大的失真 尤其是高斯顺序消元法 对方法进行改进 使每次都选取绝对值最大的元素为主元 使其为乘数的分母 控制
  • MySQL安装配置教程-win10

    一 下载MySQL Mysql官网下载地址 https downloads mysql com archives installer 选择想要安装的版本进行下载 我这是使用的是5 6 21 二 安装MySQL 选择设置类型 双击运行mysq
  • 使用flask开启一个简单的应用

    Flask是非常流行的 Python Web框架 它能如此流行 原因主要有如下几点 有非常齐全的官方文档 上手非常方便 有非常好的扩展机制和第三方扩展环境 工作中常见的软件都会有对应的扩展 自己动手实现扩展也很容易 社区活跃度非常高 微框架