Flask框架搭建

2023-05-16

Flask框架搭建

创建一个Flask框架

1、打开pycharm专业版,创建一个flask框架项目,如图:
在这里插入图片描述

  • 这里的虚拟环境是创建项目之前已经创建好的虚拟环境

2、点击创建按钮,跳转到项目主界面,如图:
在这里插入图片描述

  • 由上图可以看出项目的结构,如图:
    在这里插入图片描述

解析一个应用程序

创建完成Flask项目,会自动生成一个应用程序,代码如下:

from flask import Flask
# 初始化Flask实例
app = Flask(__name__)

@app.route('/') # /就是指路由
def hello_world(): # 视图函数
    return 'Hello World!' # 视图函数return接受的类型是string,dict,tuple,response对象,以及WSGI可调用类型的
    
if __name__ == '__main__':
    app.run()
  • 首先我们导入了 Flask 类。 该类的实例将会成为我们的 WSGI 应用。
  • 接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用 name ,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘main’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。更多内容详见 Flask 文档。
  • 然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。
  • 函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。

把它保存为 hello.py 或其他类似名称。请不要使用 flask.py 作为应用名称,这会与 Flask 本身发生冲突。

WSGI是指Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口

打开Terminal,使用python3 app.py命令来运行一下该应用程序,如下图:
在这里插入图片描述
从运行的日志来看,这样就启动了一个非常简单的一个内建服务器,现在就可以打开浏览器访问http://127.0.0.1:5000/ ,界面上会出现Hello World! 字样。
该应用程序的请求过程和响应过程如下图:
在这里插入图片描述
由上面的应用程序可以看出,默认情况下是只能访问本机的IP地址是http://127.0.0.1,端口号是5000,如果想使用自己电脑上的IP地址和其他端口号可以通过app.run(host='IP地址',port=端口号)进行配置,当然如果想设置服务器公开访问的话可以设置成app.run(host='0.0.0.0'),这样可以被所有人进行访问。

调试模式

虽然 flask 命令可以方便地启动一个本地开发服务器,但是每次应用代码修改之后都需要手动重启服务器。这样不是很方便, Flask 可以做得更好。如果你打开 调试模式,那么服务器会在修改应用代码之后自动重启,并且当应用出错时还会提供一个 有用的调试器。

由上面程序运行的日志不难看出Debug mode: off,默认是关闭的,无论你怎么修改代码,都必须重启服务器,才能去访问。如果不想重启服务器的情况下,边修改代码边调试的话,需开启debug的调试模式,通过app.run(debug=True)来设置成调试模式,设置完成之后必须重新启动服务器,你会发现debug模式变为on,如图:
在这里插入图片描述
开启debug调试模式,只要你在修改代码的同时服务器会重新加载你的最新代码,便于调试,适用于开发环境(development),而debug=Flase或者默认的情况下,debug模式默认是关闭的,适用于生产环境(production)。

路由

什么是路由?路由就是指通过URL定位到的具体python类或者python函数的程序。路由是使用@app.route('/')来定义的,括号中的字符串/就是路由,也就是指使用 route() 装饰器来把函数绑定到 URL,如下面的定义两个路由:

@app.route('/')
def index():
    return 'Index Page'

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

比如说上面的两个路由,如果不指定host,那么默认访问本机的IP地址是127.0.0.1:5000,但是如果想要得到index的函数的返回值在页面显示,这就需要通过URL或者IP地址来寻找index的路径,也就是指index的路由/,这样才能得到Index Page,同样hello的函数的路由就是这/hello。
route()装饰器是通过底层add_url_rule函数来实现的,上面的两个路由可以写成,两种方式是等效的:

def index():
    return 'Index Page'
app.add_url_rule('/',view_func=index)

def hello():
    return 'Hello, World'
app.add_url_rule('/hello',view_func=hello)

路由变量规则

通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。标记的部分会作为关键字参数传递给函数。通过使用<converter:variable_name> ,可以选择性的加上一个转换器,为变量指定规则。
变量器规则支持以下几种转换器类型:

string(缺省值) 接受任何不包含斜杠的文本
int接受正整数
float接受正浮点数
path类似 string ,但可以包含斜杠
uuid接受 UUID 字符串

示例如下:

@app.route('/index/<name>')# <name>是一个变量,默认是字符串类型
def index(name):# 参数是必须传递的
    return '小明'

@app.route('/add/<int:num>')# <int:num>是一个变量,转换器类型是int类型
def multi(num):# 参数是必须传递的
    num = num * 10
    return str(num)

@app.route('/add/<float:num>')# <float:num>是一个变量,转换器类型是float类型
def add(num):# 参数是必须传递的
    num = num + 0.5
    return str(num)

@app.route('/index/<path:paths>') # <path:paths>是一个变量,转换器类型是path类型
def get_path(paths):# 参数是必须传递的
    return paths

@app.route('/uid/<uuid:uid>')# <uuid:uid>是一个变量,转换器类型是uuid类型,uid必须传正确的uuid的格式的数据
def get_uid(uid):# 参数是必须传递的
    return "获取唯一的标识码:"+ str(uid)

唯一的 URL / 重定向行为

重定向行为 / 唯一的 URL的不同之处在于是否使用尾部的斜杠,如下面两个视图函数:

@app.route('/projects/')# 重定向,路由中定义了/,无论请求的URL中是否带/,都可以执行视图函数,如果请求URL中没有带/,浏览器中就做了一次重定向
def projects():
    return 'The project page'

