from sanic import Sanic
from sanic import response
import jinja2_sanic
import jinja2
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import io
import base64
import numpy as np
import asyncio
app = Sanic("sanic_jinja2_render")
template="<html><head></head><body><h1>{{graph_title}}</h1>" \
"<div><img src='{{graph}}'> </div></body></html>"
jinja2_sanic.setup(
app,
loader=jinja2.DictLoader(
{
"templates.jinja2": template
}
)
)
@app.route("/")
async def func(request):
return response.html("# /point_num で散布図を作成")
def draw_graph(point_num):
img = io.BytesIO()
x = np.random.rand(point_num)
y = np.random.rand(point_num)
plt.scatter(x, y)
plt.savefig(img, format='png')
plt.close()
img.seek(0)
plot_url = base64.b64encode(img.getvalue()).decode()
graph = 'data:image/png;base64,{}'.format(plot_url)
return graph
@app.route('/<number>')
@jinja2_sanic.template("templates.jinja2")
async def show_user_network(request, number):
graph = draw_graph(int(number))
return {
"graph_title": number,
"graph": graph,
}
if __name__ == "__main__":
loop = asyncio.get_event_loop()
app.run(host="127.0.0.1", port=8000, debug=True)
try:
loop.run_forever()
except:
loop.stop()