面试题答案
一键面试- 创建自定义字段类:
from django import forms from django.core.exceptions import ValidationError import re class HexColorField(forms.CharField): def __init__(self, *args, **kwargs): kwargs.setdefault('max_length', 7) kwargs.setdefault('min_length', 7) super().__init__(*args, **kwargs) def clean(self, value): value = super().clean(value) if not re.match(r'^#([0 - 9A - Fa - f]{6})$', value): raise ValidationError('请输入有效的十六进制颜色代码,格式如#FF0000') return value
- 验证函数:上述
clean
方法就是验证函数,它使用正则表达式^#([0 - 9A - Fa - f]{6})$
来验证输入是否是有效的十六进制颜色代码格式。如果不符合格式,就抛出ValidationError
。 - 在表单中使用:
class ColorForm(forms.Form): color = HexColorField()
- 在视图中使用:
from django.shortcuts import render from.forms import ColorForm def color_view(request): if request.method == 'POST': form = ColorForm(request.POST) if form.is_valid(): color = form.cleaned_data['color'] # 在这里可以对验证通过的颜色代码进行进一步处理 return render(request,'success.html', {'color': color}) else: form = ColorForm() return render(request, 'color_form.html', {'form': form})
在模板color_form.html
中可以这样显示表单:
<!DOCTYPE html>
<html>
<head>
<title>颜色表单</title>
</head>
<body>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="提交">
</form>
</body>
</html>
在success.html
中可以这样显示验证通过的颜色代码:
<!DOCTYPE html>
<html>
<head>
<title>成功</title>
</head>
<body>
<p>您输入的颜色代码是: {{ color }}</p>
</body>
</html>