标签: flask-wtforms

Flask-WTF FileField does not set data attribute to an instance of Werkzeug FileStorage

Flask-WTF's documentation states that:

Flask-WTF provides you a FileField to handle file uploading, it will automatically draw data from flask.request.files if the form is posted. The data attribute of FileField will be an instance of Werkzeug FileStorage.

但是,当我使用时FileField,data发布后的属性不是FileStorage对象.相反,它是None(如果我enctype="multipart/form-data"按照文档中的建议定义我的表单)或文件名作为字符串(如果我没有定义enctype).

这是相关的Jinja2模板:

{% from "_form.html" import render_field %}
{% block body %}
  <section class="page-width-container" id="offset-content">
    <div id="utility-box">
      <h1 class="utility-header">Settings</h1>
      {{ message }}
      <form action="/settings" method="post" enctype="multipart/form-data">
        {{ render_field(form.photo) }}
        <input type="submit" …
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 wtforms flask-wtforms

10
推荐指数
1
解决办法
2667
查看次数

如何在Flask中制作RadioField?

我有一个带有TextField,FileField的表单,我想添加一个RadioField.

我想要一个有两个选项的无线电领域,用户只能选择一个.我正在关注前两个有效的形式示例.

我的forms.py看起来像这样

    from flask import Flask, request
    from werkzeug import secure_filename
    from flask.ext.wtf import Form, TextField, BooleanField, FileField, file_required,         RadioField
    from flask.ext.wtf import Required
    class ImageForm(Form):
        name = TextField('name', validators = [Required()])
        fileName = FileField('fileName', validators=[file_required()])
        certification = RadioField('certification', choices = ['option1', 'option2'])
Run Code Online (Sandbox Code Playgroud)

在我的views.py文件中

form = myForm()
if form.validate_on_submit():
    name = form.name.data
    fileName = secure_filename(form.fileName.file.filename)
    certification = form.certification.data
Run Code Online (Sandbox Code Playgroud)

在我的.html文件中

     {% block content %}
     <h1>Simple Form</h1>
     <form action="" method="post" name="simple" enctype="multipart/form-data">
         {{form.hidden_tag()}}
         <p>
             Name:
             {{form.name(size=80)}}
         </p>
         <p>
             Upload a file …
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 flask-wtforms

9
推荐指数
2
解决办法
2万
查看次数

如何在烧瓶中使用QuerySelectField?

我正在尝试使用烧瓶形式填充sqlalchemy请求结果的选择字段.

这是代码:

def possible_book():
    return Book.query.with_entities(Book.id).all()

class AuthorForm(Form):
    familyname  = TextField('familyname', [validators.Required()])
    firstname   = TextField('firstname', [validators.Required()])
    book_list = QuerySelectField('book_list',query_factory=possible_book,get_label='title',allow_blank=True)
Run Code Online (Sandbox Code Playgroud)

这是模板:

 <form action="" method="post" name="edit_author" enctype="multipart/form-data">
     {{form.hidden_tag()}}
    <p>Veuillez donner son prénom (obligatoire) :    {{form.firstname(value=author.firstname)}}</p>
    <p>Nom de famille (obligatoire) : {{form.familyname(value=author.familyname)}}</p>
    <p>Livre : {{form.book_list}}</p>

    <p><input type="submit" value="Envoyer"></p>
 </form>
Run Code Online (Sandbox Code Playgroud)

查看:

@app.route('/edit_author/<number>', methods = ['GET', 'POST'])
   def edit_author(number):
   if number == 'new':
      author = []
   else:
      author = Author.query.filter_by(id = number).first()
   form = AuthorForm()
   if form.validate_on_submit():
      a = Author(firstname= form.firstname.data, familyname= form.familyname.data)
      a.books = …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-wtforms

9
推荐指数
1
解决办法
1万
查看次数

由于Flask-WTF的CSRF保护,Flask-Restful POST失败

我正在使用普通烧瓶网+烧瓶 - 安静.所以我需要针对Web的CSRF保护,而不是REST.

那一刻我让CsrfProtect(app)flask-wtf,我所有的职位单元测试flask-restful返回400.

有没有办法为REST服务禁用CSRF保护,因为它们来自移动手机,无论如何都没有会话处理,因此CSRF没有多大意义.

这是我测试它的方式:

rv = self.client.post('api/v1.0/verify-email', environ_base={'REMOTE_ADDR': '127.0.0.1'}, headers={'Content-Type':'application/json'}, data=json.dumps(data))
self.check_content_type(rv.headers)
eq_(rv.status_code, 412)
Run Code Online (Sandbox Code Playgroud)

python rest flask flask-wtforms flask-restful

9
推荐指数
2
解决办法
7440
查看次数

使用flask-wtf和sqlalchemy生成动态表单

我有一个webapp,允许用户创建自己的字段,以便稍后在表单中呈现.

我有一个模型Formfield如下:

