Flask框架的入门使用

news2024/11/17 9:26:20

Flask框架的入门使用

  • Flask框架
    • Flask概述
    • 常用扩展包
  • Flask的基本使用
    • 环境准备
    • 创建helloworld.py文件
    • 启动运行
    • 访问
  • 参数配置
    • Flask对象配置
    • 应用程序配置
      • 读取配置信息
      • 加载配置信息
      • 配置对象与环境变量结合
    • app.run参数
  • 开发服务器启动方式
    • 在命令行中运行
    • Python程序中手动启动
    • Pycharm启动

Flask框架

在这里插入图片描述

Flask概述

Flask是一个使用 Python编写的轻量级Web应用程序开发框架。Flask是基于Werkzeug WSGI工具包和Jinja2模板引擎。

WSGI

Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。

Werkzeug

它是一个WSGI工具包,它实现了请求,响应对象和实用函数。 这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一。

jinja2

jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。

Django与Flask的区别:

Django是一个重量级的框架,为业务开发,提供了丰富的工具、组件

Flask是一个轻量级的框架,只提供Web框架的核心功能,自由、灵活、高度定制

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用NoSQL。

Flask文档

中文文档:https://dormousehole.readthedocs.io/en/latest/

英文文档:https://flask.palletsprojects.com/en/2.2.x/

常用扩展包

扩展列表:http://flask.pocoo.org/extensions/

Flask-SQLalchemy:操作数据库
Flask-script:插入脚本
Flask-migrate:管理迁移数据库
Flask-Session:Session存储方式指定
Flask-WTF:表单
Flask-Mail:邮件
Flask-Bable:提供国际化和本地化支持,翻译
Flask-Login:认证用户状态
Flask-OpenID:认证
Flask-RESTful:开发REST API的工具
Flask-Bootstrap:集成前端Twitter Bootstrap框架
Flask-Moment:本地化日期和时间
Flask-Admin:简单而可扩展的管理接口的框架

Flask的基本使用

环境准备

1.创建虚拟环境

创建虚拟环境,进行不同项目的环境隔离。其拥有独立的python解释器和对应的依赖文件的环境,独立于真实环境

mkvirtualenv flask -p python3

2.安装Flask

pip install Flask

创建helloworld.py文件

# 导入Flask类
from flask import Flask

# Flask类接收一个参数__name__
app = Flask(__name__)


# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
    return 'Hello World'


# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
    app.run()

启动运行

1.命令手动运行

python helloworld.py

2.pycharm 运行

在这里插入图片描述

访问

访问:http://127.0.0.1:5000
在这里插入图片描述

参数配置

Flask对象配置

Flask可以通过传递不同的参数来初始化创建(app = Flask(__name__))程序实例,其默认传入当前模块的名称(__name__ 是一个特殊变量,表示当前 Python 模块的名称)作为参数,另外还可以指定参数配置,这些参数是设置Flask本身的属性。

常用参数:

import_name:用于确定Flask程序所在的包(模块)的名称和位置,使用__name__为默认值,一般不用修改。其可以决定Flask在访问静态文件时查找的路径

static_url_path:静态文件的URL前缀,默认为 '/static'

static_folder:存放静态文件(图片、CSS等)的目录,默认为应用程序根目录下的 'static' 目录

template_folder:存放模板文件(HTML文件)的目录,默认为应用程序根目录下的 'templates' 目录

1.默认参数

 app = Flask(__name__)

其相应的文件目录结构如下:

在这里插入图片描述
访问127.0.0.1:5000/static/test.png即可访问到图片

2.修改参数

app = Flask(__name__, static_url_path='/static_path/', static_folder='new_static')

相应的文件目录结构如下:
在这里插入图片描述
访问127.0.0.1:5000/static_path/test.png即可访问到图片

应用程序配置

应用程序配置参数设置的是一个Web应用工程的相关信息,是集中管理项目的所有配置信息。比如配置:数据库的连接信息、日志的配置信息、自定义的配置信息

Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作

读取配置信息

在Flask中,可以使用config对象来为应用程序配置参数。常用的方法是使用一个Python文件来保存应用程序的配置信息,并从该文件中读取配置信息。

读取方式:

app.config.get(name)

app.config[name]

加载配置信息

1.从配置对象中加载

适用于⼀般存储业务相关的配置信息,如数据库配置、连接信息、各种初始化的配置信息等

