Skip to main content

FLASK – 极简主义PYTHON网络框架

Flask是一个非常受欢迎的Python网络框架,因其简单性和相比于更大的框架如Django的极简主义而常常被选择。Flask是一个“微型”框架,它不包含“全栈”框架提供的许多工具和库,这使得它轻便、灵活且更直接。

来看一个简单的Flask应用示例:app.py

Python
from flask import Flask
app = Flask(__name__)

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

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

在这个脚本中:

  • Flask类的一个实例就是我们的WSGI应用。
  • 装饰器@app.route(‘/’)告诉Flask哪个URL应触发我们的函数。在这个例子中,是根URL (‘/’)。
  • 当路由被访问时,将触发hello_world函数。它会返回字符串 ‘Hello, World!’。
  • 条件if __name__ == ‘__main__’:允许服务器只在直接从Python解释器执行脚本时运行,而不是作为导入的模块使用。

要运行应用,你可以将它保存到一个文件(比如 app.py),然后通过命令行运行python app.py。Flask将在5000端口启动一个本地web服务器。然后,如果你在你的网络浏览器中导航到http://localhost:5000,你会看到文本 ‘Hello, World!’

Flask支持带变量的路由、表单处理、模板渲染以及许多其他典型的web开发功能,尽管一些可能需要添加扩展。

当然这个“Hello World!”对于Web服务框架来说没有什么意义。那么我们来看看下面这个例子:

我们让这个app监听一个POST请求,该请求将包含一个JSON对象。

Python
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api', methods=['POST'])
def api_endpoint():
    data = request.get_json()  # 获取 JSON 数据

    if not data:  # 检查 JSON 数据是否存在
        return jsonify({'message': 'No data provided'}), 400

    # 在这里,你可以对数据进行处理
    # 如:name = data.get('name')
    
    return jsonify({'message': 'Data received', 'received_data': data}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0')  # 设置为 '0.0.0.0' 可以让服务器在外部网络上可见

在这个示例中,服务器监听 /api 端点的POST请求。当有POST请求到达时,它将尝试从请求中获取JSON数据,如果没有数据或者数据不是有效的JSON格式,它将返回一个400状态码(代表客户端错误)和一个错误信息。如果有数据,并且数据是有效的JSON,它将返回一个200状态码(代表请求成功)和一个确认信息以及接收到的数据。

记住,在处理JSON数据之前,你应该进行一些有效性检查,比如检查JSON对象中的特定字段是否存在,或者是否符合预期的格式。为了简洁,我在这个示例中省略了这部分。

另外,我使用了 host=’0.0.0.0′ 参数来使服务器在外部网络上可见。如果你在本地机器上运行此服务器并试图从同一网络的另一台机器上访问它,你需要这样做。如果你只打算在运行服务器的同一台机器上进行访问,那么你可以省略这个参数,或者将其设置为 localhost 或 127.0.0.1。

如果你在内网上简单测试这个程序的话,简直是“极简”到家了,太方便了。

Flask非常适合初学者开始学习和使用,开发轻量级产品级的应用也是完全可以的。

  • 简单:Flask提供了构建一个基本web应用所需的所有核心组件。例如,它内置了一个路由器,这使得你可以很容易地将函数绑定到特定的URL路径,并处理HTTP请求。
  • 轻量级:Flask是一个微框架,它不包括例如数据库抽象层或表单验证等一些“全栈”框架通常会包含的组件。这意味着,你可以自由选择你喜欢的库来进行数据库操作、表单验证、文件上传等操作,而不需要被限制在一个特定的工具集内。
  • 灵活:Flask的简单和轻量级使得它非常灵活,你可以自由地根据你的需求来扩展它。有许多第三方库和插件可以很好地和Flask集成,例如Flask-SQLAlchemy用于数据库操作,Flask-WTF用于表单验证,等等。

与其他框架的对比:

  • Flask vs Django:Django是Python中的一个全栈框架,它比Flask更复杂,提供了更多的内置功能,如用户认证、数据库抽象层和ORM(对象关系映射)等。这使得Django在构建大型、复杂的web应用时更有优势,但是也使得学习曲线更陡峭。相比之下,Flask更轻量级、更易学,对于初学者和构建小型或者中型的web应用更合适。
  • Flask vs Express.js:Express.js是一个基于Node.js的web应用框架,和Flask在设计理念上很相似,都提供了一种简单和灵活的方式来构建web应用。主要的区别在于,Express.js使用JavaScript,而Flask使用Python。这意味着,你的选择可能会受你对这两种语言熟练度的影响。

总的来说,Flask是一个优秀的web应用框架,它简单、灵活并且功能强大。尽管它可能没有一些全栈框架的所有功能,但是这也使得它在学习难度和灵活性上具有优势。对于初学者来说,Flask是一个很好的起点,可以帮助你快速地了解并开始构建web应用。

猜猜为什么我突然想起来介绍这个玩意儿?因为后面的内容会用到它做一件比较搞笑的事情↖(^ω^)↗

OK! Happy networking!

Flask, iOS, macOS, Networking, Python, Web