python入门系列二十二(Flask,轻量级web框架)

100 阅读2分钟

1.引言

Flask是python生态领域中最受欢迎的轻量级web框架,它的设计理念:微核心+可扩展。是我们在web应用开发中,可以考虑的框架选择之一。我自己在日常应用中,相对用的比较多一些,主要是使用起来方便。比如最近做的一些Langchian+LLM智能体应用中,选择Flask框架实现web端的发布交互。

image.png

这是一个基于Langchain框架+LLM的应用小工具,用户输入鲜花类型名称,通过搜索引擎找到相应的微博大V,借助爬虫抓取大V微博主页详细内容,最后交给LLM进行文本摘要,和生成联络文稿,旨在帮助营销小伙伴提升运营效率的一个工具。

你看到的这个页面,背后实现的框架即是Flask框架。今天这篇文章,我将分享Flask框架给你,它非常适合于我们做一些轻量级的web应用,特点突出一个小巧,快,方便。当然python领域web框架有很多,比如Django,Tornado,FastApi等。

2.示例

2.1.环境准备

遵循惯例,只要是非python官方提供的库,我们都需要安装

 pip install Flask

image.png

2.2.hello world

环境准备好,来一个hello flask!应用体验一下吧

# 导入 flask 模块
from flask import Flask

# 创建一个 Flask 实例,声明应用app
app = Flask(__name__)

# 定义一个路由,访问根路径时返回欢迎信息
@app.route('/')
def home():
    return '<h1>Hello Flask!</h1>'

# 启动应用
if __name__ == '__main__':
    app.run(debug=True)

启动应用,访问:http://127.0.0.1:5000/

image.png

2.3.路由

通过入门案例,我们看到通过Flask框架开发web应用如此简单!其中它很重要的一个组件是路由,即@app.route定义的内容。路由在web应用中作为基础能力之一,每一个路由代表一个资源,或者说是一个API。

Flask框架的路由系统支持动态路由,和参数类型约束: 支持string/int/float/path/uuid等类型转换器

@app.route('/user/<int:user_id>')
def user_profile(user_id):
    return f'User ID: {user_id}'

@app.route('/search/<path:query>')
def search(query):
    return f'Searching: {query}'

2.4.请求上下文

可以通过request对象处理http各种请求,及请求参数

from flask import request

@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    ip_address = request.remote_addr
    return f'Welcome {username} from {ip_address}'

2.5.模板引擎

在引言部分的小工具应用中,你看到的页面即是通过模板引擎进行的渲染。Flask框架集成了Jinja2实现动态渲染。

创建templates目录,存放html模板文件

image.png

dashboard.html

<!DOCTYPE html>
<html>
<body>
    <h1>{{ username }}'s Dashboard</h1>
    {% if notifications > 0 %}
        <div class="alert">新通知数量: {{ notifications }}</div>
    {% endif %}
</body>
</html>

增加模板渲染路由

image.png

访问:http://127.0.0.1:5000/dashboard

image.png

2.6.常用扩展插件

实践应用中,我们可以根据应用需求选择Flask不同的插件集成。它提供了一下常用常见

image.png

最后我的文章起到抛砖引玉作用,更详细内容,我还是推荐你去看一看官方文档:dormousehole.readthedocs.io/en/latest/