用户登录流程:在forms.py中自己定义定义loginform类(其中包含登陆的表单,比如账号、密码、提交按钮等)→ views.py中路由控制跳转到登陆页面模板(在其中传入form),用户输入了账号、密码后点击“提交”按钮后,前端、后端校验完成后,跳转到登陆成功后的页面。
为什么不直接用写好的html的登陆模板,而要通过loginform中转一下?
显然,如果用户访问登陆页面,直接就 return render_template(“admin/login.html”)也没问题,但是如果要在前端完成复杂一点的校验(比如长度控制、要求只能英文账号)就很困难,所以要引入forms.py,在里面定义表单类class loginform,然后在return render_template的时候,引入这个loginform类return render_template(“admin/login.html”, form=form)。这样,所有的前端校验控制,就可以在这个类里面来完成。
# 不使用form类的前端html模板如下:
<body>
<form method="get" action='/login'>
<label>用户名:<input type="text" name="user" value=""></label><br>
<label>密码:<input type="password" name="password" value=""></label><br>
<input type="submit" value="登录">
</form>
</body>
# 使用form类的前端html模板如下(仅列出了输入用户名的部分):
<div class="form-group has-feedback">
<!--这是原来的语句 <input name="user" type="text" class="form-control" placeholder="请输入账号!"> -->
{{ form.account }}
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
<!-- 这是原来的语句 <div class="col-md-12" id="input_account"></div> -->
{% for err in form.account.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
前后端登陆数据的校验在哪些地方、哪些过程中,怎样完成校验的?
登陆校验是可以在三个部分中来进行的(三个部分可以同时有也可以部分有)。1和2两个部分是在form.py中的class loginform类中完成,3是在views.py视图模块中来完成。
- 首先是直接定义字段时的校验,使用validators参数来控制。
- 在自定义验证器 - namefield验证器中来校验。只要在class loginform中添加def validate_XXXX(self,field)函数(其中XXX为字段对象,注意不是字段名称,而是字段对象,如第1点中account就是一个StringField字段对象)。
3、在views.py页面视图中的 转发网址的路由装饰器下的函数中校验。一旦客户点击了页面中的“提交”按钮,系统会先完成以上2步的校验,检验通过后,才会到路由装饰器函数来。这时可以在函数中校验if form.validate_on_submit()
的值,如果前面2步的校验都正确,这个值就=TRUE,然后可以在if 中写入需要校验的代码。