下面我将详细讲解“Django Form常用功能及代码示例”的完整攻略,包含两条示例说明。
Django中的Form是用来处理表单数据的Python类。通过继承Django提供的forms.Form
类,并定义相应的字段,我们可以快速创建自己的表单。
示例代码如下:
from django import forms
class ContactForm(forms.Form):
name = forms.CharField()
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
上述代码中,我们定义了一个ContactForm
类,包含了三个字段:name
(用于输入姓名)、email
(用于输入邮箱)、message
(用于输入留言)。其中,CharField
表示输入字符串类型,EmailField
表示输入邮箱类型,Textarea
表示输入文本类型。
在视图函数中,我们可以把自定义的表单实例化并传入模板,然后在模板中使用Django提供的{{ form.as_p }}
、{{ form.as_table }}
或{{ form.as_ul }}
方法来渲染表单。
示例代码如下:
from django.shortcuts import render
from .forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# 处理提交表单的逻辑
pass
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
上述代码中,我们定义了一个contact
视图函数,并将自定义表单ContactForm
的实例传给了模板。在模板中,我们可以使用{{ form.as_p }}
方法将表单渲染成一个段落,使用{{ form.as_table }}
方法将表单渲染成一个表格,使用{{ form.as_ul }}
方法将表单渲染成一个列表。
Django中的表单验证可以帮助我们快速判断表单提交的数据是否符合规范。在表单类中定义每个字段的验证规则,Django会自动帮我们完成表单验证的功能。
示例代码如下:
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
def clean_name(self):
# 对name字段进行验证,返回验证后的值
name = self.cleaned_data.get('name')
if len(name) < 3:
raise forms.ValidationError('姓名长度不能少于3个字符')
return name
上述代码中,我们增加了对name
字段的验证规则,当name
字段的长度小于3个字符时,将抛出一个验证错误。
Django中还提供了一系列的表单控件,如TextInput、CheckboxInput等。除此之外,我们还可以通过继承forms.Widget
类自定义表单控件。
示例代码如下:
from django import forms
class CalendarWidget(forms.Widget):
def render(self, name, value, attrs=None, renderer=None):
# 在这里编写自定义控件的渲染逻辑
pass
class ContactForm(forms.Form):
name = forms.CharField(widget=CalendarWidget)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
上述代码中,我们自定义了一个日历控件CalendarWidget
,并将其作为name
字段的控件实例化。在render
方法中,我们可以编写日历控件的HTML渲染逻辑。
在这个示例中,我们将使用Django实现用户登录功能。用户需要输入用户名和密码,然后提交表单进行登录。如果用户名和密码验证通过,则跳转到主页,否则显示登录失败的错误信息。
先定义LoginForm
表单类:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
LoginForm
类中包括了两个字段:username
(输入用户名)和password
(输入密码)。其中,PasswordInput
表示将密码类型的字段显示为输入密码的形式。
接下来定义视图函数login
:
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from .forms import LoginForm
def login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('/')
else:
error_message = '用户名或密码错误'
else:
form = LoginForm()
error_message = ''
return render(request, 'login.html', {'form': form, 'error_message': error_message})
在login
视图函数中,我们首先判断用户请求的方法是否是POST,如果是则对表单进行验证,验证通过则从表单中获取用户名和密码,并调用Django提供的authenticate
函数进行用户验证。若验证通过,则使用login
函数登录用户并跳转到主页。如果未通过验证,显示用户名或密码错误的错误信息。
在模板文件中,我们可以使用Django提供的表单渲染函数来渲染表单,类似于这样:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">登录</button>
</form>
在render函数中,我们将LoginForm
表单实例和错误信息一起传递给模板,模板使用{{ form.as_p }}
方法来渲染表单,在用户提交表单后,我们通过request.POST
来获取表单数据,并进行验证。
在这个示例中,我们将使用Django实现一个简单的主页留言板功能。用户可以在主页上发布留言,同时查看其他人发布的留言。
先定义MessageForm
表单类:
from django import forms
class MessageForm(forms.Form):
title = forms.CharField()
content = forms.CharField(widget=forms.Textarea)
MessageForm
类中包括了两个字段:title
(输入留言主题)和content
(输入留言内容)。其中,Textarea
表示输入文本类型。
接下来定义Message
模型:
from django.db import models
class Message(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
create_time = models.DateTimeField(auto_now_add=True)
在模型中,我们需要定义每个字段的类型和其他相关参数,例如CharField
、TextField
以及DateTimeField
等等。其中,auto_now_add=True
表示新增数据时自动设置为当前时间。
接着定义视图函数index
:
from django.shortcuts import render, redirect
from .forms import MessageForm
from .models import Message
def index(request):
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
title = form.cleaned_data['title']
content = form.cleaned_data['content']
message = Message(title=title, content=content)
message.save()
return redirect('/')
else:
form = MessageForm()
messages = Message.objects.all().order_by('-create_time')
return render(request, 'index.html', {'form': form, 'messages': messages})
在index
视图函数中,我们判断用户请求的方法是否是POST,如果是则对表单进行验证,验证通过则从表单中获取留言主题和留言内容,然后新建一条留言并保存。最后,在GET请求时,我们查询数据库中所有的留言,并按照创建时间的倒序进行排序,然后传递给模板。
在模板文件中,我们可以使用Django提供的模板标记和过滤器来迭代留言,并使用{{ form.as_p }}
方法来渲染表单,在用户提交表单后,我们通过request.POST
来获取表单数据,并进行验证。
以上就是「Django Form常用功能及代码示例」的完整攻略,希望对你有所帮助。
本文链接:http://task.lmcjl.com/news/15698.html