forked from gergely/calendar-social
Create the User and Role models
This commit is contained in:
parent
1f3cb17751
commit
61fe581df6
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
__pycache__/
|
__pycache__/
|
||||||
|
app/local.db
|
||||||
|
@ -21,10 +21,13 @@ from flask import Flask, render_template
|
|||||||
|
|
||||||
class CalendarSocialApp(Flask):
|
class CalendarSocialApp(Flask):
|
||||||
def __init__(self, name, config=None):
|
def __init__(self, name, config=None):
|
||||||
|
from app.models import db
|
||||||
|
|
||||||
Flask.__init__(self, name)
|
Flask.__init__(self, name)
|
||||||
|
|
||||||
config_name = os.environ.get('ENV', config or 'dev')
|
config_name = os.environ.get('ENV', config or 'dev')
|
||||||
self.config.from_pyfile(f'config_{config_name}.py', True)
|
self.config.from_pyfile(f'config_{config_name}.py', True)
|
||||||
|
db.init_app(self)
|
||||||
|
|
||||||
|
|
||||||
app = CalendarSocialApp(__name__)
|
app = CalendarSocialApp(__name__)
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
DEBUG = True
|
DEBUG = True
|
||||||
ENV = 'dev'
|
ENV = 'dev'
|
||||||
|
SQLALCHEMY_DATABASE_URI = 'sqlite:///local.db'
|
||||||
|
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||||
|
53
app/models.py
Normal file
53
app/models.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from flask_security import UserMixin, RoleMixin
|
||||||
|
from flask_security.utils import hash_password
|
||||||
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
|
||||||
|
db = SQLAlchemy()
|
||||||
|
users_roles = db.Table(
|
||||||
|
'users_roles',
|
||||||
|
db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
|
||||||
|
db.Column('role_id', db.Integer(), db.ForeignKey('roles.id')))
|
||||||
|
|
||||||
|
|
||||||
|
class User(db.Model, UserMixin):
|
||||||
|
__tablename__ = 'users'
|
||||||
|
id = db.Column(db.Integer(), primary_key=True)
|
||||||
|
|
||||||
|
#: The username of the user. This is also the display name and thus is immutable
|
||||||
|
username = db.Column(db.String(length=50), unique=True, nullable=False)
|
||||||
|
|
||||||
|
#: The email address of the user
|
||||||
|
email = db.Column(db.String(length=255), unique=True, nullable=True)
|
||||||
|
|
||||||
|
#: The (hashed) password of the user
|
||||||
|
password = db.Column(db.String(length=255))
|
||||||
|
|
||||||
|
#: A flag to show whether the user is enabled (active) or not
|
||||||
|
active = db.Column(db.Boolean(), default=False)
|
||||||
|
|
||||||
|
#: The timestamp when this user was created
|
||||||
|
created_at = db.Column(db.DateTime(), default=datetime.utcnow)
|
||||||
|
|
||||||
|
#: The timestamp when the user was activated
|
||||||
|
confirmed_at = db.Column(db.DateTime())
|
||||||
|
|
||||||
|
#: The roles of the user
|
||||||
|
roles = db.relationship('Role',
|
||||||
|
secondary=users_roles,
|
||||||
|
backref=db.backref('users', lazy='dynamic'))
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'<User {self.id}({self.username})>'
|
||||||
|
|
||||||
|
|
||||||
|
class Role(db.Model, RoleMixin):
|
||||||
|
__tablename__ = 'roles'
|
||||||
|
id = db.Column(db.Integer(), primary_key=True)
|
||||||
|
|
||||||
|
#: The name of the role
|
||||||
|
name = db.Column(db.Unicode(length=80), unique=True)
|
||||||
|
|
||||||
|
#: A description of the role
|
||||||
|
description = db.Column(db.UnicodeText)
|
Loading…
Reference in New Issue
Block a user