Python things: Unterschied zwischen den Versionen
Aus Froggis Wissenssammlung
Froggi (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „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.Sele…“) |
Froggi (Diskussion | Beiträge) |
||
| Zeile 9: | Zeile 9: | ||
get_pk=lambda a: a.id, | get_pk=lambda a: a.id, | ||
get_label=lambda a: a.name) | get_label=lambda a: a.name) | ||
| + | |||
| + | |||
| + | === User Role models for Flask-SQLAlchemy === | ||
| + | |||
| + | old... | ||
| + | |||
| + | <pre> | ||
| + | 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') | ||
| + | </pre> | ||
| + | |||
| + | new...? UserMixin and RoleMixin from Flask-Security with minimal requirements included (see also: [https://pythonhosted.org/Flask-Security/models.html Flask Security (Models)] | ||
| + | |||
| + | <pre> | ||
| + | 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), | ||
| + | {}) | ||
| + | </pre> | ||
Version vom 5. August 2019, 12:21 Uhr
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),
{})