form_valid_json()
函数是Django框架提供的一个表单验证函数,用于在表单提交时验证表单数据,处理表单数据并返回JSON格式的数据。它通常被用于Ajax表单提交中。下面是form_valid_json()
函数的具体作用和使用方法的攻略。
作用
form_valid_json()
函数的主要作用包括:
-
验证表单数据:在表单提交时,该函数会自动进行表单数据的验证。
-
处理表单数据:当表单数据验证成功后,该函数会自动处理表单数据。
-
返回JSON格式数据:最后,该函数会将处理后的数据以JSON格式返回,在前端完美呈现Ajax表单提交的数据。
使用方法
现在,我们来详细介绍form_valid_json()
函数的使用方法:
- 定义View类
在views.py中定义View类,该类继承自Django框架的FormView类,并重写form_valid()
方法。
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from .forms import ContactForm
from django.http import JsonResponse
class ContactFormView(FormView):
form_class = ContactForm
template_name = 'contact.html'
success_url = reverse_lazy('success') # 成功提交表单后重定向的页面
def form_valid(self, form):
data = form.cleaned_data
# 将data处理成字典类型,然后以JSON格式返回
return JsonResponse({'success': True, 'data': data})
- 自定义
form_valid_json()
函数
class ContactFormView(FormView):
form_class = ContactForm
template_name = 'contact.html'
success_url = reverse_lazy('success')
def form_valid(self, form):
data = form.cleaned_data # 获取表单数据
# 处理表单数据并构造JSON格式数据
return self.form_valid_json(form, {'success': True, 'data': data})
def form_valid_json(self, form, data):
"""
处理表单数据并返回JSON格式数据
"""
return JsonResponse(data)
- 在HTML中添加JS代码
在HTML文件中通过Ajax提交表单,并接收后端返回的JSON格式数据。
$(document).on('submit', '#contact-form', function (event) {
event.preventDefault(); // 防止表单默认提交
var formData = $(this).serialize();
var url = $(this).attr('action');
$.ajax({
type: "post",
url: url,
data: formData,
dataType: "json",
success: function (data) {
if (data['success']) {
alert("提交成功!");
} else {
alert("提交失败!");
}
}
});
return false;
});
示例
下面提供两个实际应用的例子:
示例1. Ajax提交注册表单
class RegisterFormView(FormView):
form_class = RegisterForm
template_name = 'register.html'
success_url = reverse_lazy('success')
def form_valid(self, form):
data = form.cleaned_data # 获取表单数据
# 将data保存到数据库中
user = User(username=data.get('username'), email=data.get('email'), password=data.get('password'))
user.save()
# 处理表单数据并构造JSON格式数据
return self.form_valid_json(form, {'success': True, 'message': '注册成功!'})
$(document).on('submit', '#register-form', function (event) {
event.preventDefault(); // 防止表单默认提交
var formData = $(this).serialize();
var url = $(this).attr('action');
$.ajax({
type: "post",
url: url,
data: formData,
dataType: "json",
success: function (data) {
if (data['success']) {
alert(data['message']);
} else {
alert("注册失败!");
}
}
});
return false;
});
示例2. Ajax提交评论表单
class CommentFormView(FormView):
form_class = CommentForm
template_name = 'comment.html'
success_url = reverse_lazy('success')
def form_valid(self, form):
data = form.cleaned_data # 获取表单数据
# 将data保存到数据库中
comment = Comment(name=data.get('name'), email=data.get('email'), content=data.get('content'))
comment.save()
# 处理表单数据并构造JSON格式数据
return self.form_valid_json(form, {'success': True, 'message': '评论成功!'})
$(document).on('submit', '#comment-form', function (event) {
event.preventDefault(); // 防止表单默认提交
var formData = $(this).serialize();
var url = $(this).attr('action');
$.ajax({
type: "post",
url: url,
data: formData,
dataType: "json",
success: function (data) {
if (data['success']) {
alert(data['message']);
} else {
alert("评论失败!");
}
}
});
return false;
});
以上就是form_valid_json()
函数的作用和使用方法攻略,希望对您有所帮助。