django中存在json的内部服务器错误
我有一个表单,通过AJAX提交并上传文件。但是,尽管文件已正确上载,但javascript在上载后显示django中存在json的内部服务器错误,django,json,django-views,Django,Json,Django Views,我有一个表单,通过AJAX提交并上传文件。但是,尽管文件已正确上载,但javascript在上载后显示内部服务器错误。我知道该文件已添加到数据库并上载到服务器;除此错误消息外,一切似乎都正常工作。Django日志中似乎没有错误消息 我也没有编写处理javascript的代码,所以实际上可能有更好的方法来实现这一点,或者我忽略了一些明显的东西 错误似乎是因为这一行: response = JSONResponse(data, {}, response_mimetype(self.request))
内部服务器错误。我知道该文件已添加到数据库并上载到服务器;除此错误消息外,一切似乎都正常工作。Django日志中似乎没有错误消息
我也没有编写处理javascript的代码,所以实际上可能有更好的方法来实现这一点,或者我忽略了一些明显的东西
错误似乎是因为这一行:
response = JSONResponse(data, {}, response_mimetype(self.request))
在my views.py中:
def response_mimetype(request):
if "application/json" in request.META['HTTP_ACCEPT']:
return "application/json"
else:
return "text/plain"
class UploadedFileCreateView(CreateView):
model = UploadedFile
form_class = UploadedFileForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.project_id = self.kwargs['proj_key']
self.object.save()
f = self.request.FILES.get('file')
data = [{
'name': self.object.name(),
'url': "/uploads/xmlfiles/" + self.object.name().replace(" ", "_"),
'delete_url': reverse('fileupload:upload-delete',
kwargs={'pk':self.object.id,
'proj_key':self.kwargs['proj_key']}),
'delete_type': "DELETE"}]
# the problem line
response = JSONResponse(data, {}, response_mimetype(self.request))
response['Content-Disposition'] = 'inline; filename=files.json'
return super(UploadedFileCreateView, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(UploadedFileCreateView, self).get_context_data(**kwargs)
context['files'] = UploadedFile.objects.all()
context['proj'] = int(self.kwargs["proj_key"])
return context
class JSONResponse(HttpResponse):
"""JSON response class."""
def __init__(self,obj='',json_opts={},mimetype="application/json",*args,**kwargs):
content = simplejson.dumps(obj,**json_opts)
super(JSONResponse,self).__init__(content,mimetype,*args,**kwargs)
我原以为问题可能出在reverse
方法上,但那里一切正常。以防万一,下面是URL.py中的一行:
(r'^projects/(?P<proj_key>\d+)/d/(?P<pk>\d+)$', UploadedFileDeleteView.as_view(), {}, 'upload-delete'),
编辑:刚刚注意到控制台中的500错误,但我不确定在哪里可以找到堆栈跟踪(因为我没有看到错误模板):
您需要将JSONResponse
类的定义移动到UploadedFileCreateView
类之前;该错误发生在调用尚未定义的类之前
之所以保存该对象,是因为在调用jsonresponse
类之前已经保存了该对象:
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.project_id = self.kwargs['proj_key']
self.object.save() # object gets saved successfully here
f = self.request.FILES.get('file')
# ...
# Here, JSONResponse is not defined yet, so this is resulting in a 500
# since you have debug=False, its resulting in the default 500 error template
# from your server.
response = JSONResponse(data, {}, response_mimetype(self.request))
如果你应该在某个地方看到stacktrace,你能发布它吗?我没有收到500错误,至少我看不到任何地方(日志文件、控制台)。不,这不是问题-我仍然有同样的问题。为什么每个人都认为这是一个500的错误?我没有看到任何具体的错误消息,也不知道如何看到(内部服务器错误是javascript的输出,而不是django)。另外值得注意的是,该文件实际上已上载到服务器。事实上,你是对的-有一个500错误,但我不知道如何查看stacktrace,因为我没有看到它的模板。我将控制台日志行添加到我的OP中。
[29/Oct/2013 23:38:56] "POST /upload/projects/1/ HTTP/1.1" 500 11939
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.project_id = self.kwargs['proj_key']
self.object.save() # object gets saved successfully here
f = self.request.FILES.get('file')
# ...
# Here, JSONResponse is not defined yet, so this is resulting in a 500
# since you have debug=False, its resulting in the default 500 error template
# from your server.
response = JSONResponse(data, {}, response_mimetype(self.request))