标签: flask-wtforms

WTForms创建自定义小部件

WTForms文档非常不合适,它们甚至没有向您显示自定义窗口小部件的一个示例,该窗口小部件不是从另一个窗口小部件派生的.

我想创建一个按钮类型,这不是<input>在HTML中:

submit = InlineButton(name='submit', type='submit', title='Save this page', textWithinSpan='Save')
Run Code Online (Sandbox Code Playgroud)

这就是我正在尝试的:

from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput, html_params
from flask import Markup

class InlineButtonWidget(object):
  text = ''
  html_params = staticmethod(html_params)

  def __init__(self, input_type='submit', **kwargs):
    self.input_type = input_type

  def __call__(self, field, **kwargs):
    kwargs.setdefault('id', field.id)
    kwargs.setdefault('type', self.input_type)
    if 'value' not in kwargs:
        kwargs['value'] = field._value()
    return Markup('<button type="submit" %s><span>%s</span></button>' % (self.html_params(name=field.name, **kwargs), kwargs['textWithinSpan']))


class InlineButton(Field):
  widget = InlineButtonWidget()

  def __init__(self, label='', **kwargs):
    self.widget = InlineButtonWidget('submit', label)
  def __call__(self, …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

8
推荐指数
2
解决办法
7803
查看次数

如何知道我点击了烧瓶中的哪个按钮?

在我当前的项目中,我的索引页面显示了几个 torrent,每个 torrent 都有一个启动或停止 torrent 的按钮。

我使用表单和循环创建页面,因此表单始终具有相同的名称。但我需要知道用户单击了哪个按钮才能知道要停止哪个 torrent!

这是模板:

{% block content %}
 <h1>Hello, {{user}} !</h1>

 {% for torrent in torrents %}
      <form action="/index" method="post" name="torrent">
           {{torrent.control.hidden_tag()}}
           <p><a href='/torrent/{{torrent.id}}'>{{torrent.name}}</a> is {{torrent.status}} and {{torrent.progress}} % finished. <input type="submit" value="Start / Stop">
           </p>
      </form>
  {% endfor %}
Run Code Online (Sandbox Code Playgroud)

这是视图:

  @app.route('/index', methods = ['GET', 'POST'])
  def index():
  user = 'stephane'

  torrents = client.get_torrents()

  # for each torrent, we include a form which will allow start or stop
  for torrent in torrents:
    torrent.control = TorrentStartStop() …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

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

WTForms:同一页面上的两个表单?

我有一个动态网页,应该处理两种形式:登录表单注册表单.我正在使用WTForms来处理这两种形式,但是我在使它工作时遇到了一些麻烦,因为两种形式都被渲染到同一页面.

以下是我的网页登录表单的代码:

PYTHON:
class Login(Form):
    login_user = TextField('Username', [validators.Required()])
    login_pass = PasswordField('Password', [validators.Required()])

@application.route('/index', methods=('GET', 'POST'))
def index():
    l_form = Login(request.form, prefix="login-form")
    if request.method == 'POST' and l_form.validate():
        check_login = cursor.execute("SELECT * FROM users WHERE username = '%s' AND pwd = '%s'"
        % (l_form.login_user.data, hashlib.sha1(l_form.login_pass.data).hexdigest()))
        if check_login == True:
            conn.commit()
            return redirect(url_for('me'))
    return render_template('index.html', lform=l_form)


HTML:
<form name="lform" method="post" action="/index">
    {{ lform.login_user }}
    {{ lform.login_pass }}
    <input type="submit" value="Login" />
</form>
Run Code Online (Sandbox Code Playgroud)

以下是我的网页注册表格的代码: …

python forms flask wtforms flask-wtforms

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

使用Flask,WTForm,SQLAlchemy和Jinja2的完整多对一示例

这是我的HTML下拉菜单.该值是子表的主键.

<select id="category" name="category">
   <option selected value="__None"></option>
   <option value="1">Category Number One</option>
   <option value="2">Category Number Two</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我需要使用值整数1而不是"类别编号一"更新Post.category_id.这是我的代码.

# create new post
@app.route('/admin/post', methods=['GET', 'POST'])
@login_required # Required for Flask-Security
def create_post():
    form = PostForm()
    if form.validate_on_submit():
        post = Post(title=form.title.data,
                    body=form.body.data,
                    pub_date=form.pub_date.data,
                    cateogry_id=form.category.data)
        db.session.add(post)
        db.session.commit()
        flash('Your post has been published.')
        return redirect(url_for('admin'))
    posts = Post.query.all()
    return render_template('create_post.html', form=form, posts=posts)
Run Code Online (Sandbox Code Playgroud)

我试过制作......

cateogry_id=form.category.data
cateogry_id=form.category.value
Run Code Online (Sandbox Code Playgroud)

现在不是那么好!

python flask wtforms flask-sqlalchemy flask-wtforms

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

如何在烧瓶中构建一个get-form帖子

好的,所以我是新手,想知道我会用什么对象或工具来做这件事.我想创建一个表单,用户输入一些文本,单击提交按钮,然后他们提交的文本绑定为python字符串,并在其上运行一个函数,然后将该文本发布回Web他们正在查看的页面,其中包含该功能的返回值.这是一个例子:

HTML格式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<form action = "/" method="get">
    <input type="text" name="mail" size="25">
    <input type="submit" value="Submit">
</form>

<textarea cols="50" rows="4" name="result"></textarea>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

那么这就是我认为应该是url函数的样子

@app.route('/', methods=['GET', 'POST'])
    def form():
         if request.method == 'GET':
             input_text = request.data #step to bind form text to python string
              new_text = textfunction(input_text) #running the function on the retrieved test.
              return (new_text) # no idea if this is write, but returns text after modification.
Run Code Online (Sandbox Code Playgroud)

设置它的最佳方法是什么?将变量作为输入html的值是否正确?需要一些帮助.

html python flask flask-wtforms

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

使用Flask-WTForms,我如何设置html的表单部分的样式?

我通过Flask-WTF非常简化的wiki阅读,并且无法理解我能用它做什么.我的印象是<form>html 的部分现在只能看起来像

<form method="post">
    {{ form.hidden_tag() }}
    {{ form.name }}
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

但我真的想要使用物化的样式,例如:

        <div class="row">
            <div class="input-field col s6">
                <i class="material-icons prefix">account_circle</i>
                <input value="FN" id="first_name" type="text" class="validate">
                <label class="active" for="first_name">First Name</label>
            </div>
            <div class="input-field col s6">
                <input value="LN" id="last_name" type="text" class="validate">
                <label class="active" for="last_name">Last Name</label>
            </div>
        </div>
Run Code Online (Sandbox Code Playgroud)

我在哪里能适应{{ form.first_name }}{{ form.last_name }}进入?

编辑:让我详细说明我的答案:例如,我想要像Materialized datepicker(一个很好的弹出日历,让用户选择日期),这应该在<input class='datepicker' length="50">,但现在我正在替换整<input>行与{{ form.date }}...我失去了编辑课程的特权,但没有.

python flask wtforms flask-wtforms

8
推荐指数
2
解决办法
9999
查看次数

有没有办法在 Flask WTForms 中创建数据列表字段?

有谁知道datalist在 Flask 中使用 WTForms创建字段的方法吗?

我知道如何创建一个,SelectField但如果它不在列表中,我需要允许用户输入他们自己的值。

这就是我想做的http://www.w3schools.com/tags/tag_datalist.asp

谢谢

python flask wtforms flask-wtforms

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

`form.validate_on_submit()`和`form.validate()`之间的区别

form.validate_on_submit()和之间有什么区别form.validate()

Flask WTF文档中,作者使用form.validate_on_submit().代码有效.当我替换form.validate_on_submit()form.validate(),我发现行为没有区别.我form.validate_on_submit()在源form.validate() 代码中找不到,但我找到了代码.

validation python-3.x flask-wtforms

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

预填充 WTForms 字段的当前值以对其进行编辑

我在模态中有一个表单,用于编辑对某个项目(香水)的评论。一款香水可以有多个评论,评论存在于一系列嵌套文档中,每个文档都有自己的 _id。

我正在通过将 EditReviewForm 提交到此edit_review路线来编辑每个特定评论(以防用户想要在提交后编辑他们对香水的评论):

@reviews.route("/review", methods=["GET", "POST"])
@login_required
def edit_review():
    form = EditReviewForm()
    review_id = request.form.get("review_id")
    perfume_id = request.form.get("perfume_id")
    if form.validate_on_submit():
        mongo.db.perfumes.update(
            {"_id": ObjectId(perfume_id), <I edit my review here> })
        return redirect(url_for("perfumes.perfume", perfume_id=perfume_id))
    return redirect(url_for("perfumes.perfume", perfume_id=perfume_id))
Run Code Online (Sandbox Code Playgroud)

这条路线重定向到我的香水路线,其中显示了香水及其包含的所有评论。

这是perfume路线:

@perfumes.route("/perfume/<perfume_id>", methods=["GET"])
def perfume(perfume_id):
    current_perfume = mongo.db.perfumes.find_one({"_id": ObjectId(perfume_id)})
    add_review_form = AddReviewForm()
    edit_review_form = EditReviewForm()
    cur = mongo.db.perfumes.aggregate(etc)
    edit_review_form.review.data = current_perfume['reviews'][0]['review_content']
    return render_template(
        "pages/perfume.html",
        title="Perfumes",
        cursor=cur,
        perfume=current_perfume,
        add_review_form=add_review_form,
        edit_review_form=edit_review_form
    )
Run Code Online (Sandbox Code Playgroud)

我的问题

找到一种方法来获取该review _id过程并将其放入我的perfume路线中,以便我可以使用当前值预先填充我的 EditReviewForm。否则,对于编辑评论的用户来说,表单看起来是空的。 …

javascript python jinja2 flask flask-wtforms

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

Flask WTForms:验证至少一个字段的 InputRequired

有没有一种方法可以在WTFforms中实现验证,强制要求至少有一个字段是必需的?

例如,我有两个StringFields,我想确保用户在单击“提交”之前至少在其中一个字段中写入一些内容。

field1 = StringField('Field 1', validators=[???])
field2 = StringField('Field 2', validators=[???])
Run Code Online (Sandbox Code Playgroud)

我应该写什么来代替???InputRequired()在这种情况下,无法完成这项工作,因为我需要将其分配给其中一个字段或同时分配给两个字段。我怎样才能做到这一点?

python flask flask-wtforms

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