当前位置: 首页 > news >正文

快速搭建一个一元二次方程flask应用

新建flask_service目录、templates子目录

flask_service
—— app.py
—— templates
—— —— index.html

app.py

from flask import Flask, request, jsonify, render_template
import random
import matplotlib.pyplot as plt
from io import BytesIO
import base64app = Flask(__name__)def generate_points(a, b, c, start_x, start_y, end_x, end_y, error_range_x, error_range_y, num_points):points = []step = 0.1  # 步长,可以根据需要调整count = 0while count < num_points:x = random.uniform(start_x, end_x)y_actual = a * x**2 + b * x + c# 在实际值附近加入一定的误差x_generated = x + random.uniform(-error_range_x, error_range_x)y_generated = y_actual + random.uniform(-error_range_y, error_range_y)# 确保生成的点在范围内if start_x <= x_generated <= end_x and start_y <= y_generated <= end_y:points.append((x_generated, y_generated))count += 1return points@app.route('/', methods=['GET', 'POST'])
def index():if request.method == 'POST':a = float(request.form['a'])b = float(request.form['b'])c = float(request.form['c'])start_x = float(request.form['start_x'])start_y = float(request.form['start_y'])end_x = float(request.form['end_x'])end_y = float(request.form['end_y'])error_range_x = float(request.form['error_range_x'])error_range_y = float(request.form['error_range_y'])num_points = int(request.form['num_points'])points = generate_points(a, b, c, start_x, start_y, end_x, end_y, error_range_x, error_range_y, num_points)x_values = [point[0] for point in points]y_values = [point[1] for point in points]plt.figure(figsize=(8, 6))plt.scatter(x_values, y_values, color='blue')plt.xlabel('X')plt.ylabel('Y')plt.title('Scatter Plot of Generated Points')plt.axhline(0, color='black', linewidth=0.5)plt.axvline(0, color='black', linewidth=0.5)plt.grid(True)plt.legend()# Convert plot to base64 stringimg_data = BytesIO()plt.savefig(img_data, format='png')img_data.seek(0)img_base64 = base64.b64encode(img_data.getvalue()).decode()plt.close()# 准备要传递给模板的数据info = {'img_base64': img_base64,'points': points,'a': a,'b': b,'c': c,'start_x': start_x,'start_y': start_y,'end_x': end_x,'end_y': end_y,'error_range_x': error_range_x,'error_range_y': error_range_y,'num_points': num_points}# 按照 x 轴从小到大排序points.sort(key=lambda point: point[0])return render_template('index.html', info=info, points=points)return render_template('index.html')if __name__ == '__main__':app.run(host='0.0.0.0', port=5000, debug=True)

index.html

<!DOCTYPE html>
<html>
<head><title>Generate Points</title><style>.container {display: flex;flex-direction: row;align-items: flex-start;justify-content: space-between;}.form-container {width: 50%;margin-right: 20px;}.image-container {width: 50%; /* 调整图形容器宽度 */margin: 0 auto; /* 居中显示图形容器 */}        img {max-width: 100%;height: auto;}</style>
</head>
<body><h1>Generate Points</h1><div class="container"><div class="form-container"><form method="POST"><label for="a">二次项系数 a:</label><input type="text" id="a" name="a" value="0"><br><br><label for="b">一次项系数 b:</label><input type="text" id="b" name="b" value="-2"><br><br><label for="c">常数项系数 c:</label><input type="text" id="c" name="c" value="1"><br><br><label for="start_x">起始 x:</label><input type="text" id="start_x" name="start_x" value="-5"><br><br><label for="start_y">起始 y:</label><input type="text" id="start_y" name="start_y" value="-5"><br><br><label for="end_x">结束 x:</label><input type="text" id="end_x" name="end_x" value="5"><br><br><label for="end_y">结束 y:</label><input type="text" id="end_y" name="end_y" value="5"><br><br><label for="error_range_x">x轴方向的误差范围:</label><input type="text" id="error_range_x" name="error_range_x" step="0.1" value="0.2"><br><br><label for="error_range_y">y轴方向的误差范围:</label><input type="text" id="error_range_y" name="error_range_y" step="0.1" value="0.5"><br><br><label for="num_points">生成的点的个数:</label><input type="text" id="num_points" name="num_points" value="50"><br><br><input type="submit" value="生成图形"></form>{% if info %}<h2>图片信息:</h2><p>二次项系数 a: {{ info['a'] }}</p><p>一次项系数 b: {{ info['b'] }}</p><p>常数项系数 c: {{ info['c'] }}</p><p>起始 x: {{ info['start_x'] }}</p><p>起始 y: {{ info['start_y'] }}</p><p>结束 x: {{ info['end_x'] }}</p><p>结束 y: {{ info['end_y'] }}</p><p>x轴方向的误差范围: {{ info['error_range_x'] }}</p><p>y轴方向的误差范围: {{ info['error_range_y'] }}</p><p>生成的点的个数: {{ info['num_points'] }}</p><h2>点的坐标:</h2><ul>{% for point in points %}<li>{{ point[0] }}, {{ point[1] }}</li>{% endfor %}</ul>{% endif %}</div><div class="image-container">{% if info %}<img src="data:image/png;base64,{{ info['img_base64'] }}" alt="Generated Plot">{% endif %}</div></div>
</body>
</html>

nohup 后台启动

[root@hecs-334217 flask_service]# nohup python3 app.py  > app.log 2>&1 &
[3] 7178

页面效果

在这里插入图片描述
点击生成图形
在这里插入图片描述

http://www.lryc.cn/news/321422.html

相关文章:

  • O2OA红头文件流转与O2OA版式公文编辑器基本使用
  • 软件测试:C++ Google Test单元测试框架GTest
  • 大数据面试题 —— HBase
  • SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测
  • SpringMVC的执行原理
  • Qt + HTTP 线程交互类封装
  • GitHub Copilot+ESP开发实战-串口
  • C# 使用ffmpeg将图片保存为mp4视频
  • Java安全技术及代码审计技巧
  • C# 使用OpenCvSharp4将Bitmap合成为MP4视频的环境
  • [游戏开发][Unity] 导出Xcode工程,完成调试与发布
  • JSONP 实现跨域请求案例
  • 2024年智慧城市、人文发展与区域经济国际会议(ICSCCDRE 2024)
  • 目标检测——PP-YOLO算法解读
  • 多特征变量序列预测(11) 基于Pytorch的TCN-GRU预测模型
  • Lvs+keepalived+nginx搭建高可用负载均衡集群
  • WPF —— 控件模版和数据模版
  • 如何动态修改spring中定时任务的调度策略(1)
  • idea import的maven类报红
  • React——class组件中setState修改state
  • 搭建基于 Snowflake 的 CI/CD 最佳实践!
  • 数据结构(五)——树的基本概念
  • 2.28CACHE,虚拟存储器
  • 深入理解栈和队列(一):栈
  • electron-builder 打包问题,下载慢解决方案
  • (简单成功)Mac:命令设置别名
  • Grok-1:参数量最大的开源大语言模型
  • Python 自然语言处理库之stanza使用详解
  • 计算机网络:数据交换方式
  • 万用表革新升级,WT588F02BP-14S语音芯片助力智能测量新体验v