用django和matplotlib 实现在网页输入数据跳转到绘制图,写出具体代码和配置
时间: 2023-06-09 18:03:53 浏览: 58
好的,以下是示例代码和配置:
1. 首先,在Django中创建一个项目和应用:
python manage.py startproject myproject
python manage.py startapp myapp
2. 在myapp中创建一个视图函数,用于处理输入数据并生成图表:
# myapp/views.py
from django.shortcuts import render
import matplotlib.pyplot as plt
from io import BytesIO
import base64
def plot(request):
if request.method == 'POST':
# 获取表单数据
x_data = request.POST['x_data']
y_data = request.POST['y_data']
# 处理数据,生成图表
fig, ax = plt.subplots()
ax.plot(x_data, y_data)
# 将图表转换为字节流,以便在网页中显示
buffer = BytesIO()
fig.savefig(buffer, format='png')
buffer.seek(0)
img_string = base64.b64encode(buffer.getvalue()).decode()
# 将图表显示在网页中
return render(request, 'plot.html', {'img_string': img_string})
# 如果是GET请求,返回空白表单
return render(request, 'plot.html')
3. 创建一个HTML模板,用于显示表单和图表:
<!-- myapp/templates/plot.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Plotting Tool</title>
</head>
<body>
<h1>Plotting Tool</h1>
<!-- 表单 -->
<form method="post">
{% csrf_token %}
<label for="x_data">X Data:</label>
<input type="text" name="x_data"><br>
<label for="y_data">Y Data:</label>
<input type="text" name="y_data"><br>
<input type="submit" value="Plot!">
</form>
<!-- 图表 -->
{% if img_string %}
<img src="data:image/png;base64,{{ img_string }}" alt="plot">
{% endif %}
</body>
</html>
4. 在myproject中配置URL路由,将网页请求转发到myapp中的视图函数:
# myproject/urls.py
from django.urls import path
from myapp import views
urlpatterns = [
path('plot/', views.plot, name='plot'),
]
5. 最后,在设置文件中配置matplotlib,以便在Django中使用它:
# myproject/settings.py
import matplotlib
matplotlib.use('Agg') # 避免在Django运行时显示matplotlib绘图
```