标签: flask-wtforms

WTForms:如何将“自动对焦”属性添加到 StringField

我对 WTForms、Flask-WTF 比较陌生。我无法弄清楚如何从表单定义中简单地将 HTML5 属性“自动聚焦”添加到表单字段之一。我想在 Python 代码中这样做,而不是在 Jinja 模板中。这是我所拥有的:

class NameForm(Form):
    name1 = StringField("Nom d'utilisateur :",
                    validators=[Required(), Length(1, 16)])
    pwd1 = PasswordField("Mot de passe :",
                     validators=[Required(), Length(1, 16)])
    mail1 = StringField("Compte GMail du calendrier :",
                    validators=[Required(), Email()])
    submit = SubmitField('Envoyer')
Run Code Online (Sandbox Code Playgroud)

我只想将“autofocus”属性添加到“name1”字段中。

我在路线中试过这个:

@app.route('/', methods=['GET', 'POST'])
def form():
    name1 = None
    pwd1 = None
    mail1 = None
    msg = None
    # Tests
    Name_Form_kwargs = {"name1": "" ,"autofocus" :"true"}
    Name_Form = NameForm(**Name_Form_kwargs)
    print Name_Form.name1
    # 
    form = NameForm()
    .....
Run Code Online (Sandbox Code Playgroud)

但这只会更改字段值,不会添加任何属性:

<input id="name1" …
Run Code Online (Sandbox Code Playgroud)

python wtforms flask-wtforms

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

在 SelectField 和 HiddenField 之间动态更改 WTForms 字段类型

我有一个 WTForms 字段(value_currency),我希望有时是 SelectField,有时是 HiddenField。我对创建新项目和编辑现有项目的页面使用相同的视图和模板。如果我加载页面来创建一个新项目,我希望这个字段是一个 SelectField,如果我加载页面来编辑一个现有项目,我希望这个字段是一个 HiddenField,因为它是一个不可编辑的字段。

这是我到目前为止所拥有的:

形式

class PromoForm(Form):
    value = StringField('value')
    currencies = Currency.query.order_by(Currency.id).all()
    currency_choices = []
    for currency in currencies:
        currency_choice = (currency.id, currency.name)
        currency_choices.append(currency_choice)
    value_currency = SelectField('value_currency', choices=currency_choices)
Run Code Online (Sandbox Code Playgroud)

看法

@app.route('/promo/<id>', methods=['GET', 'POST'])
@login_required
def promo(id):
    form = PromoForm()
    # Existing promo will pass in its id
    # id = 0 if a new promo is to be created
    if id != str(0):
        # Load existing promo
        promo = Promo.query.get(id)
        # display value in decimal format …
Run Code Online (Sandbox Code Playgroud)

python flask flask-wtforms

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

Jinja、Flask 和 WTForms:如何在字段中传递参数?

我正在关注本教程http://flask.pocoo.org/docs/0.10/patterns/wtforms/

这是一个带有宏的 _formhelpers.html 模板示例:

{% macro render_field(field) %}
  <dt>{{ field.label }}
  <dd>{{ field(**kwargs)|safe }}
  {% if field.errors %}
    <ul class=errors>
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
    </ul>
  {% endif %}
  </dd>
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

这里的 register.html 模板利用了 _formhelpers.html 模板:

{% from "_formhelpers.html" import render_field %}
<form method=post action="/register">
  <dl>
    {{ render_field(form.username) }}
    {{ render_field(form.email) }}
    {{ render_field(form.password) }}
    {{ render_field(form.confirm) }}
    {{ render_field(form.accept_tos) }}
  </dl>
  <p><input type=submit value=Register>
</form>
Run Code Online (Sandbox Code Playgroud)

它最终生成了一个序列:

<dt><label for="email">Email Address</label> …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask wtforms flask-wtforms

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

在 Flask 中获取当前用户 ID

我对 Python 还是很陌生(老实说,一般来说,编程)。我目前正在制定一种待办事项清单,我需要它来将待办事项放入适当的课程中(这都与教育相关)。所以,问题很简单。我将此作为 Flask 驱动的路线:

@app.route('/add_course', methods=('GET', 'POST'))
@login_required
def course():
    form = forms.CourseForm()
    if form.validate_on_submit():
        models.Course.create(teacher=g.user._get_current_object(),
                             name=form.name.data.strip(),
                             difficulty=form.level.data.strip(),
                             description=form.description.data.strip())
        flash("Course successfully created!", "success")
        return redirect(url_for('index'))
    return render_template('add_course.html', form=form)
Run Code Online (Sandbox Code Playgroud)

然后我把这个放在forms.py. 你可以看到我用聪明的标记来表明我的问题在哪里。它说THE_PROBLEM

def courses():
    try:
        courses = models.Course.select(models.Course.id,
                                   models.Course.name,
                                   models.Course.difficulty).where(THE_PROBLEM)
        course_list = []
        for course in courses:
            course_list.append((str(course.id), course.name + ' - ' + course.difficulty.title()))
        return course_list
    except models.DoesNotExist:
        return [('', 'No courses')]


class ToDoForm(FlaskForm):
    name = StringField("What's up?", validators=[
    DataRequired()
    ])
    due_date = DateTimeField('When?', format='%Y-%m-%d %H-%M')
    course …
Run Code Online (Sandbox Code Playgroud)

python flask flask-login flask-wtforms

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

