Ajax POST到views.py函数

时间:2015-10-31 17:03:46

标签: jquery python ajax django

我早上花了很多时间通过几个教程并在这里阅读相关问题,但我似乎仍然无法做到这一点。我已经创建了一个简化版本,我只需要尝试了解ajax的工作原理。在一个坚果壳中:我想将两个数字传递给views.py中的一个函数。这个简单的函数将乘以这两个数字并将它们发回。这是我到目前为止所做的:

HTML:

<button type="button" onclick="mathIt()">Send Test Data</button>


{% csrf_token %}
<p id="test"> Test</p> 


<script>

function mathIt() {
  var aNumber = 5;
  var bNumber = 15;
  // alert ("Two numbers: "+aNumber+" and "+bNumber);
  $.ajax({
      method: "POST",
      url: "/multiply",
      data: {
        csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
        aNumber: aNumber,
        bNumber: bNumber,
      },
      success: function(data) {
        alert ("Congrats! You sent some data: "+data);
      },
      error: function() {
        alert ("Something went wrong");
      }
  });

  document.getElementById("test").innerHTML = result_mult;
}

</script>

urls.py

url(r'^multiply$', 'prof_pages.views.multiply'),

multiply是app prof_pages

的views.py中定义的函数

views.py

def product(a1,a2):
    return float(a1 * a2)

def multiply(request):
    if request.is_ajax():
        try:
            b1 = request.POST['aNumber']
            b2 = request.POST['bNumber']
        except KeyError:
            return HttpResponse('Error') # Incorrect Post

        result_mult = product(b1,b2)
        return HttpResponse(result_mult)
    else:
        raise Http404

当我点击按钮时会显示错误消息,我的控制台上的POST方法出现500错误。当然,网络监视器也会显示500错误

我不完全确定我的网址设置正确;如果不是我不确定在哪里可以看。

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

您的视图中未定义

#user_first_name, #user_last_name { background-color: #f2f2f2; border: none; width: 100%; padding: 10px; margin: 5px 0px 10px 0px; display: inline-block; } #user_time_zone { background-color: #f2f2f2; border: none; width: 100%; margin: 5px 0px 10px 0px; padding: 10px; border-radius: 0; } aNumber。你的意思是:

bNumber

答案 1 :(得分:0)

在对追溯进行进一步审查之后,我注意到生成500错误的问题是乘法函数没有执行。这是因为数据被作为str类型引入,我认为这是默认值。通过向request.POST调用添加正确的数据类型float,解决了问题。所以我的views.py现在看起来像这样:

http://127.0.0.1:8000/profile/multiply

我的代码的另一个更改是在urls.py中我发现完整的请求网址如下所示:

url(r'^profile/multiply$', 'prof_pages.views.multiply'),

所以我的urls.py现在看起来像这样:

#include <iostream>
#include <string>
using namespace std;

struct Box {
    int l;
    int w;
    Box();
    Box(int a, int b);
    int area();
    Box operator+(const Box a)
    {
      return Box(a.l + l, a.w + w);
    }
};


Box::Box() {
    l = 0;
    w = 0;
}

Box::Box(int a, int b) {
    l = a;
    w = b;
}


int Box::area() {
    return l * w;
}

int main() {
    Box a(1, 2);
    Box b;
    b.l = 3;
    b.w = 4;
    Box c = a + b;
    cout << "Total area is: " << a.area() << " + " << (b.area()) << " = " << (c.area()) << endl;
}

感谢所有回复的人。

此致