@app.route('/about')# 唯一URL,请求路由的时候如果添加/:http://127.0.0.1:5000/about/,会显示Not Found
def about():
    return 'The about page'

projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

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

Flask框架搭建 的相关文章

  • 如何将Python + Flask变量输入到html标签属性中

    顺便说一句 新手 我正在使用 Python Flask 我有一个 Python 变量 我想将其替换为value 我的尝试 value variable 没用
  • Flask Restful 解析器列表字典

    我有一个解析请求列表字典的示例 shopping cart id 23323 qty 10 id 34232 qty 9 id 34232 qty 9 我如何使用flask restful RequestParser解析它 使用这样的东西
  • 我的本地 postgresql 数据库 url 的形式是什么?

    我正在学习 Flask sqlalchemy 教程https pythonhosted org Flask SQLAlchemy quickstart html a minimal application https pythonhoste
  • Flask:缓存静态文件(.js、.css)

    我真的找不到任何这方面的资源 那么如何将视图 函数的缓存与静态文件 即 css js 分开 我想将静态对象缓存一周 另一方面 我只需要缓存函数 视图几分钟 当我执行以下操作时 from flask ext cache import Cach
  • 在 jinja2 模板中转义 jinja2 语法

    我在 Flask 中提供来自 Jinja2 模板的动态页面 现在 我在脚本标记内定义客户端模板 比如 Jinja2 clone Nunjucks 问题是 客户端模板的语法如下 that Flask sJinja2 解释器可以解释而不是渲染v
  • Jinja:空主后备示例如何工作?

    来自 jinja 官方网站的示例代码 if not standalone extends master html endif block body p This is the page body p endblock 据我了解 当独立为真时
  • 烧瓶 - 404 未找到

    我是烧瓶开发的新手 这是我在烧瓶中的第一个程序 但它向我显示了这个错误 在服务器上找不到请求的 URL 如果您输入了网址 请手动检查拼写并重试 这是我的代码 from flask import Flask app Flask name ap
  • 在 Flask 应用程序中设置和检索环境变量

    我想使用 python3 flask 构建一个非常简单的 REST api 比如说我想设置我的SECRET KEY要求由flask作为环境变量 推荐的方法是什么 我知道python dotenv允许 或者我应该说requires the f
  • Heroku 上的 OpenCV 错误,但模型部署成功

    我正在尝试在 Heroku 上部署深度学习 Flask 应用程序 它已成功部署 但仍然给我Application Error信息 我检查了日志 但没有发现任何内容 帮我 构建日志 gt Building on the Heroku 20 s
  • 连接被拒绝:当uwsgi和nginx在不同容器中时

    我正在尝试设置两个 docker 容器 是的 无需 docker compose 分开 一个带有 nginx 另一个带有带有基本 Flask 应用程序的 uwsgi 我在 docker 内的同一网络中运行容器我的 nginx 配置已添加 链
  • 如何在flask中重新加载python模块?

    我有一个名为mapping py有一本字典methodMapping 在我的 Web 应用程序中 一个键值对被添加到 methodMapping 字典中 我将其附加到之后mapping py reload mapping 被调用 并且文件重
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • Flask 环境变量被忽略(FLASK_ENV 和 FLASK_APP)WINDOWS 10

    After setting the environment variables FLASK ENV and FLASK APP running flask run will give me this error 该代码片段显示了命令提示符
  • 使用 Flask/WTForms 和 React 进行 CSRF 保护

    有没有人成功地为使用 React 作为受控组件 提交到 Flask 后端 最好使用 WTForms 的表单实现了 CSRF 保护 我看过很多部分答案 其中一个是关于 Django 的 但找不到任何关于 Flask 的明确答案 我的大问题似乎
  • 在 Windows 上使用 apache mod_wsgi 运行 Flask 应用程序时导入冲突

    我允许您询问我在 Windows 上使用您的 mod wsgi portage 托管 Flask 应用程序时遇到的问题 我有两个烧瓶应用程序 由于导入冲突 只有一个可以同时存在 IE 如果请求申请 1 我有回复 然后 如果我请求应用程序 2
  • Flask SQLAlchemy 无法在 venv 中设置属性错误[重复]

    这个问题在这里已经有答案了 我正在学习身份验证功能Flask SQLAlchemy 因此构建非常基本的应用程序 用户 属性 姓名 电子邮件和密码 能够注册和登录 重定向到虚拟个人资料页面 仅此而已 令人费解的行为是 如果我使用虚拟环境 我所
  • 从 SQLalchemy 和 Flask 中的相关列表中查询

    I have User which has one Person So User person is a Person 我正在尝试获取以下列表User从列表中Person 我尝试了以下方法 gt gt gt people Person qu
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • 修复类以在 Flask 会话中启用对象存储[重复]

    这个问题在这里已经有答案了 我有一个自定义类 Passport 其中包含活动用户身份和权限 我曾经将它存储在会话中 如下所示 p Passport p do something fancy session passport p 它就奏效了
  • Python代码执行时自动打开浏览器

    我正在 Python Flask 中实现 GUI Flask 的设计方式是 必须 手动 打开本地主机以及端口号 有没有一种方法可以使其自动化 以便在运行代码时自动打开浏览器 本地主机 我尝试使用 webbrowser 包 但它在会话终止后打

随机推荐