Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 处理(django)web应用中的服务器错误(500)_Ajax_Django_Error Handling - Fatal编程技术网

Ajax 处理(django)web应用中的服务器错误(500)

Ajax 处理(django)web应用中的服务器错误(500),ajax,django,error-handling,Ajax,Django,Error Handling,我编写了一个web应用程序,它使用ajax和django。它解析一个文件,从文件中收集一些数据,然后向用户展示处理数据的结果 如果文件不是预期的格式,解析和数据处理将失败,程序将告诉用户无法处理文件 我试过这样做 def process_file(request): success = False return_dict = {} ... if (request.is_ajax()) and(request.method == "POST"):

我编写了一个web应用程序,它使用
ajax
django
。它解析一个文件,从文件中收集一些数据,然后向用户展示处理数据的结果

如果文件不是预期的格式,解析和数据处理将失败,程序将告诉用户无法处理文件

我试过这样做

def process_file(request):
    success = False
    return_dict = {}    
    ...
    if (request.is_ajax()) and(request.method == "POST"):
        filename = request.POST['filename']
        ...
        data = parse_file(filename)
        results = process_data(data)
        success = True
        return_dict = {'result':results}
     serialized = json.dumps(return_dict)
     if success == True:
         return HttpResponse(serialized,mimetype="application/json")
     else:
        return HttpResponseServerError(serialized, mimetype="application/json")
javascript
中,我有一个函数检查
ajax查询的状态。如果
状态不是“成功”
,它会显示一条错误消息

当我使用django服务器时,即使django视图中有500个错误,这也能正常工作。服务器控制台显示500个错误,但仍能正常运行。我想知道如果它部署在生产环境中,是否会出现这种情况


在django视图中是否有更好的方法来处理运行时错误?你们有什么建议?

这里的问题是,你们没有真正对错误做出反应。只要请求是通过AJAX作为POST发送的,
success
总是
True
。这并没有告诉你文件是否可以被解析,或者说,即使一个文件被上传了

首先也是最重要的一点,您的代码当前总是会失败(500错误),因为没有
请求;它应该是
request.POST

其次,任何时候需要从
request.POST
中提取一个值时,都应该始终使用
dict.get
,即:

filename = request.POST.get('filename')
如果在POST数据中找不到该字段,
filename
将等于
None
。因此,您应该对此进行分支,仅当
filename
不是
None
时才继续执行其余代码,例如:

if filename is None:
    return HttpResponseBadRequest()
else:
    # the rest of your code
第三,我假设
filename
是带有
type=“file”
的输入。如果是这样的话,它实际上不会存在于
request.POST
中。所有文件上传进入
request.FILES
。上述注释同样适用于:

filename = request.FILES.get('filename')
if filename is None:
    return HttpResponseBadRequest()
else:
    # the rest of your code
第四,
parse_file
process_data
似乎都是您创建的专有方法,因此不可能在这方面给您太多帮助。但请记住,在执行任何可能失败的操作时,都要明智地使用
try…除了
块,例如从文件中读取数据,或以假定的格式解析该数据,而该格式实际上并不存在

您的
parse_文件
process_数据
方法应该捕获所有可能的异常。然后,它们可以向上传播它们,在它们所在的位置引发另一个自定义异常,或者只是静静地失败,返回类似
None
的内容。然后由您的视图做出相应的响应,捕捉异常或根据返回值是否为
None
进行分支