forms高级处理
使用原理:将Models和Forms结合到一起使用,将Forms中的类和Models中的类关联到一起,实现属性的共享
使用步骤:
- 在forms.py中创建class 继承自forms.ModelForm
- 创建内部类:Meta,关联Form和Model
属性:
- model:指定要关联的Model类
- Fields:指定从Models中取哪些字段生成控件
- 取值’__all__’,全部的属性都要生成控件
- 取值为列表,声明允许生成控件的属性名称
- labels:指定每个属性所关联的label取值为字典
Label={‘字段名’:‘label文字’}
下面用一个简单的登录实例来记录一下他的使用方法:
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>{{ messagebox }}
<form action="/11_register/" method="post">
{% csrf_token %}
{{ form.as_p }}
<p>
<input type="submit" value="登录">
</p>
</form>
</body>
</html>
forms.py
1 class userloginForm(forms.ModelForm): 2 class Meta: 3 #1.指定关联的model(记得要引入models.py) 4 model=user 5 #指定要生成控件的字段 6 fields=['uname','upwd'] 7 # 指定每个控件的label 8 labels={ 9 'uname':'用户名:', 10 'upwd':'密码', 11 }
views.py
1 def login_view1(request): 2 if request.method=='GET': 3 form=userloginForm() 4 return render(request,'newlogin.html',locals()) 5 else: 6 form = userloginForm() 7 if form.is_valid(): 8 values=form.cleaned_data 9 uname=values['uname'] 10 upwd=values['upwd'] 11 ulist = user.objects.filter(uname=uname, upwd=upwd) 12 if ulist: 13 return HttpResponse('登录成功') 14 else: 15 messagebox='登录失败' 16 return render(request,'newlogin.html',locals())