标签: wtforms

使用WTForms的populate_obj()方法与Flask微框架

我有一个模板,允许用户编辑他们的用户信息.

<form method="post">
    <table>
        <tr>
            <td>Username:</td>
            <td>{{user['username']}}</td>
        </tr>
        <tr>
            <td>New Password:</td>
            <td> <input type="password" name="password"></td>
            <td>{% if form.password.errors %} {{form.password.errors}} {% endif %}<td>
        </tr>
        <tr>
            <td>Re-enter Password:</td>
            <td> <input type="password" name="confirm_password">
            </td>
        </tr>
        <input type='hidden' name='username' value="{{user['username']}}">
        <tr>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
</form>
Run Code Online (Sandbox Code Playgroud)

我还有一个用于处理用户编辑的视图功能.我目前使用的数据库是带有MongoKit模块的MongoDB.到目前为止,我只能在视图功能中做到这一点,但没有运气.

def edit():
    username = request.args.get('user')
    user = User.find_one({'username':username}) # Is this a correct way of doing it?
    form = UserForm(**what should be placed here?**, obj=user)

    if request.method == 'POST' and form.validate(): …
Run Code Online (Sandbox Code Playgroud)

python flask mongokit wtforms

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

如何使用WTForms和SQLAlchemy更新多对多数据?

我使用Flask Framework在我的App构建上遇到了一个小问题.

我正在尝试创建一个简单的用户+权限模块.要归档它,我在用户和权限表之间存在多对多关系.

这是我的模型,形式和路线

模型

user_perm = db.Table('user_perm',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
    db.Column('perm_id', db.Integer, db.ForeignKey('permissions.id'))
)

class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), unique=True, nullable=False)
    pwdhash = db.Column(db.String(16), nullable=False)
    email = db.Column(db.String(128))
    permissions = db.relationship('Permission', secondary=user_perm, backref=db.backref('users', lazy='dynamic'))

    def __init__(self, username, pwdhash, email, perms):
        self.username = unicode(username)
        self.pwdhash = pwdhash
        self.email = email
        self.permissions = perms

    def __repr__(self):
        return '<User {0}>'.format(self.username)

class Permission(db.Model):
    __tablename__ = 'permissions'
    id = db.Column(db.Integer)
    perm = db.Column(db.String(50), primary_key=True, unique=True, nullable=False)

    def …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask wtforms flask-sqlalchemy

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

如何禁用wtforms SelectField选项验证?

我有一个wtforms表单

class MyForm(Form):
    names = SelectField('name', choices=[])
Run Code Online (Sandbox Code Playgroud)

名称字段的选择是动态构建的,并通过ajax调用在模板中呈现.当我提交表单时,它会引发异常"不是一个有效的选择".我不希望表单为我验证名称字段的选择.如何禁用验证?

python flask wtforms

7
推荐指数
3
解决办法
3450
查看次数

在wtforms中调用validate时输入错误

我在行中有TypeError,我在表单上调用'validate()'.

错误是:

   Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/valery/projects/easy_booking/easy_booking/controllers/users.py", …
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 wtforms flask-wtforms

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

麻烦在mongoengine上渲染listfield model_form

我正在使用Flask,mongoengine进行项目,我正在尝试从http://docs.mongodb.org/manual/tutorial/write-a-tumblelog-application-with-flask-mongoengine/获取基本的东西.

从上面的链接实现了所有内容后,我在Post中为"tags"添加了一个新字段,当我尝试创建帖子时,我的标签没有显示输入框.

任何帮助表示赞赏.

我的代码如下

class Post(db.Document):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    title = db.StringField(max_length=255, required=True)
    slug = db.StringField(max_length=255, required=True)
    body = db.StringField(required=True)
    views = db.IntField(default=0)
    category = db.StringField()
    tags = db.ListField(db.StringField(max_length=30))
Run Code Online (Sandbox Code Playgroud)

模板

