用户登录流程:在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视图模块中来完成。

  1. 首先是直接定义字段时的校验,使用validators参数来控制。
    20181006:为什么要使用form表单而不是直接用html模板?校验表单是怎样处理的?-LMLPHP
  2. 在自定义验证器 - namefield验证器中来校验。只要在class loginform中添加def validate_XXXX(self,field)函数(其中XXX为字段对象,注意不是字段名称,而是字段对象,如第1点中account就是一个StringField字段对象)。
    20181006:为什么要使用form表单而不是直接用html模板?校验表单是怎样处理的?-LMLPHP
    3、在views.py页面视图中的 转发网址的路由装饰器下的函数中校验。一旦客户点击了页面中的“提交”按钮,系统会先完成以上2步的校验,检验通过后,才会到路由装饰器函数来。这时可以在函数中校验if form.validate_on_submit()的值,如果前面2步的校验都正确,这个值就=TRUE,然后可以在if 中写入需要校验的代码。
    20181006:为什么要使用form表单而不是直接用html模板?校验表单是怎样处理的?-LMLPHP
10-06 13:08