Javascript 单击按钮并在django中使用JS/ajax从views.py运行python函数
这几天我一直在读关于当我按下按钮时如何调用Javascript 单击按钮并在django中使用JS/ajax从views.py运行python函数,javascript,python,django,ajax,Javascript,Python,Django,Ajax,这几天我一直在读关于当我按下按钮时如何调用python函数,我非常困惑。我看到的一件事是,我必须使用ajax,而大多数人都使用jquery来实现这一点 如果我理解正确,结构必须与此相似 $(document).ready(function() { $.ajax({ url: '', type: '', data: {'A':0}, dataType:'', success: function(resp){
python函数
,我非常困惑。我看到的一件事是,我必须使用ajax
,而大多数人都使用jquery
来实现这一点
如果我理解正确,结构必须与此相似
$(document).ready(function() {
$.ajax({
url: '',
type: '',
data: {'A':0},
dataType:'',
success: function(resp){
console.log(resp);
}
});
});
有了这些信息,我的最终代码是
视图.py
def vista_sumar(request):
if request.method == 'POST':
a = request.POST['a']
b = request.POST['b']
c = int(a) + int(b)
ctx = {'Result':c}
return render(request,'main.html',ctx)
from project.views import vista_sumar
urlpatterns = [
path('prueba/',vista_sumar),
]
url.py
def vista_sumar(request):
if request.method == 'POST':
a = request.POST['a']
b = request.POST['b']
c = int(a) + int(b)
ctx = {'Result':c}
return render(request,'main.html',ctx)
from project.views import vista_sumar
urlpatterns = [
path('prueba/',vista_sumar),
]
main.html
<input type="button" value="PRUEBA" class="boton">
<script src="{% static '/js/jquery-3.4.1.min.js' %}"></script>
<script type="text/javascript" src="{% static '/js/filters.js' %}"></script>
我知道按钮正在工作,因为第一个警报正在工作。问题是当我使用ajax
时
代码错误为403=Forbbiden,在ajax.send()中失败
有人能帮我吗
编辑
在@epikstar的帮助下,我解决了一件事,我忘记了CSRF
。我在我的js文件中添加了
$('#prueba').click(function() {
alert('boton pulsado');
var csrftoken = $("[name=csrfmiddlewaretoken]").val();
alert(csrftoken)
a =1;
b =3;
$.ajax({
url: '/../../prueba/',
type: 'POST',
headers:{"X-CSRFToken": csrftoken},
data: {
'a': a,
'b': b,
},
dataType: "json",
cache: true,
success: function(response) {
alert('succes')
alert(response.Result);
}
});
alert('fin')
});
我在我的视图中导入了.py
from django.template.context_processors import csrf
我在我的main.html
<input type="button" value="PRUEBA" id="prueba">{% csrf_token %}
它打印4
但是我添加了一个console.log(response)代码>和控制台.log(响应.结果)代码>在成功
中,不返回任何内容
非常感谢。您应该像这样添加CSRF令牌:
var csrftoken = $("[name=csrfmiddlewaretoken]").val();
//example ajax
$.ajax({
url: url,
type: 'POST',
headers:{
"X-CSRFToken": csrftoken
},
data: data,
cache: true,
});
也可以直接从django变量添加:
$.ajax({
type: 'POST',
headers:{
"X-CSRFToken": '{{ csrf_token }}'
}
})
查看此处以了解csrf令牌的作用:首先,您试图访问响应.Result
,这是不可能的,因为您正在从函数返回html视图。要么从函数返回json
响应,要么创建另一个返回json
响应的函数。第二,您的url
在ajax请求中不正确,它不是文件位置,可能应该是/prueba
。如果您只更正url
并提醒响应
,您应该能够在警报中看到html响应。对于这个愚蠢的问题,很抱歉,但是您能否帮助更正响应
?我不知道该怎么做:(当我删除斜杠时,会出现以下错误:RuntimeError:您通过POST调用了此URL,但URL没有以斜杠结尾,并且您设置了APPEND_斜杠。Django在维护POST数据时无法重定向到斜杠URL。请将表单更改为指向127.0.0.1:8000/prueba/(注意后面的斜杠),或在Django设置中设置APPEND_SLASH=False。
我看到了此信息,但我认为我不需要它,因为我没有使用表单。
。尽管如此,我还是在代码中添加了您的第一个脚本,错误是相同的。可能是个愚蠢的问题,但我不知道如何解决。您正在撰写帖子,因此需要CSRF。是否导入了它?但它确实存在有必要吗?因为我正在使用render
。好的,我从django.template.context\u处理器导入csrf
,并在我的输入之后添加了这一行{%csrf\u token%}
如手册所述。但是在成功中没有显示警报
那么我在传递或恢复变量时又犯了一个错误…:(使用console.log进入success函数以确保它传入