Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Flask】显式应用程序对象和销毁行为以及销毁行为在flask项目中的使用

【Flask】显式应用程序对象和销毁行为以及销毁行为在flask项目中的使用

作者头像
上进小菜猪
发布于 2022-12-13 10:27:58
发布于 2022-12-13 10:27:58
83600
代码可运行
举报
运行总次数:0
代码可运行

显式应用程序对象

基于WSGI的Python web应用程序必须有一个中央调用对象来实现实际应用程序。在Flask中,中心调用对象是Flask类的一个实例。每个Flask应用程序必须创建该类的一个实例,并将模块的名称传递给该实例。但为什么Flask不能自动做好所有这些事情呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask
app = Flask(__name__)

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

使用对象有三个主要原因。最重要的原因之一是显式对象可以保证实例的唯一性。使用单个应用程序对象模拟多个应用程序有多种方法,例如维护应用程序堆栈,但这会导致一些问题。我不会在这里展开。现在的问题是:微框架何时需要多个应用程序?最好的答案是单元测试。测试时,创建一个用于测试特定功能的最小应用程序非常有用。当删除此最小应用程序的应用程序对象时,将释放其占用的所有资源。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from hypothetical_flask import route

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

此外,在使用显式对象时,可以继承基类(Flask)以方便修改特定函数。如果不使用显式对象,则无法启动。 第二个原因也很重要,那就是Flask需要包名。创建Flask实例时,通常将__name__作为包的名称。Flask根据包名加载与模块相关的正确资源。通过Python出色的反射功能,您可以找到模板和静态文件open_resource()。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask
from flask_restful import Api, Resource


app = Flask(__name__)
api = Api(app)


class HelloWorldResource(Resource):
    def get(self):
        return {"hello": "world"}


    def post(self):
        return {"hello": "world"}


api.add_resource(HelloWorldResource, "/")

显然,还有其他框架可以在没有任何配置的情况下加载与模块相关的模板。然而,前提是必须使用当前工作目录,这是一种不可靠的实现方法。当前工作目录为进程级。如果多个应用程序使用相同的过程(web服务器可能在您不知情的情况下执行此操作),则当前工作目录将不可用。还有一种更糟糕的情况:许多web服务器将文档根目录视为当前工作目录。如果应用程序位于文档根目录以外的目录中,则会发生错误。

自动转换

如果不处理二进制数据,请使用Unicode。Unicode在Python2.x中意味着什么? 只要只使用ASCII字符点(基本上是数字、非变音或非花哨的拉丁字母),就可以使用常规字符串常量(“Hello World”) 如果字符串中需要ASCII以外的字符,则需要通过添加小写u前缀(如u’Hänsel und Gretel’)将字符串标记为Unicode字符串 如果在Python文件中使用非Unicode字符,则需要告诉Python文件使用的编码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def write_file(filename, contents, charset='utf-8'):
    with open(filename, 'w') as f:
        f.write(contents.encode(charset))

同样,我建议为此使用UTF-8。您可以在Python源文件的第一行或第二行中编写#--coding:utf-8--,以通知解释器编码类型。 Jinja被配置为从UTF-8解码模板文件。因此,确保您的编辑器也以UTF-8保存文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def read_file(filename, charset='utf-8'):
    with open(filename, 'r') as f:
        return f.read().decode(charset)

默认情况下,大多数当前编辑器存储为UTF-8,但如果您的编辑器未配置为UTF-8,则需要对其进行更改。以下是将编辑器设置为UTF-8存储的一般方法: Vim:将set enc=utf-8添加到。vimrc文件 Emacs:使用编码的cookie或将其放入您的。emacs文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(prefer-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)

销毁行为

经批准的Flask扩展需要维护人员。如果扩展作者想要超越项目,项目应该寻找新的维护者,包括完整的源托管转换和PyPI访问。如果没有可用的维护人员,请给予Flask核心团队访问权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def close_connection(response):
    ctx = _request_ctx_stack.top
    ctx.sqlite3_db.close()
    return response

if hasattr(app, 'teardown_request'):
    app.teardown_request(close_connection)
else:
    app.after_request(close_connection)

经批准的Flask扩展必须提供准确的Flask_包或扩展名模块。它们也可以驻留在flaskext命名空间包中,尽管目前不建议这样做。 它必须附带make测试或python设置py测试的调用测试套件。对于使用make测试测试的套件,扩展必须确保自动处理测试所需的所有依赖项。如果测试由python setup执行,则调用py测试。测试的依赖性由设置Py文件确定。测试套件也必须是分发的一部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def hello(name):
    print 'Hello %s!' % name


def goodbye(name):
    print 'See you %s.' % name


class MyClass(object):
    """This is a simple docstring"""

    def __init__(self, name):
        self.name = name

    def get_annoying_name(self):
        return self.name.upper() + '!!!!111'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python flask入门
