コード例 #1
0
class BlogPost(db.Model):
    __tablename__ = 'posts'

    id = Column(Integer, primary_key=True)
    headline = Column(String(255), nullable=False)
    body = Column(Text)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)

    user_id = Column(Integer, ForeignKey('users.id'))

    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    category = db.relationship('Category',
                               backref=db.backref('posts', lazy='dynamic'))

    # many to many BlogPost<->Keyword
    tags = db.relationship('Tag',
                           secondary=reltags,
                           lazy='subquery',
                           backref=db.backref('pages', lazy='dynamic'))

    comments = relationship('Comments', backref='posts', lazy='dynamic')

    # def __init__(self,headline,body,author):
    # self.author = author
    # self.headline = headline
    # self.body = body

    def __repr__(self):
        return "BlogPost(%r, %r, %r)" % (self.headline, self.body, self.author)
コード例 #2
0
ファイル: models.py プロジェクト: zxl2006001/flaskblog
class Post(db.Model):
    __tablename__ = 'post'
    query_class = PostQuery
    id = db.Column(db.Integer, primary_key=True)
    post_content = db.Column(db.Text)
    post_title = db.Column(db.String(100))
    post_name = db.Column(db.String(200), unique=True)
    post_create_time = db.Column(db.DateTime, default=datetime.utcnow)
    view_num = db.Column(db.Integer, default=0)
    comment_count = db.Column(db.Integer, default=0)
    status = db.Column(db.Integer, default=1)
    author_id = db.Column(db.Integer, default=1)
    post_modified_time = db.Column(db.DateTime, default=datetime.utcnow)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    categorys = db.relationship('Category', backref=db.backref(
        'posts', lazy='dynamic'), lazy='select')
    tags = db.relationship('Tag', secondary=article_tags,
                           backref=db.backref('posts', lazy='dynamic'))
    tags_name = db.Column(db.Text)

    def __init__(self, *args, **kwargs):
        super(Post, self).__init__(*args, **kwargs)

    def __repr__(self):
        return '<post %r>' % self.post_title
    
    @cached_property
    def comments(self):
        from apps.comment.models import Comment
        allcomments = Comment.query.filter(Comment.post_id == self.id).all()
        return allcomments
コード例 #3
0
ファイル: models.py プロジェクト: hongsa/hufsevaluation
class Rating(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    lecture = db.relationship('Lecture', backref=db.backref('rating_lecture', cascade='all, delete-orphan', lazy='dynamic'))
    lecture_id = db.Column(db.Integer, db.ForeignKey(Lecture.id))
    user = db.relationship('User', backref=db.backref('rating_user', cascade='all, delete-orphan', lazy='dynamic'))
    user_id = db.Column(db.Integer, db.ForeignKey(User.id))

    total = db.Column(db.Integer, default =0)
    difficulty = db.Column(db.Integer, default =0)
    study_time = db.Column(db.Integer, default =0)
    attendance = db.Column(db.Integer, default =0)
    grade = db.Column(db.Integer, default =0)
    achievement = db.Column(db.Integer, default =0)
    opinion = db.Column(db.Text())
    joinDATE = db.Column(db.DateTime(),default = get_current_time)

    def ev2(self):
        ev2 = self.difficulty /5  * 100
        return ev2

    def ev3(self):
        ev3 = self.study_time /5  * 100
        return ev3

    def ev4(self):
        ev4 = self.attendance /5  * 100
        return ev4

    def ev5(self):
        ev5 = self.grade /5  * 100
        return ev5

    def ev6(self):
        ev6 = self.achievement /5  * 100
        return ev6
コード例 #4
0
class R_Univ(db.Model):
    __tablename__ = 'r_univ'
    id = db.Column(db.Integer, primary_key=True)
    K_Univ_id = db.Column(db.Integer, db.ForeignKey('k_univ.univ_id'))
    k_univ = db.relationship('K_Univ',
                             backref=db.backref('r_univ',
                                                cascade='all, delete-orphan',
                                                lazy='dynamic'))
    I_Univ_id = db.Column(db.Integer, db.ForeignKey('i_univ.univ_id'))
    i_univ = db.relationship('I_Univ',
                             backref=db.backref('r_univ',
                                                cascade='all, delete-orphan',
                                                lazy='dynamic'))
コード例 #5
0
ファイル: database.py プロジェクト: inorilzy/flask_blog
class Article(db.Model):
    __tablename__ = 'article'
    __searchable__ = ['content', 'title']
    __analyzer__ = ChineseAnalyzer()

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    author = db.Column(db.String(32))
    title = db.Column(db.String(32))
    content = db.Column(db.Text)
    tag = db.relationship('Tag',
                          secondary='article_to_tag',
                          backref=db.backref('articles'),
                          lazy='dynamic')
    classify_id = db.Column(db.INTEGER, db.ForeignKey('classify.id'))
    classify = db.relationship('Classify', backref=db.backref('articles'))
コード例 #6
0
ファイル: models.py プロジェクト: jin-hao-chen/filegoback
class File(db.Model):

    __tablename__ = 'file'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    filename = db.Column(db.String(80), nullable=False)
    upload_time = db.Column(db.DateTime, default=datetime.datetime.now)
    size = db.Column(db.Float)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))

    sid = db.Column(db.String(10), db.ForeignKey('student.sid'))
    owner = db.relationship('Student', uselist=False, backref=db.backref('file'))

    def __init__(self, sid, filename, upload_time, size, category_id):
        self.sid = sid
        self.filename = filename
        self.upload_time = upload_time
        self.size = size
        self.category_id = category_id

    def __str__(self):
        return 'File(sid=%s, filename=%s, upload_time=%s, size=%s, category_id=%s)'\
               % (self.sid, self.filename, self.upload_time, self.size, self.category_id)

    def __repr__(self):
        return str(self)
