Form组件进行对数据的添,删,改

Form组件可以用来进行验证数据以及生成HTML代码,这2个功能对我们来说都是极其重要的,在日常开发时,能给我们省去很多时间来写一些重复的校验和html代码。

  1. 添加

用form组件生成input框进行添加数据是十分方便的,from组件可以自动生成form表单里的任何样式,以供我们使用,首先我们需要自定义一个类,这个类继承django提供的forms.Form
from django import forms from django.forms import fields),然后我们在里面创建字段名,注意这里我们创建字段的方式可以有2种,一种是想创建models一样,使用fields字段来创建,或者也可以用forms字段来创建,效果是一样的,这里建议我们要创建的字段名与数据库中的字段名对应起来,以方便我们进行处理。forms类中有各种各样的自定义属性来进行设置。

创建好我们的类之后,便可以在views函数中进行处理,首先我们实例化我们的类,让obj=类名()
再传到前端,这样我们就能在前端调用{{ obj.字段名.自定义属性 }}来布置我们的页面
在获得数据之后,通过post方法传到views,这里我们还是要实例化我们的类obj=类名(request.POST),注意这是要传入参数,即我们post过来的数据,然后开始验证,

if obj.is_valid():
	xxxxxx
else:
	xxxxx

验证结束,如果成功获得clean_data数据,失败则返回前端我们设置好的错误信息。
完整代码:
后端:
自定义类:

from django import forms
from django.forms import fields

class MemberForm(forms.Form):
    name=fields.CharField(
        max_length=32,
        min_length=2,
        required=True,
        error_messages={
            'required':'此项不能为空',
            'max_length':'字数超过最大限制',
            'min_length':'字数不够',
            'invalid':'格式错误',
        },
        )

views:

def add(request):
    if request.method == 'GET':
        obj=MemberForm()
        return render(request, 'add.html', {'obj': obj})
    else:
        obj = MemberForm(request.POST)
        print(request.POST)
        if obj.is_valid():
            print('ok')
            Members.objects.create(**obj.cleaned_data)
            return redirect('/index/')
        else:
            print('false')
            return render(request,'add.html',{'obj':obj})

前端:

<form action="/add_women/" method="post" novalidate>
{# 添加这个参数,防止浏览器自动给你报出错误,而不出现我们自定义的错误信息#}
        {% csrf_token %}
        <p>姓名:{{ obj.name }}{{ obj.errors.name.0 }}</p>
        <p>身高:{{ obj.height }}{{ obj.errors.height.0 }}</p>
        <p>{{ obj.gender }}</p>
        <p><input type="submit"></p>
    </form>
  1. 删除

    删除只需要我们获得id,直接在数据库进行操作就行,和Form实际没有什么太大关系

  2. 更改

    更改雷同于添加,但是,我们在进行更改时,就需要将默认的值先填入input框中,这样让用户体验更好,那么我们如何获得用户在数据库中的数据呢,首先我们需要获取当前用户的id,我们在进行跳转页面时,应该将用户id一并发送到后端,这样我们就可以通过数据库找到我们的这行数据,接着不同于添加的时,第一次实例化类时,我们不能不传入参数,而是应该将我们的数据传入当中,

data = Members.objects.filter(id=nid).first()
obj=MemberForm({'name':data.name,'height':data.height})

这样我们就能获取到用户在数据库的数据,并加入input框

完整代码:

def edit(request,nid):
    if request.method == 'GET':
        data = Members.objects.filter(id=nid).first()
        obj=MemberForm({'name':data.name,'height':data.height})
        return render(request, 'edit.html', {'obj': obj,'nid':nid})
    else:
        obj = MemberForm(request.POST)
        if obj.is_valid():
            Members.objects.filter(id=nid).update(**obj.cleaned_data)
            return redirect('/index/')
        else:
            return render(request,'add_women.html',{'obj':obj})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值