示例#1
0
class Comment(db.Model):
    __tablename__ = "comments"
    PER_PAGE = 40
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    nickname = db.Column(db.Unicode(50))
    website = db.Column(db.String(100))
示例#2
0
class Link(db.Model):
    __tablename__ = 'links'
    PER_PAGE = 80
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode(50), nullable=False)
    link = db.Column(db.String(100), nullable=False)
    logo = db.Column(db.String(100))
    description = db.Column(db.Unicode(100))
    email = db.Column(db.String(50))
    passed = db.Column(db.Boolean, default=False)
    create_date = db.Column(db.DateTime, default=datetime.utcnow)

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

    #TODO A
    def __str__(self):
        return self.name
示例#3
0
文件: users.py 项目: imfht/flaskapps
class Twitter(db.Model):

    __tablename__ = 'twitter'

    id = db.Column(db.Integer, primary_key=True)

    user_id = db.Column(db.Integer,
                        db.ForeignKey(User.id, ondelete='CASCADE'),
                        nullable=False,
                        unique=True)

    token = db.Column(db.String(50))
    token_secret = db.Column(db.String(50))

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

    def __str__(self):
        return self.user_id

    def __repr__(self):
        return "<%s>" % self
示例#4
0
文件: blog.py 项目: imfht/flaskapps
class Link(db.Model):

    __tablename__ = "links"

    PER_PAGE = 80

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode(50), nullable=False)
    link = db.Column(db.String(100), nullable=False)
    logo = db.Column(db.String(100))
    description = db.Column(db.Unicode(100))
    email = db.Column(db.String(50))
    passed = db.Column(db.Boolean, default=False)
    created_date = db.Column(db.DateTime, default=datetime.utcnow)

    class Permissions(object):
        def __init__(self, obj):
            self.obj = obj

        @cached_property
        def edit(self):
            return moderator

        @cached_property
        def delete(self):
            return moderator

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

    @cached_property
    def permissions(self):
        return self.Permissions(self)

    def __str__(self):
        return self.name
示例#5
0
文件: users.py 项目: imfht/flaskapps
class UserCode(db.Model):

    __tablename__ = 'usercode'

    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.String(20), nullable=False)
    role = db.Column(db.Integer, default=User.MEMBER)

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

    def __str__(self):
        return self.code

    def __repr__(self):
        return "<%s>" % self
示例#6
0
文件: users.py 项目: imfht/flaskapps
class User(db.Model):

    __tablename__ = 'users'

    query_class = UserQuery

    PER_PAGE = 50
    TWEET_PER_PAGE = 30

    MEMBER = 100
    MODERATOR = 200
    ADMIN = 300

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True)
    nickname = db.Column(db.String(20))
    email = db.Column(db.String(100), unique=True, nullable=False)
    _password = db.Column("password", db.String(80), nullable=False)
    role = db.Column(db.Integer, default=MEMBER)
    activation_key = db.Column(db.String(40))
    date_joined = db.Column(db.DateTime, default=datetime.utcnow)
    last_login = db.Column(db.DateTime, default=datetime.utcnow)
    last_request = db.Column(db.DateTime, default=datetime.utcnow)
    block = db.Column(db.Boolean, default=False)

    class Permissions(object):
        def __init__(self, obj):
            self.obj = obj

        @cached_property
        def edit(self):
            return Permission(UserNeed(self.obj.id)) & admin

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

    def __str__(self):
        return self.nickname

    def __repr__(self):
        return "<%s>" % self

    @cached_property
    def permissions(self):
        return self.Permissions(self)

    def _get_password(self):
        return self._password

    def _set_password(self, password):
        self._password = hashlib.md5(password).hexdigest()

    password = db.synonym("_password",
                          descriptor=property(_get_password, _set_password))

    def check_password(self, password):
        if self.password is None:
            return False
        return self.password == hashlib.md5(password).hexdigest()

    @cached_property
    def provides(self):
        needs = [RoleNeed('authenticated'), UserNeed(self.id)]

        if self.is_moderator:
            needs.append(RoleNeed('moderator'))

        if self.is_admin:
            needs.append(RoleNeed('admin'))

        return needs

    @property
    def is_moderator(self):
        return self.role >= self.MODERATOR

    @property
    def is_admin(self):
        return self.role >= self.ADMIN

    @cached_property
    def twitter_api(self):
        if self.twitter and self.twitter.token \
                        and self.twitter.token_secret:
            api = twitter.Api(current_app.config['TWITTER_KEY'],
                              current_app.config['TWITTER_SECRET'],
                              self.twitter.token, self.twitter.token_secret)
        else:
            api = None

        return api

    @cached_property
    def tweets(self):
        api = self.twitter_api
        if api:
            info = api.VerifyCredentials()
            try:
                tweets = api.GetUserTimeline(screen_name=info.screen_name,
                                             count=self.TWEET_PER_PAGE)
            except:
                return []
        else:
            return []
        return tweets

    def post_twitter(self, content):

        api = self.twitter_api
        if api:
            status = api.PostUpdate(content)
        else:
            return False

        return True
示例#7
0
文件: blog.py 项目: imfht/flaskapps
class Comment(db.Model):

    __tablename__ = "comments"

    PER_PAGE = 40

    id = db.Column(db.Integer, primary_key=True)

    post_id = db.Column(db.Integer,
                        db.ForeignKey(Post.id, ondelete='CASCADE'),
                        nullable=False)

    author_id = db.Column(db.Integer, db.ForeignKey(User.id,
                                                    ondelete='CASCADE'))

    parent_id = db.Column(db.Integer,
                          db.ForeignKey("comments.id", ondelete='CASCADE'))

    email = db.Column(db.String(50))
    nickname = db.Column(db.Unicode(50))
    website = db.Column(db.String(100))

    comment = db.Column(db.UnicodeText)
    created_date = db.Column(db.DateTime, default=datetime.utcnow)

    ip = db.Column(db.Integer)

    _author = db.relation(User, backref="posts", lazy="joined")

    post = db.relation(Post, innerjoin=True, lazy="joined")

    parent = db.relation('Comment', remote_side=[id])

    __mapper_args__ = {'order_by': id.asc()}

    class Permissions(object):
        def __init__(self, obj):
            self.obj = obj

        @cached_property
        def reply(self):
            return Permission(UserNeed(self.obj.post.author_id))

        @cached_property
        def delete(self):
            return Permission(UserNeed(self.obj.author_id),
                              UserNeed(self.obj.post.author_id)) & moderator

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

    @cached_property
    def permissions(self):
        return self.Permissions(self)

    def _get_author(self):
        if self._author:
            return self._author
        return storage(email=self.email,
                       nickname=self.nickname,
                       website=self.website)

    def _set_author(self, author):
        self._author = author

    author = db.synonym("_author",
                        descriptor=property(_get_author, _set_author))

    def _url(self, _external=False):
        return '%s#comment-%d' % (self.post._url(_external), self.id)

    @cached_property
    def url(self):
        return self._url()

    @cached_property
    def permalink(self):
        return self._url(True)

    @cached_property
    def markdown(self):
        return Markup(markdown(self.comment or ''))