Django form组件应用

form 组件的使用

class Register(forms.Form):
    user = forms.CharField(min_length=2, widget=widgets.TextInput(attrs={'class': 'form-control'}),
                           label='用户名',
                           error_messages={'required': "参数错误", 'invalid': '输入的用户名格式错误'})

    pwd = forms.CharField(widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
                          label='密码',
                          error_messages={'required': "参数错误", 'invalid': '输入的密码格式错误'})

    email = forms.EmailField(widget=widgets.EmailInput(attrs={'class': 'form-control'}),
                             label='邮箱',
                             error_messages={'required': "参数错误", 'invalid': '输入的邮箱格式错误'})
#进行user对象校验
def clean_user(self): user = self.cleaned_data.get('user') ret = Users.objects.filter(user=user).first() if not ret: return user else: raise ValidationError('用户名存在')

逻辑代码

def regist(request):
    form = Register()
    if request.method == 'GET':
        return render(request, 'reg.html', locals())
    else:
        form = Register(request.POST)

        if form.is_valid():
            print(form.cleaned_data)
            Users.objects.create(**form.cleaned_data)

        else:
            print(form.cleaned_data)
            errors = form.errors
            return render(request, 'reg.html', locals())

        return HttpResponse('ok')

模板渲染

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Title</title>
    <style>
        .demo {
            color: red;
            margin-left: 15px;
        }

        .error {
            color: red;
            margin-left: 12px;
        }
    </style>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

</head>
<body>
{# 方式1 #}
{#<form action="" method="post">#}
{#    {% csrf_token %}#}
{#    <p>用户名:<input type="text" name="user"><span class="demo">{{ errors.user.0 }}</span></p>#}
{#    <p>密码:<input type="password" name="pwd"><span class="demo">{{ errors.pwd.0 }}</span></p>#}
{#    <p>邮箱:<input type="text" name="email"><span class="demo">{{ errors.email.0 }}</span></p>#}
{#    <p><input type="submit" value="提交"></p>#}
{#</form>#}

<hr>

{# 方式2 #}
{#<form action="" method="post">#}
{#    {% csrf_token %}#}
{#    {{ form.as_p }}#}
{#    <p><input type="submit" value="提交"></p>#}
{#</form>#}
{#方式3 #}
<hr>
{#<div class="container">#}
{#    <div class="row">#}
{#        <div class="col-md-8 col-md-offset-2">#}
{#            <form action="" method="post" novalidate>#}
{#                {% csrf_token %}#}
{#                <p> 用户名 {{ form.user }}<span class="error">{{ errors.user.0 }}</span></p>#}
{#                <p>密码 {{ form.pwd }}<span class="error">{{ errors.pwd.0 }}</span></p>#}
{#                <p>邮箱 {{ form.email }}<span class="error">{{ errors.email.0 }}</span></p>#}
{##}
{#                <input type="submit" class="btn btn-success pull-right">#}
{#            </form>#}
{#        </div>#}
{#    </div>#}
{#</div>#}
<hr>
{# 方式4 #}
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post" novalidate>
                {% csrf_token %}
                {% for field in form %}
                    <p> {{ field.label }} {{ field }}<span class="error">{{ field.errors.0 }}</span></p>
                {% endfor %}
                <input type="submit" class="btn btn-success pull-right">
            </form>
        </div>
    </div>
</div>


</body>
</html>

猜你喜欢

转载自www.cnblogs.com/ls1997/p/11083261.html
今日推荐