如何阻止 Django 服务器继续加载?

Posted

技术标签:

【中文标题】如何阻止 Django 服务器继续加载?【英文标题】:How to stop the Django server from keep loading? 【发布时间】:2017-05-17 18:50:25 【问题描述】:

我正在获取用户输入,用户输入保存在数据库中。从数据库中获取值以显示图形。我正在使用 matplotlib 包。当服务器第一次运行时,每次显示图表都没有问题,但是当我尝试再次显示图表时,页面会一直加载。每次我必须重新启动系统以停止加载页面。我尝试通过添加 close(),clf() 方法来解决问题,但问题仍然存在。

我正在使用 Python2.7、Django 1.10.4 和 mysql

**Views.py**

def show(request):
try:
    x = []
    y = []
    con = MySQLdb.connect("localhost", "root", "", "mydb")
    c = con.cursor()
    c.execute("select * from dummy")
    row = c.fetchone()
    while row != None:
        x.append(row[0])
        y.append(row[1])
        row = c.fetchone()
    plt.plot(x, y)
    plt.title("THE GRAPH")
    a = max(y)
    a1 = min(y)
    a2 = numpy.mean(y)
    plt.xlabel("X-AXIS",color='red')
    plt.ylabel("Y -AXIS",color='red')
    plt.text(-2,1,"Max Y-Value:"+str(a),verticalalignment="top",horizontalalignment="right")
    plt.text(-2,2,"Min Y-Value:"+str(a1), verticalalignment="top", horizontalalignment="left")
    plt.text(-2,3,"Avg Y-Value:"+ str(a2), verticalalignment="top", horizontalalignment="center")
    plt.show()
    return render(request,"back.html",)

【问题讨论】:

【参考方案1】:

你不能在生产环境中使用 matplotlib 的交互式版本——这会搞砸的。只需执行以下操作:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

def graphic(request):
        #other stuff goes here
        fig=Figure()
        fig1=fig.add_subplot(1,1,1)
        fig1.plot(x,y)
        canvas=FigureCanvas(fig)
        response=HttpResponse(content_type='image/png')
        canvas.print_png(response)
        return response

这只是图表部分。要在模板中实现此图表,只需在模板中添加如下所示的行。

<img src='% url "graphic" %'>

并确保它可以在网址中找到。

【讨论】:

【参考方案2】:

您是否尝试过关闭连接和光标?即

c.close()
con.close()

正如在这篇文章中看到的: Python MySQLdb: connection.close() VS. cursor.close()

【讨论】:

以上是关于如何阻止 Django 服务器继续加载?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - 如何在等待 http 请求完成时阻止 GUI 渲染

对 Django 服务器 CORS 的获取请求仅阻止一个视图

当应用程序在android上关闭时如何阻止重新启动服务?

捕获“阻止加载混合活动内容”CORS 错误

PyDev 和 Django:如何重启开发服务器?

如何在 Apache 中阻止特定的用户代理