Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 蓝图和用户模型_Database_Flask_Flask Sqlalchemy - Fatal编程技术网

Database 蓝图和用户模型

Database 蓝图和用户模型,database,flask,flask-sqlalchemy,Database,Flask,Flask Sqlalchemy,我最近开始玩flask,为此我开发了一个小沙盒web应用程序,它将作为我想到的其他项目的容器。到目前为止,我专注于实现一个用户系统,我觉得一切似乎都在工作。我还实现了我的用户角色控制版本 现在我想开始开发web应用程序的其他方面。比如说,我想开发一个博客,我自己的图像存储,我的一群朋友的成就系统,等等。我的意图是对所有子应用程序使用相同的用户模型,我一直在尝试绘制这种关系的样子,但是我没有想到任何不同,然后将它们全部添加到我的主用户类中。我担心的是,这样做会导致用户类太大,附加了很多关系;此外,

我最近开始玩flask,为此我开发了一个小沙盒web应用程序,它将作为我想到的其他项目的容器。到目前为止,我专注于实现一个用户系统,我觉得一切似乎都在工作。我还实现了我的用户角色控制版本

现在我想开始开发web应用程序的其他方面。比如说,我想开发一个博客,我自己的图像存储,我的一群朋友的成就系统,等等。我的意图是对所有子应用程序使用相同的用户模型,我一直在尝试绘制这种关系的样子,但是我没有想到任何不同,然后将它们全部添加到我的主用户类中。我担心的是,这样做会导致用户类太大,附加了很多关系;此外,并非每个用户都可以访问/需要每个子应用程序

是否有更好的方法将我的用户与其他子应用程序“链接”

文件结构 用户类 例如,如果我要添加一个微博,我会这样做: 1.在blog_blupprint/models.py创建必要的模型 2.然后将关系添加到用户模型中
谢谢你的帮助!所有用户都可以访问所有子应用程序吗?您好@supershot,谢谢您的关注和时间!不,他们不会。我的想法是,用户只能访问对他有用的子应用程序。所有用户都可以访问所有子应用程序吗?您好@supershot,谢谢您的关注和宝贵的时间!不,他们不会。我的想法是,用户只能访问对他有用的子应用程序。
-- MyApp
   -- auth_blueprint
      -- forms.py
      -- routes.py
      -- models.py
      -- utils.py
   -- achievements_blueprint
      -- forms.py
      -- routes.py
      -- models.py
   [static, templates, etc]
from myapp import db, login_manager
from flask_login import UserMixin
from flask import url_for

from random import randint
from os import listdir

__PROFILE_PICS_PATH = 'myapp/static/media/img/profile_pics/'

def new_profile_pic():
    pics = listdir(__PROFILE_PICS_PATH)
    if '.DS_Store' in pics:
        pics.remove('.DS_Store')
    n_pics = len(pics)
    return '/static/media/img/profile_pics/'+ str(randint(1, n_pics)) +'.png'

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

# Define a base model for other database tables to inherit
class Base(db.Model, UserMixin):

    __abstract__  = True

    id            = db.Column(db.Integer, primary_key=True)
    date_created  = db.Column(db.DateTime,  default=db.func.current_timestamp())
    date_modified = db.Column(db.DateTime,  default=db.func.current_timestamp(),
                                        onupdate=db.func.current_timestamp())

# Define a User model
class User(Base):

    __tablename__ = 'users'

    first_name = db.Column(db.String(20), nullable=False, default='First Name')
    last_name = db.Column(db.String(30), nullable=False, default='Last Name')
    email = db.Column(db.String(120), unique=True, nullable=False)
    username = db.Column(db.String(20), unique=True, nullable=False) 
    password = db.Column(db.String(60), nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default=new_profile_pic())

    # Define the relationship to Role via UserRoles
    roles = db.relationship('Role', secondary='user_roles')

    def __repr__(self):
        return f"User('{self.username}','{self.email}','{self.image_file}')"

    def has_roles(self, role_names):
        return len([role for role in self.roles if role.name in role_names])


# Define the Role data-model
class Role(Base, db.Model):
    __tablename__ = 'roles'

    name = db.Column(db.String(50), unique=True)

# Define the UserRoles association table
class UserRoles(Base, db.Model):
    __tablename__ = 'user_roles'

    user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
    role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))
-- MyApp
   -- blog_blueprint
      -- forms.py
      -- routes.py
      -- models.py
[etc]
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)