django框架中的form组件的用法

本文详细介绍Django中Form组件的使用方法,包括如何定义表单验证规则、处理表单提交及验证失败的情况,并提供了两种解决数据源实时更新问题的方法。

form组件的使用

先导入:

from django.forms import Form
from django.forms import fields
from django.forms import widgets
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError

在创建类,继承Form(定义input框的验证规则)

class Loginform(Form):
    username=fields.CharField(error_messages={"required":"用户名不能为空"},
    widget=widgets.TextInput(attrs={"class":"form-control"}))
    password=fields.CharField(error_messages={"required":"密码不能为空"},
    widget=widgets.PasswordInput(attrs={"class":"form-control"}))

    def clean_username(self):
        # ...
        user = self.cleaned_data['username']
        is_exsit = models.Userinfo.objects.filter(username=user).count()
        if not is_exsit:
            raise ValidationError('用户名不存在')
        return user

在实例化创建对象,将对象返回给render函数进行渲染

   if request.method=="GET":
        form=Loginform()
        return render(request,"login.html",{"form":form})

模板渲染

用户名:{{ form.username }}{{ form.errors.username.0 }}
密码:{{ form.password}}{{ form.errors.password.0 }}

用户输入信息提交后进行验证

 form=Loginform(data=request.POST)
    if form.is_valid(): #是否验证成功
        user=models.Userinfo.objects.filter(**form.cleaned_data).first() #通过验证则进行数据库比对
        if user:
            request.session[settings.WXP]={"name":user.username}
            return redirect("/index/")
        form.add_error('password', ValidationError('用户名或密码错误'))
        return render(request,"login.html",{"form":form})
    else:
        return render(request,"login.html",{"form":form}) #没通过验证则返回错误信息

解决数据源无法实时更新的方法

重写__init__方法(推荐使用)
class ClassForm(Form):
    caption = fields.CharField(error_messages={'required':'班级名称不能为空'})            
    headmaster_id = fields.ChoiceField(choices=[])
    def __init__(self,*args,**kwargs):
    super().__init__(*args,**kwargs)
    self.fields['headmaster_id'].choices = models.UserInfo.objects.filter(ut_id=2).values_list('id','username')
方法一
#使用ModelChoiceField创建字段
from django.forms.models import ModelChoiceField
class ClassForm(Form):
    caption = fields.CharField(error_messages={'required':'班级名称不能为空'})        
    headmaster_id = ModelChoiceField(queryset=models.UserInfo.objects.filter(ut_id=2))
方法二

 

转载于:https://www.cnblogs.com/wxp5257/p/7794094.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值