Form组件可以用来进行验证数据以及生成HTML代码,这2个功能对我们来说都是极其重要的,在日常开发时,能给我们省去很多时间来写一些重复的校验和html代码。
- 添加
用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>
-
删除
删除只需要我们获得id,直接在数据库进行操作就行,和Form实际没有什么太大关系
-
更改
更改雷同于添加,但是,我们在进行更改时,就需要将默认的值先填入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})