标签: flask-wtforms

WTForms:如何渲染 HTML5 小部件?

我正在尝试使用 WTForms 颜色输入字段。

这就是我定义表单的方式:

from wtforms.widgets.html5 import ColorInput

class ColoursForm(Form):
   background_color = ColorInput()
Run Code Online (Sandbox Code Playgroud)

这是视图:

@app.route("/colours/<token>/", methods=['GET', 'POST'])
def edit_colours(token):
   form = ColoursForm(request.form)
   if request.method == 'GET':
       return render_template('colours_edit.html', form=form, token=token)
   else:  # Request = post

      return redirect(url_for('view_scoreboard', token=token))
Run Code Online (Sandbox Code Playgroud)

在我的 Jinja2 模板 (colours_edit.html) 中,我这样做:

<p> {{ form.background_color }} Pick a color here </p>
Run Code Online (Sandbox Code Playgroud)

但是,它没有按预期渲染 HTML 颜色选择器,而是在渲染的 HTML 中看到了这一点:

<wtforms.widgets.html5.ColorInput 对象位于 0x10b836e90> 在此处选择颜色

为什么输入没有被渲染?

python flask wtforms flask-wtforms

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

使用 Flask 从 HTML 表中删除单个 SQLAlchemy 行

我创建了一个 HTML 表,其中列出了 SQLAlchemy 表中的许多行。该表是使用 jinja2 模板通过循环创建的:

{% for single_merchant in merchants %}
        <tr>
            <td>{{single_merchant.id}}</td>
            <td><button type="button" class="btn btn-sm btn-outline-danger">Delete</button>
        </tr>
Run Code Online (Sandbox Code Playgroud)

每行都有一个“删除”按钮。我正在尝试弄清楚如何分配删除按钮来删除该特定的 SQLalchemy 行。我尝试将按钮创建为名为的单独烧瓶形式delete_form,并添加一个id="{{single_merchant.id}}属性,button如下所示:

{% for single_merchant in merchants %}
            <tr>
                <td>{{single_merchant.id}}</td>
                <form method="post">
                {{ delete_form.hidden_tag() }}
                <td>{{ delete_form.delete(id=single_merchant.id) }}</td>
                </form>
            </tr>
Run Code Online (Sandbox Code Playgroud)

然后在 app.py 中我创建了一个 if 语句:

if delete_form.validate_on_submit():

    print(f"merchant to delete ID - {delete_form.delete.id}")
Run Code Online (Sandbox Code Playgroud)

我希望获得single_merchant.id输出并在 if 语句中使用它从我的 SQLAlchemy 表中删除特定商家,但相反,我得到了输出,merchant to delete ID - delete即使从 HTML 文件中该id属性的值为 1,因为 …

python sqlalchemy flask flask-sqlalchemy flask-wtforms

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

Flask-WTForms - 简单的CRUD示例 - 值不填充表单

我已经阅读了我能找到的每个教程和一些文档,但找不到我的问题.我以"公司"为例,尽可能简化了这一点.当我加载我的/ company/edit/2 url时,表单不会填充该值.

视图

@app.route('/company/edit/<id>')
def company_edit(id):
  company = {'id': 2, 'company_name': 'SomeCo'} #dummy object
  form = CompanyForm(obj=company)
  #form = CompanyForm(None, company) #tried this too, based on API
  return render_template('company_form.html', form = form)
Run Code Online (Sandbox Code Playgroud)

形式对象

class CompanyForm(Form):
  company_name = TextField('company_name', validators = [Required()])
Run Code Online (Sandbox Code Playgroud)

表单模板

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}

<form action="" method="post" name="login">
    {{form.hidden_tag()}}
    <p>
        Company Name:<br>
        {{form.company_name(size=80)}}<br>
    </p>
    <p><input type="submit" value="Sign In"></p>
</form>

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我的理解是这应该工作 - 路由/公司/编辑/ x将调用company_edit(x),它声明虚拟公司对象(稍后从数据库中提取),实例化表单,传递公司对象,然后渲染传递表单的模板.表单模板应该能够匹配公司对象中的字段名称,表单对象中的相应输入名称,并使用值"SomeCo"填充文本字段.我错过了一些明显的东西吗