コード例 #7
0
class ChatInfo(BaseModel, db.Model):
    __tablename__ = "s_chat_info"
    id = db.Column(db.Integer, primary_key=True)
    from_user_id = db.Column(db.Integer, db.ForeignKey("s_user_info.id"))
    chat_info = db.Column(db.Text)
    chat_user = db.relationship("ChatUserRelation",
                                backref=db.backref("s_chat_info"))
コード例 #8
0
class GroupInfo(BaseModel, db.Model):
    __tablename__ = "s_group_info"
    id = db.Column(db.Integer, primary_key=True)
    group_name = db.Column(db.String(30))
    avatar = db.Column(db.String(100), nullable=True)
    group_user = db.relationship("GroupUserRelation",
                                 backref=db.backref("s_group_info"))
コード例 #9
0
class UserGroup(BaseModel, db.Model):
    __tablename__ = "s_user_group"
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey("s_user_info.id"))
    group_name = db.Column(db.String(30))
    group_friend = db.relationship("GroupFriend",
                                   backref=db.backref("s_user_group"))
コード例 #10
0
ファイル: models.py プロジェクト: yonghanjung/hansjung
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    article_id = db.Column(db.Integer, db.ForeignKey('article.id'))
    artlcle = db.relationship('Article',
                              backref=db.backref('comments',
                                                 cascade='all, delete-orphan',
                                                 lazy='dynamic'))
    # Bidirection relationship
    '''
    class User(Base):
        __tablename__ = 'user'
        id = Column(Integer, primary_key=True)
        name = Column(String)

        addresses = relationship("Address", backref="user")

    class Address(Base):
        __tablename__ = 'address'
        id = Column(Integer, primary_key=True)
        email = Column(String)
        user_id = Column(Integer, ForeignKey('user.id'))
    '''
    author = db.Column(db.String(255))
    email = db.Column(db.String(255))
    password = db.Column(db.String(255))
    content = db.Column(db.Text())
    date_created = db.Column(db.DateTime(), default=db.func.now())
    likecount = db.Column(db.Integer, default=0, nullable=False)
    commentcheck = db.Column(db.Integer, default=0, nullable=False)
コード例 #11
0
ファイル: models.py プロジェクト: blueberry13/My_Atelier
class Process(db.Model):
    id_P = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text())
    #key = 
    A_id = db.Column(db.Integer, db.ForeignKey('article.id'))
    article = db.relationship('Article',
                              backref=db.backref('comments', cascade='all, delete-orphan', lazy='dynamic'))
コード例 #12
0
class UserInfo(BaseModel, db.Model):
    __tablename__ = "s_user_info"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(30), unique=True)
    phone = db.Column(db.String(30), unique=True)
    password_hash = db.Column(db.String(30))
    avatar = db.Column(db.String(100), nullable=True)
    sign = db.Column(db.String(30), nullable=True)
    user_group = db.relationship("UserGroup",
                                 backref=db.backref("s_user_info"))
    group_friend = db.relationship("GroupFriend",
                                   backref=db.backref("s_user_info"))
    group_user = db.relationship("GroupUserRelation",
                                 backref=db.backref("s_user_info"))
    chat_info = db.relationship("ChatInfo", backref=db.backref("s_user_info"))
    chat_user = db.relationship("ChatUserRelation",
                                backref=db.backref("s_user_info"))
    image = db.relationship("Image", backref=db.backref("s_user_info"))
    file = db.relationship("File", backref=db.backref("s_user_info"))

    @property
    def password(self):
        """对应password属性的读取操作"""
        raise AttributeError("不支持读取操作")

    @password.setter
    def password(self, value):
        """对应password属性的设置操作, value用户设置的密码值"""
        self.password_hash = generate_password_hash(value)

    def check_password(self, value):
        """检查用户密码, value 是用户填写密码"""
        return check_password_hash(self.password_hash, value)
