如何使用javascript在脚本文件或views.py中运行python函数以避免加载页面
我有一个Django页面,它有一个表单,该表单有一个按钮,可以调用views.py中的函数,但是我想通过运行python脚本函数(在views.py中,或者我可以在另一个文件中分离该函数)来验证表单的一些输入文本,但我不想加载该页面。在哪里以及如何生成js代码来运行此函数 为视图函数创建一个新的url,该函数将验证输入如何使用javascript在脚本文件或views.py中运行python函数以避免加载页面,javascript,python,django,django-forms,Javascript,Python,Django,Django Forms,我有一个Django页面,它有一个表单,该表单有一个按钮,可以调用views.py中的函数,但是我想通过运行python脚本函数(在views.py中,或者我可以在另一个文件中分离该函数)来验证表单的一些输入文本,但我不想加载该页面。在哪里以及如何生成js代码来运行此函数 为视图函数创建一个新的url,该函数将验证输入 path('ajax/validate_input/', views.ValidateInput.as_view(), name='my_ajax_url'), 在views.
path('ajax/validate_input/', views.ValidateInput.as_view(), name='my_ajax_url'),
在views.py
中进行验证,然后返回JsonResponse
from django.views import View
from django.http import JsonResponse
class ValidateInput(View):
def post(self, request):
# Do validation
return JsonResponse({
'valid': True,
'message': 'Invalid Characters',
})
现在,在模板中编写js代码,向该url发出ajax请求
根据收到的响应,使用js对网页进行更改,以确保ajax的成功
// add jQuery
// put the code below inside an event handle, maybe on input change
$.ajax({
url: {% url 'my_ajax_url' %},
method: 'POST',
data: {
body: body,
csrfmiddlewaretoken: '{{ csrf_token }}'
},
dataType: 'json',
success: function(data){
console.log(data.valid);
console.log(data.message);
// do stuff to change your webpage here
}
});
我建议在输入更改时验证输入,但如果您想从提交中验证输入,请为表单提交添加一个事件处理程序。这里使用
event.preventDeafault
阻止表单提交,然后执行ajax操作,并根据收到的json执行其他操作。如果valid=true
则继续,或者如果valid=false
则在输入框下方显示以json接收的消息。您可以在专用Python视图中呈现表单,并通过Javascript中的Ajax调用它
在此视图中,您应该:
- 创建表单
- 将其渲染为字符串
- 将呈现形式返回为json
import json
from django.http import HttpResponse
from django.template.loader import render_to_string
def my_view(request):
if request.method == "GET":
form = MyForm()
elif request.method == "POST":
form = MyForm(data=request.POST)
form_context = {'form': form}
form_html = render_to_string('form.html', form_context)
json_response = json.dumps(form_html, separators=(',', ':'))
return HttpResponse(json_response)
在Javascript端,通过GET(使用JQuery.getJSON):
并通过POST在Javascript端(使用JQuery.POST):
您可以查看、、文档页面以了解更多信息
$.getJSON('/url/path/to/my-view',
function(data) {
var form_html = decodeURIComponent(data.form);
$("form#my-form-css-selector").html(form_html);
});
$.post('/url/path/to/my-view',
$("form#my-form-css-selector").serialize(),
function(data) {
var form_html = decodeURIComponent(data.form);
$("form#my-form-css-selector").html(form_html);
},
"json"
);