使用方式:app.config.from_object(配置对象)

# 导入Flask类
from flask import Flask

# Flask类接收一个参数__name__
app = Flask(__name__)


# 配置对象
class MyConfig(object):
    """配置列表"""
    KEY = 'Y7W7qg5CD9s5UmgKe5UdiY1bhdxbvkaq'


# 从配置对象中加载配置信息
app.config.from_object(MyConfig)


# 装饰器的作用是将路由映射到视图函数index
@app.route("/")
def index():
    key = app.config['KEY']
    print(key)
    return key


# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
    app.run()

2.从配置文件中加载

通常情况下,将一些应用程序需要的参数定义到一个 Python 文件中,并通过 Flask 的 config 对象进行加载

使用方式:app.config.from_pyfile('配置文件名')

1.创建并编写配置文件:

将应用程序可能需要的一些参数定义在一个Python文件中,例如将其命名为config.py

DEBUG = True
SECRET_KEY = 'my_secret_key'

DB_USERNAME = 'postgres'
DB_PASSWORD = 'password'
DB_HOSTNAME = 'localhost'
DB_PORT = 5432

2.在应用程序中加载配置:

from flask import Flask
app = Flask(__name__)

# 从配置文件中加载配置信息
app.config.from_pyfile('config.py')

3.使用配置:

@app.route("/")
def index():
    debug_mode = app.config['DEBUG']
    secret_key = app.config['SECRET_KEY']
    db_username = app.config['DB_USERNAME']
    db_password = app.config['DB_PASSWORD']
    db_hostname = app.config['DB_HOSTNAME']
    db_port = app.config['DB_PORT']
    
    print(f'Debug mode: {debug_mode}')
    print(f'Secret key: {secret_key}')
    print(f'Database username: {db_username}')
    print(f'Database password: {db_password}')
    print(f'Database hostname: {db_hostname}')
    print(f'Database port: {db_port}')

3.从环境变量中加载

