Django视图中的功能无故运行2次

时间:2019-03-25 09:13:30

标签: python django

我有问题,因为我找不到在 Django views.py 中有时运行两次的原因。当我转到在Django视图中调用函数create_db的URL时,该函数从目录读取json文件,对其进行解析并将数据写入数据库中。在大多数情况下,它运行良好,但有时却无故运行两次,并将相同的数据写入数据库。有人知道有时两次执行代码的原因可能是什么,我该如何解决该问题?

这是我的create_db函数:

def create_db(request):
     response_data = {}
     try:
         start = time.time()
         files = os.listdir()
         print(files)
         for filename in files:
            if filename.endswith('.json'):
                print(filename)
                with open(f'{filename.strip()}', encoding='utf-8') as f:
                    data = json.load(f)
                    for item in data["CVE_Items"]:
                        import_item(item)
        response_data['result'] = 'Success'
        response_data['message'] = 'Baza podatkov je ustvarjena.'
    except KeyError:
        response_data['result'] = 'Error'
        response_data['message'] = 'Prislo je do napake! Podatki niso bili uvozeni!'

    return HttpResponse(json.dumps(response_data), content_type='application/json')

我期望的控制台输出:

['nvdcve-1.0-2002.json', 'nvdcve-1.0-2003.json', 'nvdcve-1.0-2004.json', 'nvdcve-1.0-2005.json', 'nvdcve-1.0-2006.json', 'nvdcve-1.0-2007.json', 'nvdcve-1.0-2008.json', 'nvdcve-1.0-2009.json', 'nvdcve-1.0-2010.json', 'nvdcve-1.0-2011.json', 'nvdcve-1.0-2012.json', 'nvdcve-1.0-2013.json', 'nvdcve-1.0-2014.json', 'nvdcve-1.0-2015.json', 'nvdcve-1.0-2016.json', 'nvdcve-1.0-2017.json']
nvdcve-1.0-2002.json
nvdcve-1.0-2003.json
nvdcve-1.0-2004.json
nvdcve-1.0-2005.json
nvdcve-1.0-2006.json
nvdcve-1.0-2007.json
nvdcve-1.0-2008.json
nvdcve-1.0-2009.json
nvdcve-1.0-2010.json
nvdcve-1.0-2011.json
nvdcve-1.0-2012.json
nvdcve-1.0-2013.json
nvdcve-1.0-2014.json
nvdcve-1.0-2015.json
nvdcve-1.0-2016.json
nvdcve-1.0-2017.json

发生错误时控制台输出:

['nvdcve-1.0-2002.json', 'nvdcve-1.0-2003.json', 'nvdcve-1.0-2004.json', 'nvdcve-1.0-2005.json', 'nvdcve-1.0-2006.json', 'nvdcve-1.0-2007.json', 'nvdcve-1.0-2008.json', 'nvdcve-1.0-2009.json', 'nvdcve-1.0-2010.json', 'nvdcve-1.0-2011.json', 'nvdcve-1.0-2012.json', 'nvdcve-1.0-2013.json', 'nvdcve-1.0-2014.json', 'nvdcve-1.0-2015.json', 'nvdcve-1.0-2016.json', 'nvdcve-1.0-2017.json']
nvdcve-1.0-2002.json
['nvdcve-1.0-2002.json', 'nvdcve-1.0-2003.json', 'nvdcve-1.0-2004.json', 'nvdcve-1.0-2005.json', 'nvdcve-1.0-2006.json', 'nvdcve-1.0-2007.json', 'nvdcve-1.0-2008.json', 'nvdcve-1.0-2009.json', 'nvdcve-1.0-2010.json', 'nvdcve-1.0-2011.json', 'nvdcve-1.0-2012.json', 'nvdcve-1.0-2013.json', 'nvdcve-1.0-2014.json', 'nvdcve-1.0-2015.json', 'nvdcve-1.0-2016.json', 'nvdcve-1.0-2017.json']
nvdcve-1.0-2002.json
nvdcve-1.0-2003.json
nvdcve-1.0-2003.json
nvdcve-1.0-2004.json
nvdcve-1.0-2004.json
nvdcve-1.0-2005.json
nvdcve-1.0-2005.json
nvdcve-1.0-2006.json
nvdcve-1.0-2006.json
nvdcve-1.0-2007.json
nvdcve-1.0-2007.json
nvdcve-1.0-2008.json
nvdcve-1.0-2008.json
nvdcve-1.0-2009.json
nvdcve-1.0-2009.json
nvdcve-1.0-2010.json
nvdcve-1.0-2010.json
nvdcve-1.0-2011.json
nvdcve-1.0-2011.json
nvdcve-1.0-2012.json
nvdcve-1.0-2012.json
nvdcve-1.0-2013.json
nvdcve-1.0-2013.json
nvdcve-1.0-2014.json
nvdcve-1.0-2014.json
nvdcve-1.0-2015.json
nvdcve-1.0-2015.json
nvdcve-1.0-2016.json
nvdcve-1.0-2016.json
nvdcve-1.0-2017.json
nvdcve-1.0-2017.json

1 个答案:

答案 0 :(得分:0)

问题不在您显示给我们的代码中。为您的应用程序收到的HTTP请求启用日志记录,以确保浏览器仅向您发送一个请求。如果您看到两个请求,请确保它们使用相同的会话(也许另一个用户同时单击)。

如果来自同一用户,则可能是您两次单击按钮。可能是鼠标的硬件问题。为防止这种情况,请在第一次单击后使用JavaScript禁用该按钮。