Django中表单的使用方式

Django的表单模块提供的主要功能

  1. 准备和重构数据,用于页面渲染
  2. 为数据创建HTML表单元素
  3. 接收和处理用户使用表单提交的数据

使用方式

  1. 定义表单类
    表单类都必须直接或间接继承自django.forms.Form
    可以结合模型使用。

models.py文件

class User(models.Model):
    username = models.CharField(max_length=30)
    password = models.CharField(max_length=128)

    class Meta:
        db_table = 'user'

forms.py文件

def check_password(value):
    if re.match(r'\d*$', value, re.I):
        raise ValidationError('密码不能只包含数字')


class RegisterForm(forms.Form):
    username = forms.CharField(required=True, error_messages={'required': '用户名不能为空'})
    password = forms.CharField(required=True, validators=[check_password], error_messages={'required': '密码不能为空'})
    confirm_password = forms.CharField(required=True, error_messages={'required': '密码不能为空'})
    email = forms.EmailField(error_messages={'invalid': '格式错误'})
  1. 前端模板使用及渲染
<body>
<form action="{% url 'App01:register' %}" method="post">
    {% csrf_token %}
    username: <input type="text" name="username"><span>{{ form.username.errors }}</span> <br>
    password: <input type="password" name="password"><span>{{ form.password.errors }}</span> <br>
    confirm_password: <input type="password" name="confirm_password"><span>{{ form.confirm_password.errors }}</span> <br>
    email: <input type="text" name="email"><span>{{ form.email.errors }}</span> <br>
    <input type="submit">

</form>
</body>
  1. 后端视图函数
def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        # 所有验证都通过
        if form.is_valid():
            print(form.cleaned_data)
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = User(username=username, password=password)
            # 保存数据
            user.save()
            return HttpResponse('index')
        else:
            return render(request, 'register.html', locals())
    form = RegisterForm()
    return render(request, 'register.html', locals())
  1. 重写表单验证

验证的函数名必须为“clean_字段名”的形式,而且必须有返回值。
继续在forms.py文件中定义的RegisterForm表单类下添加

    def clean_username(self):
        useranme = self.cleaned_data.get('username')
        if User.objects.filter(username=useranme).first():
            raise ValidationError('用户名重复')
        return useranme

    def clean(self):
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('confirm_password')
        if password != confirm_password:
            raise ValidationError('两次输入的密码不匹配')
        return self.cleaned_data

这样用户在注册网页中填入相应信息,点击提交之后,如果没有通过验证,会直接提示对应的报错信息。

示例:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值