在部署应用程序时,可以将一些机密信息以环境变量的形式添加到操作系统中。在 Flask 应用程序中,可以使用 `os.environ 对象读取这些环境变量的值,并设置到 Flask 的 config 对象中。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息。注意:环境变量的值为配置文件的绝对路径。

使用方式:app.config.from_envvar('环境变量名')

假设有环境变量名:MY_SETTING ,变量值:D:\WorkSpace\Python\flask\setting.py

1.Linux中设置环境变量

vim  ~/.bashrc

export MY_VARIABLE="my value"

source ~/.bashrc

2.开发工具设置环境变量
在这里插入图片描述
3.代码中获取环境变量对象,并设置环境变量

import os

# 添加环境变量
os.environ['MY_SETTING'] = 'D:\\WorkSpace\\Python\\flask\\setting.py'
import os
from flask import Flask

# 添加环境变量
os.environ['MY_SETTING'] = 'D:\\WorkSpace\\Python\\flask\\setting.py'

app = Flask(__name__)

# 从配置文件中加载配置信息
app.config.from_envvar('MY_SETTING', silent=False)

@app.route("/")
def index():
    key = app.config['KEY']
    print(key)
    return key

silent:表示系统环境变量中没有设置相应值时是否抛出异常

False:没有值时报错通知,默认为False

True: 没有值也让Flask正常的运行下去

配置对象与环境变量结合

在实际项目中,常用的做法是:创建一个Flask app,并结合使用配置对象与环境变量加载配置

1.使用配置对象加载默认配置

2.使用环境变量加载不想出现在代码中的敏感配置信息
def create_flask_app(config):
    """
    创建Flask应用
    :param config: 配置对象
    :return: Flask应用
    """
    app = Flask(__name__)
    app.config.from_object(config)

    # 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
    app.config.from_envvar("MY_SETTING", silent=True)
    return app

class DefaultConfig(object):
    KEY = 'Y7W7qg5CD9s5UmgKe5UdiY1bhdxbvkaq'

# 继承配置
class DevelopmentConfig(DefaultConfig):
    DEBUG=True

# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)

@app.route("/")
def index():
    key = app.config['KEY']
    print(key)
    return key

app.run参数

在Flask中,app.run()方法会启动一个Web服务器来运行应用程序,该方法可以带有不同的参数来控制服务器的运行方式

常用的参数:

host:指定应用程序监听的 IP 地址,默认值为 '127.0.0.1',即只能通过本地访问。

port:指定应用程序监听的端口号,默认值是 5000。

debug:以调试模式启动应用程序,默认值为False。当设置为True的时候,应用程序会显示详细的错误信息及堆栈跟踪信息,方便在代码出现问题时进行调试。

threaded:表示如果应用程序需要多线程支持,该参数设置为 True 就可以开启多线程。默认值为 False,即单线程运行。

ssl_context:用于启用 SSL 安全通信协议的上下文对象。通常,应该创建该对象,并使用 .pem 格式的文件存储 SSL 的密钥和证书。

options:用于向底层 Werkzeug 服务器传递其他特定参数的字典对象。

注意:

在部署生产环境中,不能直接使用 Flask 自带的 Web 服务器来部署应用程序,应该使用专业的 Web 服务器,如 Nginx、Apache 等。

指定运行的主机IP地址,端口,是否开启调试模式

app.run(host="0.0.0.0", port=5000, debug = True)

DEBUG调试模式

程序代码修改后可以自动重启服务器

在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示

开发服务器启动方式

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

在命令行中运行

$ export FLASK_APP=helloworld
$ flask run
 * Running on http://127.0.0.1:5000/

说明

环境变量 FLASK_APP 指明flask的启动实例

flask run -h 0.0.0.0 -p 8000 绑定地址 端口

flask run --help获取帮助

生产模式与开发模式的控制

	通过FLASK_ENV环境变量指明
	
	export FLASK_ENV=production 运行在生产模式,未指明则默认为此方式
	export FLASK_ENV=development运行在开发模式

在终端输入以下命令启动服务器,并以调试模式运行:

export FLASK_ENV=development
export FLASK_APP=your_app.py
flask run

扩展启动方式

$ export FLASK_APP=helloworld
$ python -m flask run
 * Running on http://127.0.0.1:5000/

Python程序中手动启动

这个方法适合非常简单的开发,但是在生产环境中不建议使用。

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':
    # 启动应用程序,并监听主机地址 localhost 和端口 5000
    app.run(host='localhost', port=5000)

Pycharm启动

设置环境变量
在这里插入图片描述
在这里插入图片描述

D:\Development\Python\env\flask\Scripts\python.exe -m flask run
 * Serving Flask app 'main'
 * Debug mode: on
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
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
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
'FLASK_ENV' is deprecated and will not be used in Flask 2.3. Use 'FLASK_DEBUG' instead.
 * Debugger is active!
 * Debugger PIN: 552-902-892

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

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

相关文章

2.2.3开机流程中的BIOS与UEFI开机检测程序

操作系统的系统软件产生,是为了计算机所有硬件系统的资源合理分配。操作系统会控制所有的硬件并且提供核心功能,因此我们的计算机就能够认识硬盘内的文件系统,并且进一步的读取硬盘内的软件文件与执行该软件来达成各项软件的执行目的。 基本上…

【Redis】封装Redis缓存工具解决缓存穿透与缓存击穿问题

基于StringRedisTemplate封装一个缓存工具,主要有一下几个方法 方法1:将任意Java对象序列化为json并存储在String的指定key中且设置TTL 方法2:将任意Java对象序列化为json并存储在String的指定key中,并可以设置逻辑过期时间&…

【python可视化】常用数据类型

🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第二期 ⭐本期内容:常用数据类型 🏆系列专栏:Python数据分析、挖掘与可视化 👍欢迎大佬指正,一起学习,一起加油&#xff01…

【Frida-实战】EA游戏平台的文件监控(PsExec.exe提权)

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 代码编写开源代码搜索自己撸代码procexp确定句柄对应的文件名并过滤 2️⃣ PsExec.exe提权定位找不到EABackgroundService.exe的问题 PsExec.exe提权PsExec.exe原理 🛬 结论📖 参考资料 🛫 问题…

4年Android开发,面试通过全靠狂刷这份面试题,从11K涨到25K+(内含答案)

在博主认为,对于Android面试以及进阶的最佳学习方法莫过于刷题博客书籍总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考&am…

【Python】序列类型③-集合

文章目录 1.集合(set)简介2.集合的定义3.集合的遍历4.集合的常用方法 1.集合(set)简介 集合是一种无序可变的容器对象 集合最大的特点:同一个集合内元素是不允许有重复的,因此集合自带"去重"效果 2.集合的定义 集合的定义有两种方式: 使用{}进行定义,这种方式不能定…

【TCP 重传、滑动窗口、流量控制、拥塞控制】

文章目录 重传机制超时重传快速重传SACK方法Duplicate SACK 滑动窗口流量控制那操作系统的缓冲区,是如何影响发送窗口和接收窗口的呢?窗口关闭 拥塞控制慢启动拥塞避免拥塞发生快速恢复 重传机制 TCP 实现可靠传输的方式之一,是通过序列号与…

chatgpt可以降重论文吗-chatgpt降重论文软件

chatgpt可以降重论文吗 ChatGPT是一种自然语言处理技术,可以生成符合指定条件的文本。因此,理论上可以使用ChatGPT来降重论文。但是,需要注意以下几点: 是否符合学术道德要求:学术论文的降重需要严格遵守学术道德准则…

mfc140u.dll丢失怎么解决?,哪种方法更简单?

如果您在运行 Windows 操作系统时遇到了“mfc140u.dll 丢失”或“找不到 mfc140u.dll”等错误提示,那么这意味着您的计算机遗失了该文件。mfc140u.dll 文件是 Microsoft Visual C 的一部分,是支持应用程序运行所必需的。无论是什么原因导致了 mfc140u.dl…

PointNetGPD<论文>

摘要 提出了一种端到端的抓取位置预测模型,能够从点云中估计出机器人的抓取位姿。网络以原始点云作为输入,能够捕捉到抓取器闭合区域点云的复杂几何结构,即使这些点云很稀疏。 PointNetGPD是一种轻量级的网络模型,能够处理抓取器…

手把手教你在Centos7.6系统安装mysql5.7

文章目录 1 查看linux系统版本2 官网获取文件3 wget下载4 安装yum源5 查看是否正常工作6 安装mysql服务6.1出错6.2解决方法 7 检查配置文件8 启动mysql服务9 root第一次登录10 其他设置10.1 修改密码10.2 开启开机自启动10.3 配置my.conf 1 查看linux系统版本 需要安装对应系统…

Docker安装、Docker基本操作

一、Dokcer安装 1.安装 # 1、yum 包更新到最新,需要几分钟时间(注意:也可以直接跨过) sudo yum update # 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum install -y yum-util…

从文字到语义:文本分词和词性标注的原理与实现

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

个人博客系统调试详细过程

系统功能的详细说明和源代码见以下链接:https://blog.csdn.net/shooter7/article/details/121180333相关的源码数据库文件、软件安装包可以联系博主koukou(壹壹23七2五六98) 调试过程如下: 文章目录 调试过程如下:一、数据库安装二、sql数据文件的导入三…

java调用cmd命令

1.首先,我们需要了解一下 java是如何调用 cmd的: 6.在实际的开发中,我们有可能会遇到 java调用 cmd命令的情况: 7.对于一些特定的环境下,例如在嵌入式系统中,那么我们可以使用下面这种方式来调用 cmd命令&a…

【Redis】Redis常用基本命令

数据结构 常用基本命令 keys * 查看当前库所有的key exists key 判断某个key是否存在 type key 查看key的类型 del key 删除指定的key数据 unlink key :非阻塞删除,仅仅将keys从key元数据删除,真正的删除会异步操作 6.ttl key 查看key多少秒过期…

AIGC:ColossalChat(基于LLM和RLHF技术的类似ChatGPT的聊天机器人)的简介、安装、使用方法之详细攻略

AIGC:ColossalChat(基于LLM和RLHF技术的类似ChatGPT的聊天机器人)的简介、安装、使用方法之详细攻略 目录 ColossalChat的简介 1、局限性 LLaMA-finetuned 模型的限制 数据集的限制 2、在线演示 3、Coati7B examples Generation Open QA ColossalChat的安装…

功率电子开关的高边开关和低边开关high -side power switch

下图为使用NMOS,最简单的开关电路。(低侧驱动) CONTROL为控制信号,电平一般为3~12V。负载一端接电源正极,另一端接NMOS的D(漏极)。CONTROL电平为高时,Vgs>NMOS的Vgs导通阀值&…

数据库基础应用——概念模型

1、实体(Entity) 客观存在并可相互区别的事物称为实体。实体可以是人、物、对象、概念、事物本身、事物之间的联系。(例如一名员工、一个部门、一辆汽车等等。) 2、属性(Attributre) 实体所具有的每个特性称为属性。(例如:员工由员…