コード例 #13
0
class Language(db.Model):
    __tablename__ = 'language'
    id = db.Column(db.Integer, primary_key=True)
    language = db.Column(db.String(255), nullable=False)
    level = db.Column(db.Integer, nullable=False)
    user_id = db.Column(db.ForeignKey('user.id'))
    user_language = db.relationship('User',
                                    backref=db.backref(
                                        'user_language',
                                        cascase='all, delete-orphan',
                                        lazy='dynamic'))
コード例 #14
0
ファイル: models.py プロジェクト: suhyung3/likelion
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    article_id = db.Column(db.Integer, db.ForeignKey('article.id'))
    article = db.relationship('Article',
                              backref=db.backref('comments',
                                                 cascade='all, delete-orphan',
                                                 lazy='dynamic'))
    author = db.Column(db.String(255))
    mail = db.Column(db.String(255))
    password = db.Column(db.String(255))
    content = db.Column(db.Text())
    date_created = db.Column(db.DateTime(), default=db.func.now())
コード例 #15
0
class Article(db.Model):
    __tablename__ = "article"
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(300))
    body = db.Column(db.Text)
    pubDate = db.Column(db.DateTime, default=datetime.now())
    published = db.Column(db.Boolean, nullable=False, default=False)
    user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
    category = db.relationship("Category",
                               secondary=post,
                               backref=db.backref("article", lazy="dynamic"))
    counter = db.relationship("Counters", backref="article", lazy=True)
コード例 #16
0
ファイル: models.py プロジェクト: CodeMath/jinrockets
class Job(db.Model):
	id = db.Column(db.Integer, primary_key=True)
	user_id = db.Column(db.String(255), db.ForeignKey(User.id))
	user = db.relationship('User', backref=db.backref('jobs', cascade='all, delete-orphan'))
	write_date = db.Column(db.DateTime(), default=db.func.now())
	
	# 분과
	department=db.Column(db.String(255))
	# 전공
	major=db.Column(db.String(255),default=u"없음")
	# 닉네임
	nic_name=db.Column(db.String(255),default=u"진로켓 유저")
	# 진로
	job=db.Column(db.String(255),default=u"없음")
	# 학과 한 줄평
	major_comment=db.Column(db.String(255),default=u"좋습니다.")
	# 학과 이야기
	major_story=db.Column(db.Text(65535),default=u"학과 분위기와 진로등 모두 만족합니다.")
	# 학과 만족도
	major_like=db.Column(db.String(255))
	# 복수전공 유무(y/n)
	check_double_major=db.Column(db.String(255))
	# 복수전공 과목
	double_major=db.Column(db.String(255),default=u"없음")
	# 진로를 선택하게 된 이유
	job_reason=db.Column(db.Text(65535),default=u"일반적으로 가는 진로라서 선택하였습니다.")

	
	# 진로와의 상관관계 점수(전공/자격증/복수전공/대외활동/독서)
	
	# 전공 공부
	point_major=db.Column(db.String(255))
	# 자격증
	point_licence=db.Column(db.String(255))
	# 복수전공
	point_double_major=db.Column(db.String(255))
	# 독서
	point_reading=db.Column(db.String(255))
	# 대외활동
	point_extra=db.Column(db.String(255))

	# 추가 사항(1~2) 우선 해당 내용 추가 안함. 오픈베타 시작 후 ajax이용해서 비동기식 
	point_ex_1=db.Column(db.String(255))
	point_ex_2=db.Column(db.String(255))

	def json_dump(self):
		return dict(job=self.job, count=0)
コード例 #17
0
ファイル: roles.py プロジェクト: muladzevitali/flask_default
class Role(db.Model, RoleMixin):
    __tablename__ = f'{table_prefix}_roles'

    id = db.Column(db.Integer,
                   db.Sequence(f'{table_prefix}_roles_id_seq',
                               start=10000,
                               increment=1),
                   primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))
    parent_id = db.Column(db.Integer, db.ForeignKey(f'{__tablename__}.id'))
    parent = db.relationship("Role", remote_side=[id])
    users = db.relationship(
        'User',
        secondary=f'{table_prefix}_users_roles_rel',
        backref=db.backref(f'{table_prefix}_roles.role_id'),
        lazy='dynamic')

    def __str__(self):
        return self.name

    @staticmethod
    def get_parent_default(role: 'Role', roles_list: List['Role']):
        """Recursive function for obtaining parent roles"""
        parent_roles: Optional[List['Role']] = Role.query.filter(
            Role.id == role.parent_id).all()
        # If deputies run recursion for each deputy
        if parent_roles:
            roles_list.extend(parent_roles)
            for parent_role in parent_roles:
                Role.get_parent_default(parent_role, roles_list)

        return roles_list

    @property
    def get_parents(self) -> Optional[List['Role']]:
        """Get all parent roles for current role"""
        parent_roles: Optional[List['Role']] = self.get_parent_default(
            self, [])
        parent_roles.append(self)

        return parent_roles

    @property
    def get_functions(self) -> List[str]:
        return [f'{function.hash}' for function in self.application_functions]