表单验证失败时重定向(Flask-WTForms)

我正在尝试将 Flask-WTF 用于我添加到我最近继承的 Flask 应用程序的新表单。我对 Flask 生态系统相当陌生(对 WTForms 完全陌生),四年来我没有做过任何 Web 开发。

Flask-WTF 文档中的示例代码在表单验证失败时呈现页面,而不是重定向(Post/Redirect/Get)。此时,浏览器刷新将重新提交之前的 POST。这不好,对吧?虽然大多数人似乎没有对这种情况给予任何关注,但我确实看到一些人认为这是需要避免的(例如这里这里)。

那么在使用 Flask-WTF 时如何避免这个问题呢?如果我在验证失败时重定向,我想我将失去在每个字段上显示验证错误的能力。或者也许我不应该担心这种情况?

post-redirect-get flask wtforms flask-wtforms

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

如何管理队列中到 Flask 服务器的请求?

我正在构建一个简单的 Flask 服务器,它将为一小群人提供编译服务。

可以使用url连接到服务器,将他的功能代码输入到a中</textarea>,然后点击一个“ submit”按钮,该按钮将在后台编译代码,然后将其显示</textarea>在同一页面上的另一个上。每个这样的编译请求可能需要几分钟,所以我想我需要一些队列来存储这些用户的请求,以防一些用户同时发出请求。最好的方法是什么?我应该创建一个Lib/Queue并手动管理所有内容,然后将回调排队等等吗?

我假设有一些已知的方法可以将向服务器发出的此类请求排队,而这只是不知道。我不认为我需要在这里重新发明轮子。

html flask flask-wtforms

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

使用 Flask-wtforms 更改文本区域的值

我正在用来flask-wtforms创建一个文本区域。

body = TextAreaField('body')
Run Code Online (Sandbox Code Playgroud)

我想更改文本区域的值,您可以像这样在 html 中执行此操作。

<textarea>other value then default</textarea>
Run Code Online (Sandbox Code Playgroud)

如何将其与 Flask-wtforms 集成?

我的模板如下所示:

{{ form.body(rows="20") }} <!--texarea -->
Run Code Online (Sandbox Code Playgroud)

通过一个简单的输入字段,我可以做这样的事情:

{{ form.body(value="other value then default") }} <!-- input field -->
Run Code Online (Sandbox Code Playgroud)

我需要在模板本身中设置默认值。因为它将包含该页面所涉及的文章的信息。

html python flask python-2.7 flask-wtforms

5
推荐指数
2
解决办法
3887
查看次数

多个字段的 Flask WTform 验证

基于两个或多个条目验证 WTform 的最佳方法是什么?即在下面的表格中,我想验证数据库中不存在具有提供的名称和地址的公司。

class CompanyForm(FlaskForm):
    name=StringField('Company Name', validators=[DataRequired()])
    address=StringField('Street Address', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

像这样的东西...

    def validate_name(self, name, address):
        company = Company.query.filter_by(name=name.data, address=address.data).first()
        if company is None:
            raise ValidationError('This company already exists in our database.')
Run Code Online (Sandbox Code Playgroud)

我通读了关于 SO 的文档和类似的问题,但我仍然无法弄清楚。

validation wtforms flask-wtforms

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

如何在 python Flask 中验证 html 表单?

我在登录页面中有一个 HTML 表单,我想通过 ajax 将表单数据发送到 /data rout。
问题是在后端验证此 HTML 表单。
我知道 Flask WTF 表单,但使用这种方法会在后端生成表单,这不是我的情况。

from flask import Flask, request, url_for
...
@app.route("/data", methods=["GET", "POST"])
def get_data():
if request.method == "POST":
    username = request.form["username"]
    ...  
Run Code Online (Sandbox Code Playgroud)

我的 html 表单:

<form method="POST" action="">
<input type="text" name="username">
<input type="submit" value="Send">
</form>  
Run Code Online (Sandbox Code Playgroud)

一种困难的方法是使用正则表达式验证每个字段并为它们编写几个 if 条件。我想知道更简单的方法吗?

python flask wtforms flask-wtforms

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

带参数的 Flask 表单

我试图用一个参数定义一个 Flask 表单。这是我的方法:

forms.py

class RegisterPatternForm(FlaskForm):
    cursorPatients = MongoClient('localhost:27017').myDb["coll"].find({"field1": self.myParam}).sort([("id", 1)])
    patientOpts = []
    for pt in cursorPatients:
        row = (str(pt.get("id")), "{} {}, {}".format(pt.get("surname1"), pt.get("surname2"), pt.get("name")))
        patientOpts.append(row)

    patients = SelectMultipleField('Select the patient', validators=[Optional()], choices=patientOpts)
    submit = SubmitField('Register')

    def __init__(self, myParam, *args, **kwargs):
        super(RegisterPatternForm, self).__init__(*args, **kwargs)
        self.myParam = myParam
Run Code Online (Sandbox Code Playgroud)

routes.py

myParam = 5
form = RegisterPatternForm(myParam)
Run Code Online (Sandbox Code Playgroud)

基本上,我想读取在 form 上myParam定义的变量。在作品中插入参数,以及在. 它失败的地方是读取以.routes.pyRegisterPatternFormroutes.py__init__RegisterPatternFormcursorPatients

因此,我的问题是,如何解决此问题才能读取myParam表单中的值?

python flask flask-wtforms

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