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