class Formfield(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    form_id = db.Column(db.Integer, db.ForeignKey('formbooking.id'))
    label = db.Column(db.String(80))
    placeholder_text = db.Column(db.String(80))
    help_text = db.Column(db.String(500))
    box_checked = db.Column(db.Boolean, nullable = True, default = False)
    options = db.Column(db.String) # JSON goes here?
    answer = db.Column(db.String)
    required = db.Column(db.Boolean, nullable = False, default = False)
    order = db.Column(db.Integer)
    fieldtype = db.Column(db.Integer) 
Run Code Online (Sandbox Code Playgroud)

我用来表示一个字段,无论种类如何(复选框,输入,以后更多).

如您所见,每个字段都有一个Form_id的FK.

我正在尝试为给定的form_id生成动态表单.问题是我需要确定要为每个Formfield呈现的字段类型.所以我还需要在某个时候处理字段类型.

我想解决方案是以某种方式将form_id传递给我的Form类中的函数.

我不知道如何做到这一点或在哪里寻找解决方案.

任何帮助将非常感谢!

python sqlalchemy flask wtforms flask-wtforms

9
推荐指数
1
解决办法
1万
查看次数

为什么Flask应用程序会创建两个进程?

据我所知,Flask应该创建一个线程和第二个线程来运行它,但我看到的是总是有两个进程,而不是线程,正在运行.即使是最简单的应用程序.

from flask import Flask
from flask import render_template, request, flash, session, redirect

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

app.run(host="192.168.21.73", port=5000, debug=True)
Run Code Online (Sandbox Code Playgroud)

您可以看到两个进程正在运行:

ps -x
5026 ttyO0    S+     0:01 /usr/bin/python ./test_flask.py
5031 ttyO0    Sl+    0:45 /usr/bin/python ./test_flask.py
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

python flask flask-wtforms

9
推荐指数
1
解决办法
5249
查看次数

在WTForms中使用HTML5字段

我正在使用Flask开发Web应用程序.我原来是手动编写HTML表单,然后切换到使用WTForms(这是一个教育项目,所以我展示了构建项目的每一步).

尝试添加HTML5表单字段时,我有点困惑,比如EmailField.我搜索了WTForms文档,并在线搜索,我无法找到如何使用HTML5 EmailField创建WTForm.

然后我安装了这个模块https://pypi.python.org/pypi/wtforms-html5,允许它,一切正常.但是我对添加额外的依赖感到不满意,特别是因为它似乎没有积极开发(https://github.com/brutus/wtforms-html5).

然后我结束了WTForms github页面,发现实际上支持所有新的HTML5字段,但默认情况下不会导入这些字段.https://github.com/wtforms/wtforms/blob/master/wtforms/fields/html5.py因此,而不是使用

from WTForms import EmailField
Run Code Online (Sandbox Code Playgroud)

正如人们所推断的那样

from WTForms import TextField
Run Code Online (Sandbox Code Playgroud)

一个人必须使用

from wtforms.fields.html5 import EmailField
Run Code Online (Sandbox Code Playgroud)

我以前使用wtforms-html5模块如下

from wtforms_html5 import EmailField
Run Code Online (Sandbox Code Playgroud)

因此,我更改了所有出现的内容wtforms_html5,wtforms.fields.html5并且我的应用程序完全按预期工作.

好的,感谢您阅读所有背景资料.现在提问:

  • 为什么WTForms文档中没有提到任何html5字段(EmailField,DateField等)?

  • 为什么这些字段默认情况下不会像其他字段一样导入WTForms

  • 这些字段是否稳定/打算使用?

  • 从WTForms导入字段的最佳做法是什么?

对于Text字段,我可以使用以下任何一种方法:

from wtforms import TextField
from wtforms.fields import TextField
from wtforms.fields.simple import TextField
Run Code Online (Sandbox Code Playgroud)

但对于EmailField,我必须使用

from wtforms.fields.html5 import EmailField
Run Code Online (Sandbox Code Playgroud)

我想要:

from wtforms.fields import TextField
from wtforms.fields import EmailField
Run Code Online (Sandbox Code Playgroud)

但是这需要在fields [__init__][1]文件中添加一行,我不愿意这样做,因为它是一个教育项目,这只会让学习者感到困惑.

我在寻找

  • 洞察为什么WTForms不记录或默认导入html5字段
  • 有任何理由继续使用wtforms-html5第三方模块.

python html5 flask wtforms flask-wtforms

9
推荐指数
1
解决办法
5243
查看次数

如何从输入字段中删除"autocomplete disabled"

我有一个字段,用户要求输入一年.我的HTML看起来像这样

<div class="form-group {% if form_search2.year_search.errors %} error {% endif %}" style="padding: 0px;">
    <label class="col-xs-3 col-sm-2 control-label">{{ form_search2.year_search.label }}</label>
    <div class="col-xs-6" style="max-width:320px;display: inline;">
                            {{ form_search2.year_search(class='form-control', style="max-width: 300px;", placeholder="e.g. 1996-2001", autocomplete="on", type="text") }}
    </div>
    <div class="col-xs-3" style="display: inline;">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

形式定义为

year_search = TextField("Year:")
Run Code Online (Sandbox Code Playgroud)

当我在浏览器(Chrome)中查看此表单时,我收到了消息

Automatic credit card filling is disabled because this form does not use a secure connection
Run Code Online (Sandbox Code Playgroud)

我怎么能摆脱这个?我有其他字段,这些字段在相同的原因中定义,但它们记住之前输入的内容,并通过建议旧输入来帮助用户.

html forms flask-wtforms

9
推荐指数
1
解决办法
1433
查看次数

使用Flask的WTForms中的自定义验证器

我需要做一个自定义验证WTForms当输入为:数量数量 -例如,2:1

match1 = StringField('Russia-Saudi Arabia', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是-如何创建这种验证器?

我已经查看了http://wtforms.readthedocs.io/en/latest/validators.html上的文档,但是在这种情况下(对我来说)不是很有帮助。

提前致谢

python validation flask flask-wtforms

9
推荐指数
1
解决办法
3985
查看次数

如何在 Flask 中检查表单的哪些字段已被修改?

我正在尝试找出一种方法来检查是否有任何内置 Form 方法会在表单已在Flask/WTForms中修改时返回 true

我知道在Django Forms中,我们可以灵活地使用form.has_changed()完全符合我要求的方法。

我正在尝试检查表单是否已被修改,如果是,我会进行一些数据库更新。

如果有人有任何想法,请让我知道这一点或建议正确的开始方法。

python flask wtforms flask-wtforms

9
推荐指数
1
解决办法
650
查看次数