在Django中,form_validated()是一个用于处理表单的视图函数,它接收一个POST请求并验证其中的表单数据。如果表单验证通过,该函数将执行自定义操作,并将用户重定向到另一个URL。下面是关于form_validated()函数的详细介绍及使用方法:
1. 功能介绍
form_validated()函数的主要功能包括:
- 验证表单数据,确定其是否有效。
- 根据表单数据,执行一些自定义操作。例如,将表单数据保存到数据库中,显示成功消息等。
- 将用户重定向到另一个URL。当表单验证成功且自定义操作完成后,此函数将自动重定向到指定的URL。
2. 使用方法
使用form_validated()函数的步骤如下:
2.1 定义表单
首先,需要定义一个表单类。表单类必须继承Django自带的Form类,且至少包含要验证的字段。例如,下面是一个包含2个字段的表单类:
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
2.2 定义视图函数
接下来,需要定义一个视图函数来处理表单。在视图函数中,必须创建表单实例并进行验证。如果表单数据有效,则调用form_validated()函数执行自定义操作并将用户重定向到另一个URL。
下面是一个简单的示例:
from django.views.generic.edit import FormView
class ContactView(FormView):
template_name = 'contact.html'
form_class = ContactForm
success_url = '/thanks/'
def form_valid(self, form):
# 执行自定义操作
print(form.cleaned_data['subject'])
print(form.cleaned_data['message'])
# 返回HttpResponseRedirect以重定向到另一个URL
return super().form_valid(form)
在上面的代码中,ContactView是一个基于类的视图。它指定了一个使用的模板(template_name),一个要使用的表单类(form_class),一个成功处理表单后要重定向到的URL(success_url)。
form_valid()函数负责验证表单数据。如果表单通过验证,它将被调用。此时,将执行自定义操作并重定向到另一个URL。
2.3 定义表单模板
最后,需要创建一个用于呈现表单的模板。在模板中,要使用form标签将表单实例渲染为HTML。例如,可以创建一个名为contact.html的模板:
{% extends "base.html" %}
{% block content %}
<h1>Contact us</h1>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% endblock %}
3. 示例
下面是两个示例:
3.1 将表单数据保存到数据库中
在这个例子中,我们将表单数据保存到数据库中。假设我们的ContactForm包含fields:name, email_address和message。我们将定义Chat类和ChatForm类以处理这些数据:
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from .models import Chat
from .forms import ChatForm
class ChatView(FormView):
template_name = 'chat.html'
form_class = ChatForm
success_url = reverse_lazy('chat')
def form_valid(self, form):
# 将表单数据保存到数据库中
chat = Chat()
chat.name = form.cleaned_data['name']
chat.email_address = form.cleaned_data['email_address']
chat.message = form.cleaned_data['message']
chat.save()
return super().form_valid(form)
此视图的作用是将用户发表的聊天信息保存在数据库中。在上面的form_valid()方法中,我们首先从表单中提取数据,然后使用该数据创建一个新的Chat对象,并将其保存到数据库中。最后,我们将该对象返回给用户,并将其重定向到聊天页面。
3.2 发送电子邮件
在这个例子中,我们将发送电子邮件以通知管理员有新的联系请求。假设我们的ContactForm包含fields:name,email_address和message。我们将使用Django自带的邮件模块来实现这个功能:
from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from django.core.mail import send_mail
from .forms import ContactForm
class ContactView(FormView):
template_name = 'contact.html'
form_class = ContactForm
success_url = reverse_lazy('contact')
def form_valid(self, form):
# 发送电子邮件通知管理员有新的联系请求
send_mail(
'New contact request',
'Name: {}\nEmail: {}\nMessage: {}'.format(
form.cleaned_data['name'],
form.cleaned_data['email_address'],
form.cleaned_data['message']
),
'admin@example.com',
['admin@example.com'],
fail_silently=False,
)
return super().form_valid(form)
此视图的作用是发送电子邮件以通知管理员有新的联系请求。在上面的form_valid()方法中,我们从表单中提取数据,并使用Django自带的send_mail()方法发送邮件。最后,我们将该对象返回给用户,并将其重定向到联系页面。
4. 总结
以上就是关于Django中form_validated()函数的说明及使用方法的完整攻略。可以通过form_valid()方法执行自定义操作,并将用户重定向到另一个URL。可以使用本文提供的两个实例来了解如何使用该函数。