Python things

Aus Froggis Wissenssammlung
Wechseln zu:Navigation, Suche

When data comes back from the client it is treated as a string by WTForms unless a callable is passed to the coerce keyword argument of the wtforms.fields.SelectField constructor:

  area = SelectField(coerce=int)

Alternately, if you are using SQLAlchemy you could use wtforms.ext.sqlalchemy.fields.QuerySelectField (wtforms_sqlalchemy if you are using WTForms 3+):


  area = QuerySelectField(query_factory=Area.objects.all,
                           get_pk=lambda a: a.id,
                           get_label=lambda a: a.name)


User Role models for Flask-SQLAlchemy

old...

class Role(db.Model, RoleMixin):
    __tablename__ = table_prefix + "role"
    id = db.Column(db.Integer(), primary_key=True)
    role = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))
    users = db.relationship(
        'User',
        secondary=table_prefix + 'user_roles',
        back_populates='roles',
        lazy='dynamic')


class User(UserMixin, db.Model):
    __tablename__ = table_prefix + "user"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    email = db.Column(db.String(100), index=True, unique=True)
    language = db.Column(db.String(10), default="en_UK")
    roles = db.relationship(
        'Role',
        secondary=table_prefix + 'user_roles',
        back_populates='users',
        cascade='all, delete',
        lazy='dynamic')

new...? UserMixin and RoleMixin from Flask-Security with minimal requirements included (see also: Flask Security (Models)

class Role(db.Model, RoleMixin):
    __tablename__ = table_prefix + "role"
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))


class User(db.Model, UserMixin):
    __tablename__ = table_prefix + "user"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    email = db.Column(db.String(100), index=True, unique=True)
    active = db.Column(db.Boolean(), default=False)
    confirmed_at = db.Column(db.DateTime())
    language = db.Column(db.String(10), default="en_UK")
    roles = db.relationship(
        'Role',
        secondary=table_prefix + 'userrole',
        backref=db.backref('users', lazy='dynamic'),
        passive_deletes=True)

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

class UserRole(db.Model):
    __tablename__ = table_prefix + 'userrole'
    user_id = db.Column(
                        db.Integer(),
                        db.ForeignKey(table_prefix
                                      + 'user.id',
                                      ondelete='CASCADE')
                        )
    role_id = db.Column(
                        db.Integer(),
                        db.ForeignKey(table_prefix + 'role.id')
                        )
    __table_args__ = (
        PrimaryKeyConstraint(
            user_id,
            role_id),
        {})