コード例 #18
0
class Nav(BaseModel, db.Model):
    """导航菜单"""
    __tablename__ = "mogu_nav"
    id = db.Column(db.Integer, primary_key=True, comment="ID")
    name = db.Column(db.String(80), comment="导航名称")
    link = db.Column(db.String(164), nullable=True, comment="导航链接")
    parent_id = db.Column(db.Integer,
                          db.ForeignKey('mogu_nav.id'),
                          comment="父导航ID")
    # 自关联
    parent = db.relationship('Nav',
                             uselist=False,
                             remote_side=[id],
                             backref=db.backref('children',
                                                uselist=True))  # 父导航

    def __repr__(self):
        return "%s" % (self.name)
コード例 #19
0
ファイル: models.py プロジェクト: zxl2006001/flaskblog
class Comment(db.Model):
    __tablename__ = 'comment'
    query_class = CommentQuery
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    posts = db.relationship('Post', backref=db.backref('comments', lazy='dynamic'))
    author_name = db.Column(db.String(50))
    author_email = db.Column(db.String(100))
    author_url = db.Column(db.String(1024))
    author_ip = db.Column(db.String(20))
    comment_create_time = db.Column(db.DateTime, default=datetime.utcnow)
    content = db.Column(db.Text)
    isvisible = db.Column(db.Integer, default=0)

    def __init__(self, *args, **kwargs):
        super(Comment, self).__init__(*args, **kwargs)

    def __repr__(self):
        return '<comment %r>' % self.content
コード例 #20
0
class User(db.Model):
    """用户表"""
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), default='')
    header_img = db.Column(db.String(100), default='')
    uuid = db.Column(db.String(32), unique=True)
    status = db.Column(db.Boolean, default=True)
    create_time = db.Column(db.DateTime, )
    u_activity = db.relationship('Activity',
                                 secondary=u_activity,
                                 backref=db.backref('users', lazy='dynamic'),
                                 lazy='dynamic')
    u_don = db.relationship("Consultation",
                            secondary=u_consultation,
                            backref='con')
    u_tag = db.relationship("Tag", secondary=u_tag, backref='tag')

    def __repr__(self):
        return str({'table': self.__tablename__, 'id': self.id})
