数据未使用jquery发送到Django视图

时间:2016-04-12 11:51:45

标签: jquery python django

我尝试使用Ajax发送数据,但变量input_text,rotate总是采用我默认拥有的值(input_text ='',rotate = 0)。 如果使用了request.POST [' text'],那么我收到错误500. request.POST为空 异常类型:/ encrypt处的MultiValueDictKeyError 例外价值:"' text'" views.py:

def encrypt(request):
    input_text = request.POST.get('text','')
    rotate = request.POST.get('rotate', 0)
    output_text = models.encode(input_text, rotate)
    frequency = models.get_frequency(input_text)
    key = models.get_key(input_text)
    data = {'input_text': input_text, 'rotate': rotate, 'output_text': output_text, 'frequency': frequency, 'key': key}
    return HttpResponse(json.dumps(data))

home.html的:

$("#encrypt").click(function () {
       var postData = {
           text: $("#input-box").val(),
           rotate: $("#rotate").val()
       };
        $.ajax({
            url: "encrypt",
            type: "POST",
            data: postData,
            dataType: "json",
            contentType: "application/json",
            success: function(data) {
                console.log(data);
                $("#input-box").val(data.input_text);
            },
            error : function(xhr,errmsg,err) {
             console.log(xhr.status + ": " + xhr.responseText);
            }
        });
        return false;
    });

console request.POST [' text']:

500: MultiValueDictKeyError at /encrypt
"'text'"

Request Method: POST
Request URL: http://127.0.0.1:8000/encrypt
Django Version: 1.9.5
Python Executable: C:\Program Files (x86)\Python35-32\python.exe
Python Version: 3.5.1
Python Path: ['C:\\Users\\Влад\\PycharmProjects\\CezarProject', 'C:\\Users\\Влад\\PycharmProjects\\CezarProject', 'C:\\Program Files (x86)\\Python35-32\\python35.zip', 'C:\\Program Files (x86)\\Python35-32\\DLLs', 'C:\\Program Files (x86)\\Python35-32\\lib', 'C:\\Program Files (x86)\\Python35-32', 'C:\\Program Files (x86)\\Python35-32\\lib\\site-packages']
Server time: Tue, 12 Apr 2016 15:17:12 +0300
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'caesar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 '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']


Traceback:  

File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\utils\datastructures.py" in __getitem__
  83.             list_ = super(MultiValueDict, self).__getitem__(key)


      During handling of the above exception ('text'), another exception occurred:



File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handlers\base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Влад\PycharmProjects\CezarProject\caesar\views.py" in encrypt
  12.     input_text = request.POST['text']

File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\utils\datastructures.py" in __getitem__
  85.             raise MultiValueDictKeyError(repr(key))

Exception Type: MultiValueDictKeyError at /encrypt
Exception Value: "'text'"
Request information:
GET: No GET data

POST: No POST data

FILES: No FILES data

console request if.POST.get(' text'):

500: TypeError at /encrypt
'NoneType' object is not iterable

Request Method: POST
Request URL: http://127.0.0.1:8000/encrypt
Django Version: 1.9.5
Python Executable: C:\Program Files (x86)\Python35-32\python.exe
Python Version: 3.5.1
Python Path: ['C:\\Users\\Влад\\PycharmProjects\\CezarProject', 'C:\\Users\\Влад\\PycharmProjects\\CezarProject', 'C:\\Program Files (x86)\\Python35-32\\python35.zip', 'C:\\Program Files (x86)\\Python35-32\\DLLs', 'C:\\Program Files (x86)\\Python35-32\\lib', 'C:\\Program Files (x86)\\Python35-32', 'C:\\Program Files (x86)\\Python35-32\\lib\\site-packages']
Server time: Tue, 12 Apr 2016 15:18:28 +0300
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'caesar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 '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']


Traceback:  

File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handlers\base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Program Files (x86)\Python35-32\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Влад\PycharmProjects\CezarProject\caesar\views.py" in encrypt
  14.     output_text = models.encode(input_text, rotate)

File "C:\Users\Влад\PycharmProjects\CezarProject\caesar\models.py" in encode
  14.     for char in input_text:

Exception Type: TypeError at /encrypt
Exception Value: 'NoneType' object is not iterable
Request information:
GET: No GET data

POST: No POST data

FILES: No FILES data

1 个答案:

答案 0 :(得分:2)

您忘记在Json的键中包含双引号(“)

使用Json in Javascript

的正确语法
var postData = {
           "text": $("#input-box").val(),
           "rotate": $("#rotate").val()
       };