在阅读本文之前,我假设你已经了解了 Python 和 HTML 的基础知识。如果还没有,那么你可以去各大教程平台自行了解
SimpleAstronaut
2022/08/09
1.1K0
Flask
1.Flask实例配置 app.config.form_object("setting.FlaskSetting") app.DEBUG = True 开启Debug模式,该完代码不用手动重启 app.SECRET_KEY = "xxxxx" 开启session必备参数
py3study
2020/01/19
1.8K0
Flask
flask 扩展开发(flask 113)
Flask,一个微框架,通常需要一些重复的步骤来让第三方库工作。因为在很多时候, 这些步骤可以被分离出,来支持多个项目,就有了 Flask Extension Registry 。
用户5760343
2019/08/20
5300
Flask 快速入门
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。本文参考自Flask官方文档,大部分代码引用自官方文档。 安装Flask 首先我们来安装F
乐百川
2018/01/09
1.5K0
Flask 快速入门
flask构建AI网站(后端基础)
2、会泄露Web应用的绝对路径,及Python解释器的路径(可以配合写文件漏洞向指定目录的文件内写入构造好的恶意代码,利用方式可以参考安全客的这篇文章:文件解压之过 Python中的代码执行)
用户6841540
2025/03/24
1610
flask 教程_python flask快速入门与进阶
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
全栈程序员站长
2022/09/20
2.1K0
flask框架(二)配套代码
1、cookie.py """ - 解释: 用来保持服务器和浏览器交互的状态的, 由服务器设置,存储在浏览器 - 作用: 用来做广告推送 - cookie的设置和获取 - 设置cookie: response.set_cookie(key,value,max_age) - max_age: 表示cookie在浏览器的存储时间,单位是秒 - 获取cookie: request.cookies.get("key") """ from flask import Flask, make_res
小闫同学啊
2019/07/18
1.3K0
Python Flask 学习笔记 —— 二(路由,视图函数,jinjia2语法)
客户端(Web 游览器)发送网络请求到 Web 服务器,Web 服务器再把请求转发给 Flask 程序实例。程序实例需要知道每个 URL 请求运行哪些代码。所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间的关系的程序叫做 路由
Gorit
2021/12/08
1.6K0
Python Flask 学习笔记 —— 二(路由,视图函数,jinjia2语法)
小记 - Flask基础
Web表单是Web程序的基本功能,它是HTML页面中负责数据采集的部件。表单中有三部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。
Naraku
2021/07/29
2.9K0
小记 - Flask基础
Python Flask 学习笔记 —— 一(搭建虚拟环境,运行第一个 flask 程序)
以下操作均在 windows 环境下进行,我使用的 Python 版本是 3.7.1
Gorit
2021/12/08
2.1K0
Python Flask 学习笔记 ——  一(搭建虚拟环境,运行第一个 flask 程序)
看完这篇文章还能不懂Flask这种Web框架吗?
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
IT派
2018/07/30
5180
Flask 学习-54.Flask-RESTX 结合 namespace 使用 logging日志
前言 Flask-RESTX 通过提供每个和它自己的标准 Python实例来扩展Flask 的日志记录。这允许在每个命名空间的基础上分离日志记录,以允许更细粒度的细节和配置。 基本示例 默认情况下,这些记录器从 Flask 应用程序对象记录器继承配置。 import logging import flask from flask_restx import Api, Resource # configure root logger logging.basicConfig(level=logging.IN
上海-悠悠
2022/09/13
6050
flask系列三之Jinja2模板
(1)如果只有一个或者少量参数,直接在render_template函数中添加关键字参数就可以了。
wfaceboss
2019/04/08
1.6K0
大白话说Python+Flask入门(一)
技术这东西就得用,不用就会忘,之前写博客感觉就是给自己记笔记用,还有大部分,估计睡在语雀里都落灰了,哈哈!
软件测试君
2023/11/22
3770
大白话说Python+Flask入门(一)
Flask 学习-17.项目配置管理config
前言 项目总是需要一定的配置的。根据应用环境不同,会需要不同的配置。比如开关调试 模式、设置密钥以及其他依赖于环境的东西。 配置入门 我们写的第一个hello world 应用是这样的 app.py from flask import Flask app = Flask(__name__) @app.route('/hello') def hello(): return 'Hello, World!' if __name__ == '__main__': app.run() 当我们需要
上海-悠悠
2022/08/31
1.5K0
Flask 学习-17.项目配置管理config
Flask基础快速入门
简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 flask中文文档 Jinja 文档 Werkzeug 文档 1、安装Flask
菲宇
2020/03/20
6820
flask web开发实战 入门 pdf_常用的web开发框架
Flask是一个用Python编写的Web应用程序框架。Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎。
全栈程序员站长
2022/09/27
7.5K0
flask web开发实战 入门 pdf_常用的web开发框架
后端框架flask学习小记[通俗易懂]
最近在和几个伙伴尝试搭建一个新闻推荐系统, 算是一个推荐算法的实战项目, 里面涉及到了前后端交互, 该项目里面,使用了Flask作为后台框架, 为了理清楚整个系统的交互,所以就快速参考着资料学习了下flask, 主要还是参考伙伴们写的flask简介和基础的内容, 加上了一些其他理解和实验辅助, 整理一篇心得文章, 算是flask初步入门。
全栈程序员站长
2022/09/08
2.1K0
后端框架flask学习小记[通俗易懂]
如何在Ubuntu 20.04操作系统上安装Flask
Ubuntu 20.04随附Python 3.8。 您可以通过键入以下内容来验证系统上是否安装了Python:
用户5005176
2021/08/10
3.4K0
Flask模板
在模板中{{ variable }}结构表示变量,是一种特殊的占位符,告诉模板引擎这个位置的值,从渲染模板时使用的数据中获取;Jinja2除了能识别基本类型的变量,还能识别{};
py3study
2020/01/16
2.7K0
相关推荐
python flask入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验