标签: flask-wtforms

使用从前一个字段中选择的值填充WTForms选择字段

新手,尝试按照着名的Flask教程构建应用程序,使用Flask-bootstrap,Flask-wtforms,Jinja等

我有一个包含2个选择字段和一个按钮的表单.

class Form(FlaskForm): 
    school_year = SelectField('School year', choices=some_tuples_list)
    category = SelectField('Category', choices=[]) 
    submit = SubmitField('submit')
Run Code Online (Sandbox Code Playgroud)

我希望只预先填充第一个字段,并根据前一个字段的选定值填充另一个字段(在客户端?).

在模板中,我尝试了类似的东西

{{ form.school_year(**{"onchange":"getCategories()"}) }}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常(假设我返回元组列表以填充下一个字段,使用正确的javascript和路由)但我想要类似下面的内容

{{ wtf.form_field(form.school_year(**{"onchange":"getCategories()"})) }}
Run Code Online (Sandbox Code Playgroud)

哪个不起作用(错误:wtforms.widgets.core.HTMLString对象'没有属性'标志')

所以,我想我的问题是:如何在这个wtf表单字段上实现onChange事件?(这是我必须做的,还是从视图功能有一种方法?)

提前致谢.

flask flask-wtforms flask-bootstrap

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

在cookiecutter-flask app中使用Flask-wtforms上传文件

我在将文件上传工作到cookiecutter-flask应用程序(v.10.1.1)时遇到问题.现在,它没有保存上传的文件.

Cookiecutter-Flask默认安装WTForms和Flask-WTForms.我已经尝试过添加Flask-Uploads,但我不相信模块在这一点上添加了任何东西,所以我已经卸载了它.这是Flask-WTF文件上传文档:http://flask-wtf.readthedocs.io/en/latest/form.html#module-flask_wtf.file

文档和我的应用程序之间的主要区别在于我似乎有更多文件的信息,符合cookiecutter的约定.

app_name/spreadsheet/forms.py:

from flask_wtf import Form
from wtforms.validators import DataRequired
from flask_wtf.file import FileField, FileAllowed, FileRequired

class UploadForm(Form):
    """Upload form."""

    csv = FileField('Your CSV', validators=[FileRequired(),FileAllowed(['csv', 'CSVs only!'])])

    def __init__(self, *args, **kwargs):
        """Create instance."""
        super(UploadForm, self).__init__(*args, **kwargs)
        self.user = None

    def validate(self):
        """Validate the form."""
        initial_validation = super(UploadForm, self).validate()
        if not initial_validation:
            return False
Run Code Online (Sandbox Code Playgroud)

app_name/spreadsheet/views.py:

from flask import Blueprint, render_template
from flask_login import login_required
from werkzeug.utils import secure_filename
from app_name.spreadsheet.forms …
Run Code Online (Sandbox Code Playgroud)

python flask flask-wtforms flask-uploads

13
推荐指数
1
解决办法
1078
查看次数

Python Flask SQLAlchemy Pagination

我无法用Flask-SQLAlchemy或Flask-Pagination执行分页,或者.我不确定如何初始化分页,设置页面,确定页面,输入等等.我来自PHP,对Python来说很新.

我在查询数据库中的所有帖子

posts = Posts.query.order_by(Posts.time.desc()).all()
Run Code Online (Sandbox Code Playgroud)

我一直在看下面的例子:

我真的很困惑,我发现的信息在文章之间差别很大.这让我感到困惑,不知道从哪里开始.我想查询数据库表的所有行,将结果限制为20和分页.我没有清楚地看到这一点.

python sqlalchemy flask flask-sqlalchemy flask-wtforms

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

Python Flask-WTF - 使用相同的表单模板进行添加和编辑操作

我刚刚开始使用Flask/Flask-WTF/SQLAlchemy,我看到的大多数示例CRUD代码都显示了用于添加/编辑的单独模板.有两个模板几乎完全相同的形式html似乎重复(例如books_add.html,books_edit.html).从概念上讲,拥有一个模板(例如"books_form.html")对我来说更有意义,只需从两个单独的路径定义中调用同一模板上的render_template.我不太确定如何实现它,例如:

@app.route('/books/add')
def add_book():
...
render_template('books_form.html', action = 'add')


@app.route('/books/edit/<id>')
def edit_book(id):
...
render_template('books_form.html', action = 'edit', id = id)
Run Code Online (Sandbox Code Playgroud)

但我不确定我是否走上了正确的轨道,或者偏离了最佳实践.任何输入都很受欢迎 - 关于如何处理单个模板文件以处理添加或编辑行为的具体想法.也欢迎链接到示例.

谢谢!

python flask flask-sqlalchemy flask-wtforms

12
推荐指数
1
解决办法
9314
查看次数

如何让我的烧瓶重型SelectField看起来像一个下拉列表?

我已经像这样创建了一个SelectField:

class Inputs(Form):
    myChoices = #number of choices
    myField = SelectField(u'Field name', choices = myChoices, validators = [Required()])
Run Code Online (Sandbox Code Playgroud)

问题是,当它在我的模板中呈现时:

<form action="" method="post" name="Inputs">
    {{form.hidden_tag()}}
    <p>
        {{form.myField(size=80)}}
    </p>
</form>
Run Code Online (Sandbox Code Playgroud)

它看起来像一个长选择框,其中已显示所有值,而不是下拉菜单.如何更改此格式?谢谢!

python flask flask-wtforms

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

使用wtforms动态添加输入字段

我不太确定如何解决这个问题.我希望我能到达那里.

例如,我在一个页面上有一个充满地址的表.这些是动态的(可以是5或10或任何其他计数).我希望有可能在一个页面上编辑它们.

我的方法是创建wtforms表单编辑一个地址,并乘以它在Jinja2的for loop和附加到HTML propertys nameidloop.index0从itereation,这样我就可以提取人工数据的每一行,并把它放回我的形式,当我想评估它.

因此,此示例的表单将是:

class AdressForm(Form):
    name = TextField()
Run Code Online (Sandbox Code Playgroud)

所以现在我的模板aproach看起来如下(分解为一个输入字段):

{% for address in addresses %}
    {{ forms.render_field(addressform.name, id = "name_" ~ loop.index0, 
                          name = "name_" ~ loop.index0, value = address.name) }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

(forms.render_field只是一个宏,用于指定wtforms的字段函数的正确类.就像它们在许多教程中使用的那样)

所以这不起作用,因为你不能name手动将参数传递给字段函数,因为wtforms name从初始Form的variblename创建html-paramter.

那么有没有办法将前缀或后缀添加到我想要呈现的表单的名称.或者这是一个XY问题,我的方法总是错误的.

或者我自己一点都做(我真的试图避免这种情况)

python jinja2 flask wtforms flask-wtforms

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

如何使用Flask WTF FileField实际上传文件

在我的forms.py文件中,我有

    class myForm(Form):
       fileName = FileField()
Run Code Online (Sandbox Code Playgroud)

在我的views.py文件中

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

在我的.html文件中

     {% block content %}
     <form action="" method="post" name="simple" enctype="multipart/form-data">
        <p>
           Upload a file
             {{form.fileName()}}
         </p>
        <p><input type="submit" value="Submit"></p>
     </form>
     {% endblock %}
Run Code Online (Sandbox Code Playgroud)

当我点击提交时它似乎工作但文件不在任何项目目录中.

python flask python-2.7 flask-wtforms

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

从WTForms字段获取上传的文件

在Flask文档中,文件上载示例使用<input type="file" name="file">然后request.files['file']获取文件.我正在使用WTForms FileField.如何在使用WTForms时获取上传的文件,而不是自己编写输入html?

python flask wtforms flask-wtforms

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

如何在AJAX中使用Flask-WTForms CSRF保护?

Flask-WTForms提供CSRF保护.使用普通HTML表单时效果很好,但使用AJAX时过程不太清楚.我的表单中有文件上传,我用AJAX将进程分成两部分:文件进入upload端点,而表单的其余部分进入submit端点.由于文件是使用AJAX发布的,因此它不会获得CSRF令牌,但我希望保护upload端点免受攻击.如何在使用AJAX时生成CSRF令牌?

@app.route('/submit', methods=["GET","POST"])
@login_required
def submit():
    form = MyForm()

    if request.method == "POST" and form.validate():
        # success, csrf checks out and data is validated
        # do stuff

    csrf_for_uploads = # generate csrf?
    return render_template('some_form.html', form=form, csrf_for_uploads=csrf_for_uploads)

@app.route('/upload', methods=["POST"])
@login_required
def upload():
    myfile = request.files['file']
    # How do I verify CSRF now?
Run Code Online (Sandbox Code Playgroud)

python flask csrf-protection flask-wtforms

11
推荐指数
1
解决办法
5095
查看次数

提交后清除有效表格

我想在验证后重置表单.目前,表单在提交并有效后仍会显示以前的数据.基本上,我希望表单恢复到原始状态,所有字段都清理干净.这样做的正确性是什么?

@mod.route('/', methods=['GET', 'POST'])
def home():
    form = NewRegistration()

    if form.validate_on_submit():
        #save in db

        flash(gettext(u'Thanks for the registration.'))

    return render_template("users/registration.html", form=form)
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

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