Django视图中的函数无理由运行了2次

2024-10-03 09:08:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有问题,因为我找不到我在Django的函数的原因视图.py有时运行两次。当我转到url,它在Django视图中调用函数create\ db,函数从目录中读取json文件,解析它并将数据写入数据库。大多数情况下,它工作得很好,但有时却无缘无故地运行两次并在数据库中写入相同的数据。有人知道为什么代码有时会被执行两次,我该如何解决这个问题吗?你知道吗

下面是我的create\u 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

Tags: 数据django函数视图数据库jsondbdata
1条回答
网友
1楼 · 发布于 2024-10-03 09:08:59

问题不在你给我们看的代码里。为应用程序接收的HTTP请求启用日志记录,以确保浏览器只向您发送一个请求。如果您看到两个请求,请确保它们使用相同的会话(可能另一个用户正在同时单击)。你知道吗

如果它来自同一个用户,可能你点击了两次按钮。可能是鼠标的硬件问题。要防止这种情况,请在第一次单击后使用JavaScript禁用按钮。你知道吗

相关问题 更多 >