谢谢!

python flask flask-wtforms

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

flask-wtf表单验证不适用于我的新应用程序

我之前使用过烧瓶,并且我已经进行了工作表单验证,但由于某种原因,它不能用于我的新应用程序.这是表单的基本代码.

from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField, validators,ValidationError

class subReddit(Form):
    subreddit = TextField('subreddit', [validators.Required('enter valid subreddit')])
    next = SubmitField('next')
    change = SubmitField('change')
    user = TextField('user', [validators.Required('enter valid user')])
    fetch = SubmitField('fetch comments')
Run Code Online (Sandbox Code Playgroud)

我有subreddit作为验证字段,所以如果它是空的,我希望它抛出错误并重新加载页面.

HTML:

<form class='sub' action="{{ url_for('sr') }}" method='post'>
  {{ form.hidden_tag() }}                    
  <p>
    if you want to enter more than one subreddit, use the + symbol, like this:
    funny+pics+cringepics
  <p>
    <br/>
    {% for error in form.subreddit.errors %}
  <p>{{error}}</p>
  {% endfor %}
  {{form.subreddit.label}}
  {{form.subreddit}}
  {{form.change}}                    
</form>
Run Code Online (Sandbox Code Playgroud)

我的routes.py中也有CSRF_ENABLED = True.我错过了什么?当我将subredditfield留空并单击更改时,它只是重新加载页面,没有错误.这是一个问题,因为该字段中的任何内容都将记录在我的数据库中,并且它不能为空. …

python flask flask-wtforms

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

每个烧瓶视图功能有多个路径是不好的做法吗?

所以基本上我有render_template基于if语句的多个返回,并且它们返回我的jinja2模板响应的不同变量.我相信我可以将这些路径分解为自己的功能(同样我可以将我的模板分解为多个模板(例如edit.html模板而不是{% if editform %}我模板中的模板)),但我喜欢这样的想法任何给定页面的单一视图功能和模板.

在我花更多时间创建其余视图函数之前,我想确保我正在做的事情不会在以后咬我.

代码如下,谢谢!

@app.route('/admin/users/', defaults={'id': None}, methods = ['GET'])
@app.route('/admin/users/<id>', methods = ['GET'])
@app.route('/admin/users/edit/<id>', methods = ['GET', 'POST'])
@login_required
def users(id):
    if not current_user.role == ROLE_ADMIN:
        flash('You do not have access to view this page.')
        return redirect(url_for('index'))

    if id:
        user = User.query.filter_by(id = id).first()

        if 'edit' in request.path:
            editform = UserForm()

            if editform.validate_on_submit():
                user.username = editform.username.data
                user.email = editform.email.data
                user.role = editform.role.data

                db.session.add(user)
                db.session.commit()

                return redirect('/admin/users/' + str(user.id))

            editform.username.data = user.username
            editform.email.data = …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-wtforms

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

当我刷新页面时,为什么WTForms会再次提交?

我创建了以下表单:

class ContentForm(Form):
    content = StringField(u'write here' , validators=[Required()])
    submit = SubmitField(u'Let them know' )    
Run Code Online (Sandbox Code Playgroud)

当我提交时,事情似乎有效.但是,当我之后刷新页面时,表单会再次提交.我该如何解决?

python flask wtforms flask-wtforms

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

python wtf AttributeError:'ObjectIdField'对象没有属性'help_text'

基于教程,我正在尝试创建一个表单来进行一些测量.似乎显示数据的部分正在工作,但是当使用model_form命令生成输入表单时,它会突然出现以下错误:

在转换'description'中输入文件"/myproject/lib/python3.4/site-packages/flask_mongoengine/wtf/orm.py",第49行:field.help_text或'',

AttributeError:'ObjectIdField'对象没有属性'help_text'

错误发生在我的代码的这一行:

form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
Run Code Online (Sandbox Code Playgroud)

这是我的view.py代码:

from flask import Blueprint, request, redirect, render_template, url_for
from flask.views import MethodView
from flask.ext.mongoengine.wtf import model_form
from pyReefLog.models import Measurement

