MST

星途 面试题库

面试题:Python Django自定义表单字段及验证逻辑

假设你正在使用Python的Django框架开发一个应用,要求创建一个自定义的表单字段用于输入十六进制颜色代码(如#FF0000),并编写相应的验证逻辑,确保输入的格式正确且为有效的十六进制颜色代码。请详细阐述实现步骤,包括自定义字段类、验证函数以及在表单和视图中的使用方式。
17.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 创建自定义字段类
    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
    
  2. 验证函数:上述clean方法就是验证函数,它使用正则表达式^#([0 - 9A - Fa - f]{6})$来验证输入是否是有效的十六进制颜色代码格式。如果不符合格式,就抛出ValidationError
  3. 在表单中使用
    class ColorForm(forms.Form):
        color = HexColorField()
    
  4. 在视图中使用
    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>