Ajax 处理(django)web应用中的服务器错误(500)
我编写了一个web应用程序,它使用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"):
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
进行分支