コード例 #21
0
ファイル: models.py プロジェクト: CodeMath/Bookmarkables
class slideshare(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    user_name = db.Column(db.String(255))
    user_id = db.Column(db.String(255), db.ForeignKey(User.id))
    user = db.relationship('User',
                           backref=db.backref('slideshares',
                                              cascade='all, delete-orphan'))

    complains = db.Column(db.Integer, default=0)

    # 해당 URL올리기
    subject = db.Column(db.String(255))
    urls = db.Column(db.String(255))
    explain = db.Column(db.String(255))

    tag1 = db.Column(db.String(255), default="")
    tag2 = db.Column(db.String(255), default="")

    date = db.Column(db.DateTime, default=datetime.utcnow())
コード例 #22
0
class Event(db.Model):
    __tablename__ = 'event'
    id = db.Column(db.Integer, primary_key=True)
    host_id = db.Column(db.ForeignKey('user.id'))
    host = db.relationship('User',
                           backref=db.backref('events',
                                              cascade='all, delete-orphan',
                                              lazy='dynamic'))
    title = db.Column(db.String(255), nullable=False)
    theme = db.Column(db.String(64), nullable=False)
    content = db.Column(db.Text(), nullable=False)
    event_date = db.Column(db.String(255))
    event_date_created = db.Column(db.DateTime(), default=db.func.now())
    place_school = db.Column(db.String(255))
    contact = db.Column(db.String(255))
    cost = db.Column(db.Integer)
    limited_member_num = db.Column(db.Integer)
    attend_member_num = db.Column(db.Integer)
    recommend_count = db.Column(db.Integer)
    location = db.Column(db.String(255))
コード例 #23
0
class Comment(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    article_id = db.Column(db.Integer, db.ForeignKey('article.id'))
    #article_id is class Article's id. ,
    #small article is not class but var'article' in class Comment.
    # bring it from below

    article = db.relationship('Article',
                              backref=db.backref('comments',
                                                 cascade='all, delete-orphan',
                                                 lazy='dynamic'))
    #setting relationship between Models(in this case, between article and comment)
    # if we want to access comment's Model's data, use 'article.comments'
    #cascade is like falls from Article class, when delete Article, its comments will be deleted

    author = db.Column(db.String(255))
    email = db.Column(db.String(255))
    password = db.Column(db.String(255))
    content = db.Column(db.Text())
    #contents of comment
    date_created = db.Column(db.DateTime(), default=db.func.now())
コード例 #24
0
ファイル: models.py プロジェクト: CodeMath/Bookmarkables
class saving(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # 각 유저의 아이디를 누적으로?
    user_id = db.Column(db.String(255), db.ForeignKey(User.id))
    user = db.relationship('User',
                           backref=db.backref('savings',
                                              cascade='all, delete-orphan'))

    user_name = db.Column(db.String(255), default="북마커블")

    re_subject = db.Column(db.String(255))
    urls = db.Column(db.String(255))
    re_explain = db.Column(db.String(255))

    category = db.Column(db.String(255), default="북마커블")

    comment = db.Column(db.String(255), default="북마크 저장!")

    tag1 = db.Column(db.String(255), default="")
    tag2 = db.Column(db.String(255), default="")

    date = db.Column(db.DateTime, default=datetime.utcnow())
コード例 #25
0
ファイル: models.py プロジェクト: CodeMath/Bookmarkables
class user_bookmark(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # 유저의 facebook 아이디 값(확인값)
    user_id = db.Column(db.String(255), db.ForeignKey(User.id))
    user = db.relationship('User',
                           backref=db.backref('user_bookmarks',
                                              cascade='all, delete-orphan'))
    # 유저의 닉네임
    user_name = db.Column(db.String(255), default="북마커블")
    # 유저의 카테고리 등록
    category = db.Column(db.String(255), default="미 분류")
    # 제목
    subject = db.Column(db.String(255))
    # 링크 주소
    urls = db.Column(db.String(255))
    # 링크 설명 / 추후 수정가능?
    explain = db.Column(db.String(255), default="북마크 저장!")
    # 관련 링크 태그 / 추후 수정 가능하게끔
    tag1 = db.Column(db.String(255), default=" ")
    tag2 = db.Column(db.String(255), default=" ")
    # 저장한 북마크가 공개/비공개 인지 확인 값 (기본값은 0 으로 비공개 -> 공개로 바꾸면 "1" 로 바뀜)
    check_open = db.Column(db.String(10), default="0")
    # 시간 저장
    date = db.Column(db.DateTime, default=datetime.utcnow())
コード例 #26
0
ファイル: models.py プロジェクト: ThanHuuTuan/monitor
class User(db.Model):
    __tablename__ = 'auth_user'

    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    username = db.Column(db.String(120), unique=True)
    email = db.Column(db.String(120), unique=True)
    phone = db.Column(db.String(20))
    company = db.Column(db.String(255))
    country = db.Column(db.String(120))
    website = db.Column(db.String(120))
    industry = db.Column(db.String(120))
    company_size = db.Column(db.String(120))
    password = db.Column(db.String(255), nullable=False, server_default='')
    time_zone = db.Column(db.DateTime(timezone=False), )
    dst = db.Column(db.Boolean)
    logo_image_name = db.Column(db.Unicode(64))
    logo_image_path = db.Column(db.Unicode(128))
    permission_type = db.Column(mysql.ENUM('a', 'v', 'c'))
    parent = db.Column(db.Integer(), db.ForeignKey('auth_user.id'))
    is_admin = db.Column(db.Boolean)
    is_active = db.Column(db.Boolean, server_default='1')
    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())

    # Relationships
    roles = db.relationship('Role',
                            secondary='user_roles',
                            backref=db.backref('auth_user', lazy='dynamic'))
    contact_group = db.relationship('ContactGroup',
                                    secondary='contact_groups',
                                    backref=db.backref('user', lazy='dynamic'))
    plan = db.relationship(Plan, backref=db.backref('user'))

    def __init__(self,
                 first_name,
                 last_name,
                 email,
                 password,
                 phone=None,
                 country=None,
                 company=None,
                 website=None,
                 industry=None,
                 company_size=None,
                 parent=None,
                 is_admin=None,
                 logo_image_name=None):
        self.first_name = first_name
        self.last_name = last_name
        self.username = email
        self.email = email
        self.phone = phone
        self.company = company
        self.company_size = company_size
        self.industry = industry
        self.website = website
        self.country = country
        self.parent = parent
        self.logo_image_name = logo_image_name

        if password:
            self.set_password(password)
        if is_admin:
            self.is_admin = is_admin
        else:
            self.is_admin = False

    def set_password(self, password):
        self.password = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.pw_hash, password)

    def __repr__(self):
        return '<User %r>' % self.username

    @classmethod
    def email_is_available(self, email):
        if User.query.filter(User.email == email,
                             User.is_active == True).first():
            return False
        return True

    def __json__(self):
        return [
            'id', 'first_name', 'last_name', 'username', 'email', 'phone',
            'company', 'country', 'website', 'industry', 'company_size',
            'time_zone', 'is_admin', 'is_active', 'date_created',
            'date_modified'
        ]
コード例 #27
0
class Role(UserMixin, db.Model):
    __tablename__ = 'role1'
    id = db.Column(db.Integer, primary_key=True)
    uuid = db.Column(db.String(32), unique=True, nullable=False)
    username = db.Column(db.String(80), unique=True, nullable=False)
    pwd = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    default_avatar = db.Column(db.String(240))
    avatar = db.Column(db.String(240))
    code = db.Column(db.String(10))
    addtime = db.Column(db.DATETIME, index=True, default=datetime.now)
    article = db.relationship('Article', backref='role')
    profile = db.relationship('UserProfile', backref='role')
    comments = db.relationship('Comment', backref='author', lazy='dynamic')
    replies = db.relationship('Reply', backref='author', lazy='dynamic')
    likes = db.relationship('Likes', backref='author', lazy='dynamic')
    likes_comment = db.relationship('LikeComment',
                                    backref='author',
                                    lazy='dynamic')
    followed = db.relationship('Follow',
                               foreign_keys=[Follow.follower_id],
                               backref=db.backref('follower', lazy='joined'),
                               lazy='dynamic',
                               cascade='all, delete-orphan')
    followers = db.relationship('Follow',
                                foreign_keys=[Follow.followed_id],
                                backref=db.backref('followed', lazy='joined'),
                                lazy='dynamic',
                                cascade='all, delete-orphan')
    message_sent = db.relationship('Message',
                                   foreign_keys='Message.sender_id',
                                   backref='author',
                                   lazy='dynamic')
    message_received = db.relationship('Message',
                                       foreign_keys='Message.recipient_id',
                                       backref='recipient',
                                       lazy='dynamic')
    last_message_read_time = db.Column(db.DATETIME)
    last_comment_read_time = db.Column(db.DATETIME)
    last_like_read_time = db.Column(db.DATETIME)
    last_follow_read_time = db.Column(db.DATETIME)
    last_reply_read_time = db.Column(db.DATETIME)
    last_comment_like_time = db.Column(db.DATETIME)

    def new_comment_like(self):
        last_read_time = self.last_reply_read_time or datetime(1900, 1, 1)
        like_num = 0
        for i in self.comments:
            for j in i.likes:
                if j.time > last_read_time:
                    like_num += 1
        return like_num


# 统计新的赞

    def new_like(self):
        last_read_time = self.last_like_read_time or datetime(1900, 1,
                                                              1)  #上次查看的时间
        like_num = 0
        for i in self.article:  #遍历所有文章
            for j in i.likes:  #遍历文章下的赞
                if j.time > last_read_time:
                    like_num += 1  #大于上次查看时间的话+1
        return like_num

    # 统计新的评论
    def new_comment(self):
        last_read_time = self.last_comment_read_time or datetime(1900, 1, 1)
        comment_num = 0
        for i in self.article:
            for j in i.comments:
                if j.time > last_read_time:
                    comment_num += 1
        return comment_num

    # 统计新的关注
    def new_follow(self):
        last_read_time = self.last_follow_read_time or datetime(1900, 1, 1)
        follow_num = 0
        for i in self.followers:
            if i.times > last_read_time:
                follow_num += 1
        return follow_num

    def new_messages(self):
        last_read_time = self.last_message_read_time or datetime(1900, 1, 1)

        return Message.query.filter_by(recipient=self).filter(
            Message.time > last_read_time).count()

    def check(self, pwd):  # 对比输入的密码与原密码
        return self.pwd == pwd

    def is_liked(self, post_id):
        return self.likes.filter_by(article_id=post_id).first() is not None

    def like(self, post_id):
        if not self.is_liked(post_id):
            l = Likes()
            l.article_id = post_id
            l.user_id = self.uuid
            db.session.add(l)
            db.session.commit()

    def unlike(self, post_id):
        l = self.likes.filter_by(article_id=post_id).first()
        if l:
            db.session.delete(l)
            db.session.commit()

    def is_liked_comment(self, post_id):
        return self.likes_comment.filter_by(
            comment_id=post_id).first() is not None

    def like_comment(self, post_id):
        if not self.is_liked_comment(post_id):
            l = LikeComment()
            l.comment_id = post_id
            l.user_id = self.uuid
            db.session.add(l)
            db.session.commit()

    def unlike_comment(self, post_id):
        l = self.likes_comment.filter_by(comment_id=post_id).first()
        if l:
            db.session.delete(l)
            db.session.commit()

    def follow(self, user):
        if not self.is_following(user):
            f = Follow(follower=self, followed=user)
            db.session.add(f)
            db.session.commit()

    def unfollow(self, user):
        f = self.followed.filter_by(followed_id=user.uuid).first()
        if f:
            db.session.delete(f)
            db.session.commit()

    def is_following(self, user):
        return self.followed.filter_by(
            followed_id=user.uuid).first() is not None

    def is_followed_by(self, user):
        return self.followers.filter_by(
            follower_id=user.uuid).first() is not None

    @property
    def friends_post(self):
        follow = Role.query.filter_by(uuid=self.uuid).first()
        follower = follow.followers
        followed = follow.followed
        list1 = []
        list2 = []
        for i in follower:
            list1.append(i.follower.uuid)
        for j in followed:
            list2.append(j.followed.uuid)
        friend_list = [x for x in list1 if x in list2]
        u = Article.query.filter(Article.uuid.in_(friend_list))
        return u
コード例 #28
0
ファイル: users.py プロジェクト: muladzevitali/flask_default
class User(db.Model, UserMixin):
    __tablename__ = f'{table_prefix}_users'

    id = db.Column(db.Integer,
                   db.Sequence(f'{table_prefix}_users_id_seq', start=10000),
                   primary_key=True)
    authenticated = db.Column(db.Boolean(), default=0)
    active = db.Column(db.Boolean(), default=True)
    username = db.Column(db.String(50))
    email = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(64), nullable=False)
    first_name = db.Column(db.String(50))
    last_name = db.Column(db.String(50))
    manager_id = db.Column(db.Integer,
                           db.ForeignKey(f'{table_prefix}_users.id'))
    manager = db.relationship("User", remote_side=[id])
    roles = db.relationship(
        'Role',
        secondary=f'{table_prefix}_users_roles_rel',
        backref=db.backref(f'{table_prefix}_users.user_id'),
        lazy='dynamic')

    def create_user(self, username: str, first_name: str, last_name: str,
                    email: str, password: str):
        """Create user and insert into database"""
        self.username = username
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.password = self.hash_password(password)

        db.session.add(self)
        db.session.commit()

    @staticmethod
    def hash_password(password: str) -> hex:
        """Password hashing handler"""

        return sha256(password.encode()).hexdigest()

    def __repr__(self):
        return '%s' % self.username

    def __str__(self):
        return '%s' % self.username

    def get_id(self):
        return self.username

    def has_role(self, role_name: str) -> bool:
        """Check if the user has given role"""
        if any([role.name == role_name for role in self.roles]):
            return True

        return False

    @staticmethod
    def get_by_id(id_: int) -> 'User':
        """Get user by id"""
        user: '******' = User.query.filter(User.id == id_).first()

        return user

    def is_authenticated(self):
        return self.authenticated

    @staticmethod
    def get_deputies(current_user: '******', users_list: List['User']):
        """Recursive function for obtaining deputy users"""
        deputies: Optional[List['User']] = User.query.filter(
            User.manager_id == current_user.id).all()
        # If deputies run recursion for each deputy
        if deputies:
            users_list.extend(deputies)
            for deputy in deputies:
                User.get_deputies(deputy, users_list)

        return users_list

    def get_deputy_tree(self) -> Optional[List['User']]:
        """Get all deputies for current user INCLUDING SELF"""
        deputies_tree: Optional[List['User']] = self.get_deputies(self, [])
        deputies_tree.append(self)

        return deputies_tree

    @property
    def serialize(self):
        data = {
            'email': self.email,
            'first_name': self.first_name,
            'last_name': self.last_name,
            'username': self.username
        }

        return data

    def login(self):
        """Login user respect to flask_login"""
        self.authenticated = True
        db.session.add(self)
        db.session.commit()
        login_user(self, remember=False, duration=timedelta(hours=6))

    def logout(self):
        """Logout user respect to flask_login"""
        self.authenticated = False
        db.session.add(self)
        db.session.commit()
        logout_user()
コード例 #29
0
ファイル: models.py プロジェクト: muneeriks/Monitor
class User(db.Model):
    __tablename__ = 'auth_user'

    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    username = db.Column(db.String(120), unique=True)
    email = db.Column(db.String(120), unique=True)
    phone = db.Column(db.String(20))
    company = db.Column(db.String(255))
    country = db.Column(db.String(120))
    website = db.Column(db.String(120))
    industry = db.Column(db.String(120))
    company_size = db.Column(db.String(120))
    password = db.Column(db.String(255), nullable=False, server_default='')
    parent = db.Column(db.Integer(), db.ForeignKey('auth_user.id'))
    is_admin = db.Column(db.Boolean)
    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())

    # Relationships
    roles = db.relationship('Role',
                            secondary='user_roles',
                            backref=db.backref('auth_user', lazy='dynamic'))

    def __init__(self,
                 first_name,
                 last_name,
                 email,
                 password,
                 phone=None,
                 country=None,
                 company=None,
                 website=None,
                 industry=None,
                 company_size=None,
                 parent=None,
                 is_admin=None):
        self.first_name = first_name
        self.last_name = last_name
        self.username = email
        self.email = email
        self.phone = phone
        self.company = company
        self.company_size = company_size
        self.industry = industry
        self.website = website
        self.country = country
        self.parent = parent

        if password:
            self.set_password(password)
        if is_admin:
            self.is_admin = is_admin
        else:
            self.is_admin = False

    def set_password(self, password):
        self.password = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.pw_hash, password)

    def __repr__(self):
        return '<User %r>' % self.username

    @classmethod
    def email_is_available(self, email):
        if User.query.filter(User.email == email).first():
            return False
        return True
