Django——表单验证

  • models.py
class Users(models.Model):
    nickname = models.CharField(max_length=16, null=False, blank=False, unique=True)
    email = models.EmailField(max_length=32, null=False, blank=False, unique=True)
    password = models.CharField(max_length=64, null=False, blank=False)
    head = models.ImageField(default="decault.png")
    age = models.CharField(max_length=3,blank=True,null=True)
    sex = models.CharField(max_length=2, blank=True, null=True)
    isactivate = models.BooleanField(default=False)

    def save(self):
        if not self.password.startswith('pbkdf2_'):
            self.password = make_password(self.password)
        super().save()
  • form.py
from django import forms
from django.core.exceptions import ValidationError

from user.models import Users

#定义验证器
def nickname_validate(nickname):
    u = Users.objects.filter(nickname=nickname)
    if len(u):
        print(len(u))
        raise ValidationError('用户名已存在')

#定义表单
class RegisterForm(forms.Form):
    nickname = forms.CharField(validators=[nickname_validate],
                                label='用户名',
                                max_length=16,
                                min_length=4,
                                required=True,
                                widget= forms.TextInput(),
                               )

    password = forms.CharField(label='密码',
                               max_length=64,
                               min_length=6,
                               required=True,
                               widget=forms.PasswordInput())

    email = forms.EmailField(label='邮箱',
                             max_length=32,
                             required=True)

    age = forms.CharField(label='年龄',
                          max_length=3,
                          required=False)

    sex = forms.ChoiceField(label='性别',
                            choices = ((0,'男'),(1,'女'),),
                            required=False)

view.py

from user.forms import  RegisterForm
from user.models import Users

def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            u = Users()
            u.nickname = form.cleaned_data['nickname']
            u.email = form.cleaned_data['email']
            u.password = form.cleaned_data['password']
            u.age = form.cleaned_data['age']
            u.sex = form.cleaned_data['sex']
            u.save()
            return render(request,'user_info.html')
        else:
            return render(request, 'register.html',context={'form':form,'errors': form.errors})
    else:
        form = RegisterForm()
    return render(request,'register.html',context={'form':form})

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <form class="form" action="{% url 'user:register' %}" method="post">
        {% csrf_token %}
        <table>
            {{ form.as_p }}
        </table>
        <button type="submit" class="btn btn-primary btn-block">注册
        </button>
        <input type="hidden" name="next" value="{{ next }}"/>
    </form>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值