measurements = Blueprint('measurements', __name__, template_folder='templates')


class List(MethodView):
    cls = Measurement

    def get(self):
        measurements = self.cls.objects.all()
        return render_template('measurements/list.html', measurements=measurements)


class Detail(MethodView):

    def get_context(self, creator=None):
        form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))

        if creator:
            measurement = Measurement.objects.get_or_404(creator=creator)
            if request.method == 'POST':
                form = form_cls(request.form, inital=measurement._data)
            else:
                form = …
Run Code Online (Sandbox Code Playgroud)

python mongoengine flask flask-wtforms flask-mongoengine

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

TypeError:__ init __()得到一个意外的关键字参数'password'

我无法找出导致此错误的原因

TypeError: __init__() takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)

这是指向

@user_blueprint.route('/login', methods=['GET', 'POST'])
def login():
    if g.user.is_authenticated:
        flash("You are already Logged in", 'warning')
        return redirect(url_for('members'))
    error = ""
    form = LoginForm()
    if request.method == 'POST':
        if form.validate_on_submit():
            user = User.query.filter_by(username=form.username.data).first()
            if user is not None and bcrypt.check_password_hash(user.password, form.password.data):
                login_user(user, remember=form.remember.data)
                flash('You are sucessfuly Logged in', 'success')
                return redirect(url_for('members'))
            else:
                error = "You have entered an incorrect username and password"
    return render_template("front/login.html", forms=form, error=error)
Run Code Online (Sandbox Code Playgroud)

LoginForm如下所示:

class LoginForm(Form):
    username …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-sqlalchemy flask-login flask-wtforms

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

WTF form.validate_on_submit()不起作用

我有以下代码,我正在提交表格.当我点击提交按钮时,我的表单验证打印出来False.我已经检查并确保我包含了不同帖子中的所有内容,但我无法让它验证.有什么我做错了吗?

@app.route('/index.html', methods=['GET', 'POST'])
    def index():   
            user = {'nickname': 'Rafa'}
            form = FilterForm()
            print("about to validate", file=sys.stderr)
            if form.validate_on_submit():
                    print("validated", file=sys.stderr)
                    filters_array = form.filter.split(',')
                    streaming(filters_array)
                    response = {"response", "yes"}
                    redirect("/authenticate")



            return render_template('index.html',
                    title="Home",
                    user=user,
                    form=form)

    class FilterForm(Form):
            filter = StringField('filter', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)

这是我的Jinja文件

    {% block content %}    
      <h1> I have successfully navigated to the title pagee </h1> 
      <h1> Hello, {{user.nickname}}!</h1> 
      <h1> Get Tweets </h1> 
      <p> Please enter a comma delimited list of filters</p>   
      <form action="" method="post" name="login"> 
        {{form.filter(size=80)}} 
      <input …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-wtforms

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

无法从Flask-WTF导入FlaskForm

我有一个现有的Flask应用程序,我正在尝试添加Flask-Blogging扩展.尝试ImportError: cannot import name FlaskForm时添加扩展名会引发.flask_bloggingfrom flask_wtf import FlaskForm

Traceback (most recent call last):
  File "run.py", line 11, in <module>
    blog_engine = BloggingEngine(app, sql_storage)
  File "/usr/local/lib/python2.7/dist-packages/flask_blogging/engine.py", line 66, in __init__
    self.init_app(app, storage)
  File "/usr/local/lib/python2.7/dist-packages/flask_blogging/engine.py", line 96, in init_app
    from .views import create_blueprint
  File "/usr/local/lib/python2.7/dist-packages/flask_blogging/views.py", line 11, in <module>
    from flask_blogging.forms import BlogEditor
  File "/usr/local/lib/python2.7/dist-packages/flask_blogging/forms.py", line 1, in <module>
    from flask_wtf import FlaskForm
ImportError: cannot import name FlaskForm
Run Code Online (Sandbox Code Playgroud)

我正在使用Flask 0.11.1和Flask-WTF 0.12.

python flask flask-wtforms

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