{% macro render(form) -%}
<fieldset>
{% for field in form %}
    {% if field.type in ['CSRFTokenField', 'HiddenField'] %}
        {{ field() }}
    {% else %}
    <div class="clearfix {% if field.errors %}error{% endif %}">
        {{ field.label }}
    <div class="input">
    {% if field.type == 'ListField' %}
    {% for subfield in …
Run Code Online (Sandbox Code Playgroud)

python mongoengine flask wtforms flask-mongoengine

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

在wtforms中选择SelectField并通过javascript添加<option>

我目前正在金字塔中的某个项目上工作,并且在wtforms SelectField方面存在问题.

我有一个3个SelectField字段:

  • car_make(例如,"audi")
  • car_model(例如,"audi 80")
  • car_version(例如,"AUDI 80 B4").

我可以在视图中加载car_make选项.其余SelectFields(car_model,car_version)的选择我将通过AJAX/javascript在客户端加载(我可以在选择car_make时选择car_model等等).

问题是,当我提交表单时,car_model和car_version会引发"无效选择",因为(在SelectField.pre_validation第431行中)self.choices为空.

我怎样才能解决这个问题?

python wtforms pyramid

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

如何在Flask中验证失败时覆盖html默认"请填写此字段"?

我有一个带有DataRequired验证器和相关错误消息的Flask-WTF表单.但是,Chrome浏览器似乎忽略了我的错误消息,只显示"请填写此字段".如何让Flask覆盖它并显示我的消息?

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

class SignupForm(FlaskForm):
    first_name = StringField('First Name', validators=[DataRequired(message='Hey, put in your first name!')])
    last_name = StringField('Last Name', validators=[DataRequired("What, you can't remember your last name?")])
    email = StringField('Email', validators=[DataRequired('Gonna need your email address!')])
    password = PasswordField('Password', validators=[DataRequired('Really need a password, Dude!')])
    submit = SubmitField('Sign Up')
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

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

在我的表单中使用 MultipleFileField() 时 FileRequiredValidator() 不起作用

我的 UploadForm 类:

    from app import app
    from flask_wtf.file import FileRequired, FileAllowed
    from wtforms.fields import MultipleFileField
    from wtforms.validators import InputRequired,DataRequired
  class UploadForm(FlaskForm):
     .
     .
     .
     roomImage = MultipleFileField('Room',validators=[FileAllowed(['jpg', 'png'], 'Image only!'), FileRequired('File was empty!')] )
     .
     .
     .#there are other fields here which are  not relevant to  the problem at hand
Run Code Online (Sandbox Code Playgroud)

HTML模板

{% extends "base.html" %}

{% block content %}
 <h1>Upload Your Images</h1>
<form  action="/" enctype="multipart/form-data" method="post"  >
    {{ form.csrf_token }}
    Room<br />
    {{form.roomImage()}}
    .
    .
    . <MORE THINGS THAT …
Run Code Online (Sandbox Code Playgroud)

python validation flask python-3.x wtforms

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

如何向 WTForms 添加 Bootstrap 验证

我将 WTForms 与 Flask 结合使用,我想集成Bootstrap 表单验证来检查表单中的错误。我有一个基本的登录表单设置,如下所示:

class LoginForm(FlaskForm):
    """Login form."""

    email = EmailField(
        "Email Address", validators=[DataRequired(), Email(), Length(min=6, max=40)]
    )
    password = PasswordField(
        "Password", validators=[DataRequired()]
    )

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

    def validate(self):
        """Validate the form."""
        initial_validation = super(LoginForm, self).validate()
        if not initial_validation:
            return False

        self.user = User.query.filter_by(email=self.email.data).first()
        if not self.user:
            self.email.errors.append("Unknown email address!")
            return False

        if not self.user.check_password(self.password.data):
            self.password.errors.append("Invalid password!")
            return False

        if not self.user.verified:
            self.email.errors.append("Please verify your email address!") …
Run Code Online (Sandbox Code Playgroud)

jinja2 flask python-3.x wtforms bootstrap-4

6
推荐指数
2
解决办法
4594
查看次数