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消息看起来有些问题,但是这种明显就能知道哪儿错了的错误,一点儿都可怕)
- Problems & Solutions --3
- Problems & Solutions -- 5. divisions in python2 & 3
- 【转】Cygwin Problems & Solutions
- Cygwin Problems & Solutions 收藏
- U3: Problems and solutions
- Problems & Solutions -- HTTPError: Forbidden
- Problems & Solutions -- 4
- Problems & Solutions--parsers in bs4
- Common Problems (and Their Solutions) for java
- Oracle wait problems and potential solutions
- Stable Problems Get High-Quality Solutions
- Lesson: Common Problems (and Their Solutions)
- Problems & Solutions -- 6. MySql 中文乱码问题
- Problems & Solutions -- 7 MySQLdb in python
- Problems & Solutions --8 SMTP in flask_mail
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions
- Computer Graphics and Multimedia: Applications, Problems and Solutions
- Web Service Composition Current Solutions and Open Problems阅读摘要
- python利用网易云音乐接口搭建的音乐推荐,根据单曲歌名推荐相关用户喜爱的歌曲
- AB1601GPIO不支持较高频率的脉冲中断
- python机器学习----利用sklearn进行情感分析
- CSS3 transform 属性
- ios-应用程序沙盒
- Problems & Solutions --3
- (二)SLAM拓扑地图(地图的优化)
- “玲珑杯”ACM比赛 Round #19 A.A simple math problem【打表找规律】
- Date和String相互转换(重点)
- luogu1880 合并石子(区间dp)
- Mac JDK
- git如何清除工作区所有还没有add的文件的修改?
- 递归(斐波那契数列)
- 用poplib库来检查指定邮件中的最新2封邮件