form组件

forms组件的功能
1.渲染html代码
2.校验数据
3.展示提示信息

基本使用

后端

from django import forms
class MyForm(forms.Form):
    # username字符串类型最小3位最大8位
    username = forms.CharField(min_length=3,max_length=8,label='用户名',
                               error_messages={
                                   'min_length':'用户名最少3位',
                                   'max_length':'用户名最大8位',
                                   'required':"用户名不能为空"
                               })
    # password字符串类型最小3位最大8位
    password = forms.CharField(min_length=3,max_length=8)
    # email字段必须符合邮箱格式  xxx@xx.com
    email = forms.EmailField()

def form(request):
	#调用form类
	form_obj = MyForm()
	#判断是否为post请求
	if request.method = 'POST':
		#上下两个属性名要一样,不然无法临时保存数据
		form_obj = MyForm(request.POST)
		#判断数据是否符合MyForm中的数据类型返回true或者false
		if form_obj.is_valid():
			#返回符合后的结果
	return render(request,'form.html',locals()):除了is_valid判断是否符合外还有可以查看符合的值与不符合的值及其不符合的原因
cleaned_data 查看所有校验通过的数据
errers 查看所有不符合校验的数据及其原因
注:校验数据时可以多传但是不可以少传(多传的字段会被忽略)

前端

在这里有三种方式显示其内容
<form action='' method='post' novalidate>
<p>第一种渲染方式:代码书写极少,封装程度太高 不便于后续的扩展 一般情况下只在本地测试使用</p>
    {{ form_obj.as_p }}
    {{ form_obj.as_ul }}
    {{ form_obj.as_table }}
<p>第二种渲染方式:可扩展性很强 但是需要书写的代码太多  一般情况下不用</p>
    <p>{{ form_obj.username.label }}:{{ form_obj.username }}</p>
    <p>{{ form_obj.password.label }}:{{ form_obj.password }}</p>
    <p>{{ form_obj.email.label }}:{{ form_obj.email }}</p>
<p>第三种渲染方式(推荐使用):代码书写简单 并且扩展性也高</p>
    {% for form in form_obj %}
        <p>
        {{ form.label }}:{{ form }}
        <span style="color: red">{{ form.errors.0 }}</span>
        </p>
    {% endfor %}

	<input type='submit'>
</form>:label值可以自己去类中设置
注:错误提示信息是由浏览器提供的,如果想使用自己的提示信息,在form表单中添加novalidate
注:提示信息的更改是在类中进行的

更改类中的属性

如之前所说的
label 名字信息
error_messages 错误信息
还有
initial 默认值
required 是否为空
validators=[
RegexValidator(r’1+ ′ , ′ 请 输 入 数 字 ′ ) , R e g e x V a l i d a t o r ( r ′ 1 59 [ 0 − 9 ] + ', '请输入数字'), RegexValidator(r'^159[0-9]+ ,),RegexValidator(r159[09]+’, ‘数字必须以159开头’)
] 正则运用
widget = forms.widgets.PasswordInput() 更改input类型
widget = forms.widgets.TextInput()
widget = forms.widgets.EmailInput()

widget=forms.widgets.PasswordInput(attrs={‘class’:‘form-control c1 c2’})更改input类型并增加class属性(这里的属性为bootstrap)

其他的还有

# radio
    gender = forms.ChoiceField(
        choices=((1, "男"), (2, "女"), (3, "保密")),
        label="性别",
        initial=3,
        widget=forms.widgets.RadioSelect()
    )
    # select
    hobby = forms.ChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=3,
        widget=forms.widgets.Select()
    )
    # 多选
    hobby1 = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple()
    )
    # 单选checkbox
    keep = forms.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    )
    # 多选checkbox
    hobby2 = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple()
    )

  1. 0-9 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-form 是 ElementUI 中的表单组件,可以方便地实现表单数据收集、校验和提交等功能。在封装 el-form 组件时,可以按照以下步骤进行: 1. 创建一个名为 MyForm组件,引入 el-form 组件: ```javascript <template> <el-form ref="form" :model="formData" :rules="formRules"> <!-- 表单项内容 --> </el-form> </template> <script> import { Form } from 'element-ui'; export default { components: { [Form.name]: Form, }, props: { // 表单数据 formData: { type: Object, required: true, }, // 表单校验规则 formRules: { type: Object, required: true, }, }, }; </script> ``` 2. 将表单项的内容作为 MyForm 组件的插槽内容,例如: ```javascript <template> <el-form ref="form" :model="formData" :rules="formRules"> <slot></slot> </el-form> </template> ``` 3. 在 MyForm 组件中添加提交表单的方法: ```javascript <template> <el-form ref="form" :model="formData" :rules="formRules"> <slot></slot> <el-button type="primary" @click="submitForm">提交</el-button> </el-form> </template> <script> import { Form } from 'element-ui'; export default { components: { [Form.name]: Form, }, props: { formData: { type: Object, required: true, }, formRules: { type: Object, required: true, }, }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单校验通过,提交表单数据 this.$emit('submit', this.formData); } }); }, }, }; </script> ``` 4. 在使用 MyForm 组件的父组件中,使用 v-model 双向绑定表单数据,并监听 MyForm 组件的 submit 事件进行表单提交: ```javascript <template> <my-form v-model="formData" :form-rules="formRules" @submit="handleSubmit"> <!-- 表单项内容 --> </my-form> </template> <script> import MyForm from './MyForm'; export default { components: { MyForm, }, data() { return { formData: { // 表单数据结构 }, formRules: { // 表单校验规则 }, }; }, methods: { handleSubmit(formData) { // 提交表单数据 }, }, }; </script> ``` 这样,一个简单的 el-form 组件封装就完成了。在实际开发中,可以根据具体需求添加更多的功能和特性,如自定义表单项、表单项联动、表单数据初始化等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值