标签: wtforms

类中的属性顺序

在python中保证保持类中属性的顺序吗?这是如何保证的?在手册中指定的位置?

这将声明性地将字段定义为类属性:

class MyForm(Form):
    first_name = TextField(u'First Name', validators=[validators.required()])
    last_name  = TextField(u'Last Name', validators=[validators.optional()])
    ...


def get(self):
    form = MyForm(self.request.arguments)
    form=form
    self.render('forms.html', form=form)
Run Code Online (Sandbox Code Playgroud)

即使我有n个项目,名字将始终是第一个项目,最后一个名称是第二个名称?

python oop wtforms

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

使用 Flask 和 WTForms 我怎样才能有一个表,其中一些列是输入?

我正在努力了解这是如何完成的,并且文档似乎没有多大帮助。

我需要生成一个表,行大小是可变的,但不是动态的(我知道在生成页面之前需要多少行)。

为了简单起见,让我们想象一个页面,您用一个整数对 n 个考试进行评分。

我试过这个:

表格。

class InputInteger(Form):
    grade = IntegerField('Grade')
Run Code Online (Sandbox Code Playgroud)

风景

@decorator..
def grade():
    form = InputInteger()
    names = student_list

    return render_template("grade.html", form=form, names=names)
Run Code Online (Sandbox Code Playgroud)

模板

<table>
    <tr>
        <th>Name</th>
        <th>Grade</th>
    </tr>
    {% for name in names %}
    <tr>
        <td>
            {{name}}
        </td>
        <td>
            {{form.grade}}
        </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

但是我如何读回输入的值呢?我如何区分谁也属于谁的年级?

我很困惑,我读过有关 FieldList(FormField(IntegerField)) 的内容,但这不只是一个带有整数列表的字段吗?表格小部件怎么样,我需要它吗?

请帮忙。

python flask wtforms

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

flask wtforms填充下拉列表

这不是一个非常具体的问题,所以提前抱歉.

我有一个名为Crews的文件夹,它包含json文件.

我正在使用WTForms创建一个下拉列表,我希望列表中填充该文件夹中的json文件的名称,但我不知道如何去做.

(我正在创建一个可视化所选json数据的Web应用程序,因此表单将包含一个函数,该函数返回所选的json数据,由d3.js代码调用)

python json flask wtforms

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

更新wtform提交的SQLAlchemy记录

尝试更新具有以下关系的记录时,我遇到了一些麻烦:

events_mentor_table = db.Table('events_mentors', db.Model.metadata,
    db.Column('event_id', db.Integer, ForeignKey('event.id')),
    db.Column('mentor_id', db.Integer, ForeignKey('mentor.id'))
)

class Mentor(db.Model):
    __tablename__ = 'mentor'
    id = db.Column(db.Integer(), primary_key=True)
    first_name = db.Column(db.String())
    last_name = db.Column(db.String())
    job_title = db.Column(db.String())
    company_url = db.Column(db.String())
    twitter_url = db.Column(db.String())
    linkedin_url = db.Column(db.String())
    bio = db.Column(db.Text())

    def __str__(self):
        return '%s %s (%s)' % (self.first_name, self.last_name, self.job_title)


class Event(db.Model):
    __tablename__ = 'event'
    id = db.Column(db.Integer(), primary_key=True)
    date = db.Column(db.Date())
    start_time = db.Column(db.Time())
    end_time = db.Column(db.Time())
    title = db.Column(db.String())
    address = db.Column(db.String())
    description = db.Column(db.Text())
    mentors …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask wtforms

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

如何在jinja2中获取WTForms Validator

我想要做的是检查表单对象具有哪种类型的表单验证器,以便我可以基于这些属性呈现字段.例如,如果表单具有最大长度验证,则将max-length属性添加到html表单.

我在想它的工作方式是这样的:

zip_code = TextField('Zip Code', [validators.Length(min=5, max=11)])
Run Code Online (Sandbox Code Playgroud)

将会像这样进入Jinja2宏:

{% if field.valdator "has max length" %}
  {% set class = class + ' maxlength="11" ' %}
{% endif %}
{{ field(class=class, **kwargs) }}
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask wtforms flask-wtforms

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

WTForms:如果数据存在,则用数据填充表单

我有以下 Flask-WTF 表格:

class PersonForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    age = IntegerField('Age', validators=[NumberRange(min=0)], render_kw={'type': 'number'})
    educated = BooleanField('Educated', render_kw={'type': 'checkbox'})
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过将值传递到表单中来预先填充表单,如下所示:

form = PersonForm(name='Johnny', age=25, educated=True)
Run Code Online (Sandbox Code Playgroud)

我注意到有一种更好的方法可以通过将一个对象注入到表单中来做到这一点(参考这里这里)。我已经尝试了以下方法,但是,它不起作用。我哪里出错了(对象应该是字典以外的东西)?

person = {'name': 'Johnny', 'age': 25, 'educated'=True}
form = PersonForm(obj=person)
Run Code Online (Sandbox Code Playgroud)

请注意,这些预先填充的值来自数据库。有些值已定义,有些则未定义。例如,另一个“人”可能看起来像{'name': 'Jessica', 'educated': True}(在这种情况下,年龄字段将为空)。

python forms wtforms flask-wtforms

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

Update model with WTForms form data

I have some Flask-SQLAlchemy models and Flask-WTF forms generated with wtforms_alchemy to represent them. I implemented a method on each model to update its attributes from a form's data. For each new model and field I have to update these methods, which is annoying. Is there a way to make this more automatic, or a a feature in the libraries I'm using that I'm missing?

def edit_car(car_id):
    form = CarForm(request.form)
    if form.is_valid():
        car = Car.query.get_or_404(car_id)
        car.from_form(form) # Update car fields …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

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

在 FlaskForm (WTForms) 中传递并使用变量

代码是不言自明的 - 我想将变量传递给FlaskForm子类以供进一步使用。

from flask import Flask, render_template_string
from flask_wtf import FlaskForm
from wtforms import StringField
from flask_wtf.csrf import CSRFProtect


app = Flask(__name__)
spam = 'bar'
app.secret_key = 'secret'
csrf = CSRFProtect(app)

@app.route('/')
def index():
    eggs = spam
    form = FooForm(eggs)
    return render_template_string(
    '''
    {{ form.bar_field.label }} {{ form.bar_field }}
    ''',form = form)

class FooForm(FlaskForm):
    def __init__(self, bar):
        super(FooForm, self).__init__()
        self.bar = bar
    bar_field = StringField("Label's last word is 'bar': {0}".format(self.bar))

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

我得到的是

line …
Run Code Online (Sandbox Code Playgroud)

python variables flask wtforms

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

如何使用 WTF 表单快速表单上传图像

我无法在其他字段中上传图像。虽然其他字段的数据存在,但图像不存在,因此表单没有被验证。

这里是后端,具体看图片文件字段,标有#IMAGE

from flask import Blueprint, request, render_template, redirect, flash
import os
from flask import current_app as app
from src.models.products.product import Product
from flask_wtf import FlaskForm
from wtforms import StringField, BooleanField, FileField, SubmitField
from wtforms.validators import InputRequired
from flask_wtf.file import FileField, FileRequired
from werkzeug.utils import secure_filename


dash_board_blueprint = Blueprint('dashboard', __name__, template_folder='templates')


class UploadForm(FlaskForm):
    name = StringField('Name', validators=[InputRequired()])
    category = StringField('Category', validators=[InputRequired()])
    sub_category = StringField('Sub Category', validators=[InputRequired()])
    size = StringField('Size', validators=[InputRequired()])
    variant = StringField('Variant', validators=[InputRequired()])
    price = StringField('Price', validators=[InputRequired()])
    enable_discount = …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms web flask-wtforms

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

Flask-WTF validate_on_submit() 未执行

我无法弄清楚为什么我的表单无法验证。我已经确保将 CSRF 字段插入到 HTML 中form.hidden_tag

这是我的注册表单的代码:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo


class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo(password)])
    submit = SubmitField('Register')
Run Code Online (Sandbox Code Playgroud)

这是我正在检查表单是否经过验证的函数。它确实提交,因为程序将“已提交”打印到我的终端中

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.is_submitted():
        print("submitted")
    if form.validate_on_submit():
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('home'))
    print(forms.errors)
    return render_template('register.html', title='Register', form=form)
Run Code Online (Sandbox Code Playgroud)

使用forms.errors,我收到以下错误消息: …

wtforms flask-wtforms

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