通过django froms模块生成html input标签
首先在当前应用下创建一个forms.py的文件
vim forms.py
from django import forms
def forms.AdminForm(forms.Form):
username = forms.CharField() #生成明文的输入框
password = forms.CharField(widget=forms.widgets.PasswordInput)
#生成一个密文显示的输入框
password = forms.CharField(widget=forms.widgets.PasswordInput(attrs={'class':'auto'}))
(attrs={'class':'auto'}) #定义标签属性
email1 = forms.CharField(widget=forms.widgets.EmailInput)
email2 = forms.EmailField()
#widget类型是通过正则表达式来判定的
views.py里面写一个生成用forms模块input标签的方法
def index2(request):
if request.method == ‘POST’:
#判断在html表单里面提交的方式是什么(一般是2种方式 post和get)
form = forms.AdminForm(request.POST)
#AdminForm是在froms.py里面的一个类,通过forms方法来调用,并赋值给form
if forms.is_valid():
#判断是否合法,输入错误的会在前端页面提示错误信息
data = form.cleaned_data #请求通过接受该数据
m = AdminForm(username='tom',password='tom123')
#AdminForm里面提交数据,并保存
m.save()
else:#如果输入规则不匹配在前台显示错误信息
print form.erros.as_data()
print form.erros.as_json()
print form.erros.as_text()
常见错误信息格式
else:
form = forms.AdminForm()
#判断如果不是post方法提交的
return render_to_response(‘index2.html’,{‘model’:form})
#把结果返回给前端的index2.html,model是前端Index2.html里面的一个变量用于接 受后台返回的数据,form是真实的数据
3.index2.html内容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"/>
<title></title>
</head>
<body>
<form action='/index2/' method='POST'>
<p>用户名:`model`.`username`</p>
<p>密码:`model`.`password`</p>
<p>邮箱:`model`.`email`</p>
<input type='submit' value='提交' />
</form>
</body>
</html>
优化之后的,更简洁的省去很多html代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"/>
<title></title>
</head>
<body>
<form action='/index2/' method='POST'>
` model`.`as_table` 已table形式展示出来
` model`.`as_ul` 已ul形式展示出来
#具体查看form父类里面的详细方法---源码
#好处省代码
#坏处样式不可控
<input type='submit' value='提交' />
</form>
</body>
</html>