生活, 其他记录

Flask的入门例子

这是之前的一篇:Django的学习例子。Flask 和 Django 是两个流行的 Python Web 框架。和 Django 相比,Flask 简单很多,接近于写 HTML,又有使用 Python 输出动态内容的功能,适合开发超小型的网页项目。本篇给出 Flask 的几个简单例子,作为学习和记录。更多功能可以参考Flask官网:https://flask.palletsprojects.com

一、Flask 的 Hello World 例子

from flask import Flask

app = Flask(__name__) # 创建Flask应用程序实例。将__name__作为参数传递给 Flask 类的构造函数,可以告诉Flask应用程序在哪里寻找静态文件夹、模板文件夹等相关资源。

@app.route('/') # 定义一个路由,将根URL('/')与hello()函数关联起来
def hello():
    return 'Hello World!'

if __name__ == '__main__': # 运行应用程序
    app.run(debug=True)  # 增加debug=True,可以实现自动重载,Flask会监视代码是否更改

如果需要公网访问,或指定端口,使用命令:app.run(host='0.0.0.0', port=1234, debug=True)

二、Flask 调用 HTML 的例子

文件目录结构:

  • my_flask_app
    • flask_app.py
    • templates
      • index.html
      • about.html

flask_app.py 文件:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/about')
def about():
    name = 'Guan'
    return render_template('about.html', name=name)

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

index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Home</title>
</head>
<body>
    <h1>Welcome to My Homepage!</h1>
    <p><a href="/about">About</a></p>
</body>
</html>

about.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>About</title>
</head>
<body>
    <h1>About Me</h1>
    <p>This is the about page content. My name is {{name}}.</p>  
    <p><a href="/">Home</a></p>
    <!-- Flask使用的是Jinja2模板引擎。Jinja2使用 {{ 和 }} 来标识变量/动态内容。 -->
</body>
</html>

三、使用 Flask 创建 API(直接返回)

服务器端代码:

from flask import Flask, request

app = Flask(__name__)

def get_response(user_input):
    response = f"你说了'{user_input}',我想了想。"
    return response

@app.route('/', methods=['POST'])
def API_server():
    try:
        data = request.get_json()  # 从请求的 JSON 数据中获取用户输入
        user_input = data.get('prompt', '')  # 获取 'prompt' 字段
    except Exception as e:
        return '请求错误!请联系 API 管理员。'  # 如果解析失败,则返回错误信息
    if not user_input:
        return "请求错误!请联系 API 管理员。"  # 如果没有输入,则返回错误
    ai_response = get_response(user_input)
    return ai_response

if __name__ == '__main__':
    app.run(debug=True, threaded=True, port=123)

用户端代码:

import requests

url = "http://localhost:123"  # API 地址
data = {
    "prompt": "Hello, how are you?"  # 请求数据,prompt 为用户输入
} 
response = requests.post(url, json=data)  # 发送 POST 请求,传递 JSON 数据
if response.status_code == 200:  # 检查响应是否成功
    print(response.text)  # 直接获取并打印返回的完整响应
else:
    print(f"请求失败,状态码: {response.status_code}")

四、使用 Flask 创建 API(流式返回)

服务器端代码:

from flask import Flask, Response, request

app = Flask(__name__)

def get_response(user_input):
    import time
    ai_response = f"你说了'{user_input}',我想了想。"
    for char in ai_response:
        yield f"{char}\n\n"
        time.sleep(0.2)

@app.route('/', methods=['POST'])
def API_server():
    try:
        data = request.get_json() # 从请求的 JSON 数据中获取用户输入
        user_input = data.get('prompt', '')  # 获取 'prompt' 字段
    except Exception as e:
        return '请求错误!请联系 API 管理员。' # 如果解析失败,则返回错误信息
    if not user_input:
        return "请求错误!请联系 API 管理员。" # 如果没有输入,则返回错误
    return Response(get_response(user_input), content_type='text/event-stream') # 返回流式响应

if __name__ == '__main__':
    app.run(debug=True, threaded=True, port=123)

用户端代码:

import requests

url = "http://localhost:123" # API 地址
data = {
    "prompt": "Hello, how are you?"   # 请求数据,prompt 为用户输入
} 
response = requests.post(url, json=data, stream=True)  # 发送 POST 请求,传递 JSON 数据并启用流式响应
if response.status_code == 200: # 检查响应是否成功
    for line in response.iter_lines(): # 逐步读取并打印流式响应
        if line:
            print(line.decode('utf-8'), end='', flush=True) # 解码并打印每一行流式返回的数据
else:
    print(f"请求失败,状态码: {response.status_code}")
336 次浏览

【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code