在顶部要导入咱们写的forms模块:from . import formshtml
对于非POST方法发送数据时,好比GET方法请求页面,返回空的表单,让用户能够填入数据;前端
对于POST方法,接收表单数据,并验证;django
使用表单类自带的is_valid()方法一步完成数据验证工做;安全
验证成功后能够从表单对象的cleaned_data数据字典中获取表单的具体值;数据结构
若是验证不经过,则返回一个包含先前数据的表单给前端页面,方便用户修改。也就是说,它会帮你保留先前填写的数据内容,而不是返回一个空表!函数
{{ login_form }}就直接完成了表单内容的生成工做!login_form这个名称来自你在视图函数中生成的form实例的变量名!ui
可是,它不会生成3d
标签,这个要本身写;使用POST的方法时,必须添加{% csrf_token %}标签,用于处理csrf安全机制;code
Django自动为每一个input元素设置了一个id名称,对应label的for参数orm
注册连接和登陆按钮须要本身写,Django不会帮你生成!
Django的form表单功能,自动生成了下面部分的代码:
<tr><th><label for="id_password">密码:</label></th><td><input type="password" name="password" maxlength="256" required id="id_password"></td></tr> <tr><th><label for="id_username">用户名:</label></th><td><input type="text" name="username" maxlength="128" required id="id_username"></td></tr>
可是这种生成的但没有渲染效果很差看,以下
能够经过{{ login_form.name_of_field }}
获取每个字段,而后分别渲染,以下例所示:
<div class="form-group"> {{ login_form.username.label_tag }} {{ login_form.username}} </div> <div class="form-group"> {{ login_form.password.label_tag }} {{ login_form.password }} </div>
这样Bootstrap4不会生效!仔细查看最终生成的页面源码,你会发现,input元素里少了form-control
的class,以及placeholder和autofocus,
在form类里添加attr属性便可,以下所示修改login/forms.py
from django import forms class UserForm(forms.Form): username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': "Username",'autofocus': ''})) password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder': "Password"}))