Problems & Solutions --3

来源:互联网 发布:淘宝信鸽赛中二手 编辑:程序博客网 时间:2024/05/19 00:42

在写add_article部分代码的时候又遇到了,类似的问题,天啊,下午有郁闷了好久,吃完饭,在Web 表单里加上了CSRF 密钥,然后代码可以正常运行了

{% extends 'layout.html' %}{% block body %}  <h1>Add Artitle</h1>  {% from "includes/_formhelpers.html" import render_field %}  <form method="POST",action="">    {{ form.csrf_token }}    <div class="form-group">      {{render_field(form.title,class_="form-control")}}    </div>    <div class="form-group">      {{render_field(form.body, class_="form-control")}}    </div>    <p><input type="submit" class="btn btn-primary" value="Submit"></p>  </form>{% endblock %}

修改于2017年7月31日

好久没有写这个 Problems & Solutions 了。

这两天,写了那么多行用户注册代码,结果在网页上注册点击Submit,没反应,天啊,还好最后解决了问题。
form.validate() 和 form.validate_on_submit() 的问题。

还好找到了解决这类问题的思路。
排除没有问题的代码,找到出问题的代码,再注释掉不重要的代码,调试程序,看问题具体出在哪行代码,再上网查解决办法。

Problems:

发现问题在这一块儿代码:

def register():    form = RegisterForm(request.form)    if request.method == 'POST' and form.validate():        name = form.name.data        email = form.email.data        username = form.username.data        password = sha256_crypt.encrypt(str(form.password.data))        ##Creat cursor        cur = mysql.connection.cursor()        #Execute query        cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)",(name, email,username,password))        #Commit to DB        mysql.connection.commit()        #Close connection        cur.close()        flash("You are now registered.Please log in.",'success')        return redirect(url_for('index'))    return render_template('register.html',form=form)

中间一堆都是按文档上的例子,最有可能出错的时 if 条件语句.
把代码改成这样:

 def register():    form = RegisterForm(request.form)    if request.method == 'POST' and form.validate():        return redirect(url_for('index'))    return render_template('register.html',form=form)

用户注册后点击Submit,仍然页面仍然留在了当前注册页面,就是程序根本没有执行if 判断语句中的内容,然后if 条件语句中有两个判断条件:

if request.method == 'POST' and form.validate_on_submit():

删掉request.method == ‘POST’,页面留在当前注册页面.
删掉form.validate_on_submit(),页面跳转到了index.html

自然form.validate()语句这儿

Solutions:

validate() 函数用来验证数据。如果验证通过,则 函数返回 True ,否则返回 False 。

使用 WTForms 进行表单验证的视图部分用了form.validate()方法,就跟着把form.validate()用到了自己的代码中.

validate() 函数来验证数据。如果验证通过,则 函数返回 True ,否则返回 False 。

关于validate_on_submit():
validate_on_submit() method of the form returns True when the form was submitted and the data has been accepted by all the field validators.

把validate() 替换成validate_on_submit(),页面跳转到了index页面.

把刚才删掉的代码加上(保存用户信息到MySQL数据库)
果然用户注册成功,注册信息也保存到了数据库中。

(flash消息看起来有些问题,但是这种明显就能知道哪儿错了的错误,一点儿都可怕)
这里写图片描述

这里写图片描述

原创粉丝点击