Django在使用AJAX获取数据时出现HTTP500错误



下面是我的views.py函数,它接收来自用户的客户密钥作为AJAX输入,检查数据库并返回客户名称。

def bill(request):
if request.method == 'POST':
    customerkey = request.POST.get('customer_code')
    response_data['name'] = Customer.object.name(customer_key=customerkey)
    json = json.dumps(response_data)
    return HttpResponse(json, mimetype='application/json')
return render(request, 'bill/invoicing.html')

以下是模型中的模型。py:

class Customer (models.Model):
name=models.CharField(max_length=300, unique=True)
zone=models.ForeignKey(Zone,related_name='customer_zone', verbose_name='Zone')
slug=models.SlugField(max_length=300)
customer_key=models.CharField(max_length = 10, unique=True)
address=models.TextField(unique=True)
phone_no=models.TextField
details=models.TextField(blank=True)
object = models.Manager()
def get_absolute_url(self):
    return reverse('billbrain:master_detail', kwargs={'detail':self.slug})

def save(self, *args, **kwargs):
    if not self.id:
        self.slug=slugify(self.name)
    super(Customer, self).save(*args, **kwargs)

class Meta:
    ordering = ('name',)

def __str__(self):
    return self.name

然而,在AJAX调用之后,我得到了一个HTTP500错误。

我不知道为什么。有人能详细说明一下吗。

为了您的进一步需要,下面是对django视图的AJAX调用。

(function() {
    console.log("AJAX about to start") // sanity check
    $.ajax({
        url : "", 
        type : "POST", 
        data : { customer_code: input,
                 'csrfmiddlewaretoken': csrf_token}, // data sent with the post request
                // handle a successful response
        success : function(json) {
            console.log(json); // log the returned json to the console
            console.log("success"); // another sanity check
        },
        });
}());

编辑1

以下是控制台中显示的错误:

POST http://localhost:8000/master/sellbill/ 500 (INTERNAL SERVER ERROR)
send @ jquery.min.js:4
n.extend.ajax @ jquery.min.js:4
(anonymous function) @ script.js:260
(anonymous function) @ script.js:277
n.event.dispatch @ jquery.min.js:3
r.handle @ jquery.min.js:3

匿名函数是ajax函数,我在上面复制了它

更新

以下是在我放入客户数据并启动AJAX调用之后的回溯:

UnboundLocalError at /master/sellbill/
local variable 'json' referenced before assignment
Request Method: POST
Request URL: http://localhost:8000/master/sellbill/
Django Version: 1.8.6
Python Executable: C:UsersGanguly          PCDesktopDjangoStudymy_envScriptspython.exe
Python Version: 3.5.1
Python Path: ['C:\Users\Ganguly PC\Desktop\DjangoStudy\billinv',  'C:\Users\Ganguly PC\Desktop\DjangoStudy\my_env\lib\site-packages\pytz- 2015.7-py3.5.egg', 'C:\Users\Ganguly  PC\Desktop\DjangoStudy\my_env\Scripts\python35.zip', 'C:\Users\Ganguly  PC\Desktop\DjangoStudy\my_env\DLLs', 'C:\Users\Ganguly PC\Desktop\DjangoStudy\my_env\lib', 'C:\Users\Ganguly PC\Desktop\DjangoStudy\my_env\Scripts', 'c:\python35-32\Lib',  'c:\python35-32\DLLs', 'C:\Users\Ganguly PC\Desktop\DjangoStudy\my_env', 'C:\Users\Ganguly PC\Desktop\DjangoStudy\my_env\lib\site-packages']
Server time: Sun, 3 Apr 2016 10:11:43 +0000
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'billbrain',
 'bootstrap_themes')
 Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')
Traceback:
File "C:UsersGanguly PCDesktopDjangoStudymy_envlibsite-packagesdjangocorehandlersbase.py" in get_response
132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UsersGanguly PCDesktopDjangoStudybillinvbillbrainviews.py" in  bill
118.        json = json.dumps(response_data)
Exception Type: UnboundLocalError at /master/sellbill/
Exception Value: local variable 'json' referenced before assignment
Request information:
GET: No GET data
POST:
customer_code = 'FR'
csrfmiddlewaretoken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
FILES: No FILES data
COOKIES:
csrftoken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
toShowIxigo = '1'

由于以下行,您的代码无法正常工作:

response_data['name'] = Customer.objects.name(customer_key=customerkey)

应该是这样的:

response_data['name'] = Customer.objects.get(customer_key=customerkey).name

如果找不到对象,我建议捕获异常,以避免进一步的错误。

try:
    customer = Customer.objects.get(customer_key=customerkey)
    response_data['name'] = customer.name
except Customer.DoesNotExists:
    show_error_response()

更新:我刚刚注意到,您还没有定义response_data dict,而是直接为"name"键赋值。你应该在填充它之前定义它。

response_data = {}
response_data['name'] = Customer.objects.name(customer_key=customerkey)

最新更新