コード例 #30
0
ファイル: models.py プロジェクト: TempleToth/flask-blog
class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(16), unique=True, index=True)
    email = db.Column(db.String(64), unique=True, index=True)
    password_hash = db.Column(db.String(128))
    confirmed = db.Column(db.Boolean, default=False)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), nullable=True)

    nickname = db.Column(db.String(16))
    location = db.Column(db.String(64))
    about_me = db.Column(db.Text)
    member_since = db.Column(db.DateTime, default=datetime.utcnow)
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)
    avatar_url = db.Column(db.String(128))

    posts = db.relationship('Post', backref='author')

    is_fans = db.relationship('Follow',
                              foreign_keys=[Follow.fans_id],
                              backref=db.backref('fans', lazy='joined'),
                              lazy='dynamic',
                              cascade='all, delete-orphan')
    is_blogger = db.relationship('Follow',
                                 foreign_keys=[Follow.blogger_id],
                                 backref=db.backref('blogger', lazy='joined'),
                                 lazy='dynamic',
                                 cascade='all, delete-orphan')

    comments = db.relationship('Comment', backref='user')

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        if self.role is None:
            self.role = Role.query.filter_by(default=True).first()

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

    def __str__(self):
        return self.username

    def set_last_seen(self):
        self.last_seen = datetime.utcnow()
        db.session.add(self)
        db.session.commit()

    def get_avatar_url(self):
        return url_for('main.get_file', filename=self.avatar_url)

    # 禁止读取密码
    @property
    def password(self):
        raise AttributeError('password 不是一个可读属性')

    # 设置密码
    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

    # 验证密码,密码正确则返回True
    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def generate_confirmation_token(self, expiration=3600):
        s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)
        return s.dumps({'confirm': self.id}).decode('utf-8')

    def confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True

    # 用来判断一个用户是否具备某种权限
    def can(self, perm):
        return self.role is not None and self.role.has_permission(perm)

    # 用来判断某个用户是否有管理员权限
    def is_administrator(self):
        return self.can(Permission.ADMIN)

    # 关注用户
    def follow(self, user):
        if not self.is_following(user):
            f = Follow(fans=self, blogger=user)
            try:
                db.session.add(f)
                db.session.commit()
            except:
                db.session.rollback()

    # 取消关注
    def unfollow(self, user):
        if self.is_following(user):
            f = Follow.query.filter_by(fans=self, blogger=user).first()
            try:
                db.session.delete(f)
                db.session.commit()
            except:
                db.session.rollback()

    # 判断是否关注了某个用户
    def is_following(self, user):
        return Follow.query.filter_by(fans=self, blogger=user).count() > 0

    # 判断是否被某个用户关注
    def is_followed_by(self, user):
        return Follow.query.filter_by(fans=user, blogger=self).count() > 0

    # 获取关注用户的文章
    @property
    def followed_posts(self):
        return Post.query.join(Follow,
                               Follow.blogger_id == Post.author_id).filter(
                                   Follow.fans_id == self.id)

    # 生成一个token令牌
    def generate_auth_token(self, expiration):
        s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration)
        return s.dumps({'id': self.id}).decode('utf-8')

    # token验证
    @staticmethod
    def verify_auth_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except:
            return None
        return User.query.get(data['id'])

    def to_json(self):
        user_json = {
            'url': url_for('api.get_user', id=self.id),
            'username': self.username,
            'email': self.email,
            'nickname': self.nickname,
            'location': self.location,
            'about_me': self.about_me,
            'member_since': self.member_since,
            'last_seen': self.last_seen,
            'avatar_url': self.get_avatar_url(),
            'posts_url': url_for('api.get_posts_for_user', id=self.id),
        }
        return user_json