Flask web 开发新手遇到的坑

Posted 呜啦啦呜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask web 开发新手遇到的坑相关的知识,希望对你有一定的参考价值。

在Flask的开发的学习过程中,我用的是李辉大神的狼书,在实际学习中遇到的以下坑,与各位分享:

1.flask 的 Submit 按钮提交后并不会跳转,仍然停留在原始输入界面,部分代码如下:

forms.py 表单函数

1 class RichTextForm(FlaskForm):
2     title = StringField(\'Title\', validators=[DataRequired(), Length(1, 50)])
3     body = CKEditorField(\'Body\', validators=[DataRequired()])
4     submit = SubmitField(\'Publish\')

app.py 视图函数

1 @app.route(\'/ckeditor\', methods=[\'GET\', \'POST\'])
2 def integrate_ckeditor():
3     form = RichTextForm()
4     if form.validate_on_submit():
5         title = form.title.data
6         body = form.body.data
7         flash(\'your post is post\')
8         return render_template(\'post.html\', title=title, body=body)
9     return render_template(\'ckeditor.html\', form=form)

渲染模版 ckeditor

{% block content %}
<h1>Integrate CKEditor with Flask-CKEditor</h1>
<form method="post">
    {{ form.csrf_token }}
    {{ form_filed(form.title) }}
    {{ form_filed(form.body) }}
    {{ form.submit }}
</form>
{% endblock %}

运行后的界面

问题描述:

当输入内容点击Submit后,依然停留在此界面,即并不会跳转至‘post.html\'模版,说明是IF 语句出错,但

form.validate_on_submit 相当于 用户提交表单and数据通过验证 ,问题应该是数据通过验证这一块,排查其余代码无问题后,最终发现’ckedior.html\'中的语句
{{ form.csrf_token }} 出错,即CSRF令牌拼写错误,故无法通过验证,但程序并不会报错,对于初学者是比较大的坑,共勉!!



2. 出现报错:TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
代码如下:
 1  #Form
 2 class NewNoteForm(FlaskForm):
 3     body = TextAreaField(\'Body\', validators=[DataRequired]) 
# 3更改为(body = TextAreaField(\'Body\', validators=[DataRequired()]))
 4 submit = SubmitField(\'Save\')  5  6 @app.route(\'/new \', methods=[\'GET\', \'POST\'])  7 def new_note():  8 form = NewNoteForm()  9 if form.validate_on_submit(): 10 body = form.body.data 11 note = Note(body=body) 12  db.session.add(note) 13  db.session.commit() 14 flash(\'Your note is saved\') 15 return redirect(url_for(\'index\')) 16 return render_template(\'new_note.html\', form = form)

根据报错提示,函数需要两个参数,但是给了三个,并且在运行创建新Note提交时报错,说明错误在创建的Note的表单上,仔细排查后发现DataRequired后面没有括号,导致被当成了参数,因此报错,加了括号后恢复。今后在书写上注意。

以上是关于Flask web 开发新手遇到的坑的主要内容,如果未能解决你的问题,请参考以下文章

python flask的request模块以及在flask编程中遇到的坑

记踩坑--Flask Web开发:第六章的电子邮件 ----[Errno 11004] getaddrinfo failed

2017最新整理移动Web开发遇到的坑

Flask框架web开发:零基础入门

web端对接海康视频3.2开发包以及遇到的坑

《Flask Web开发 基于Python的Web应用开发实战》简评