zoukankan      html  css  js  c++  java
  • Flask实战第38天:前台模型创建

    安装shortuuid

    pip install shortuuid

    编辑front.models.py

    from exts import db
    import shortuuid
    from werkzeug.security import generate_password_hash, check_password_hash
    import enum
    from datetime import datetime
    
    class GenderEnum(enum.Enum):
        MALE = 1
        FEMALE = 2
        SECRET = 3
        UNKNOW = 4
    
    
    class FrontUser(db.Model):
        __tablename__ = 'front_user'
        #这里的id如果我们还使用自动增长,就会存在商业安全隐患,用户可以根据id推算出我们网站的人数
        #不使用自动增长,又要保证id的唯一性,我们就可以使用uuid
        #虽然uuid好用,但是它太长了,查找的效率会降低
        #这时我们就可以使用shortuuid这个库,它既满足了唯一性,又没有uuid那么长
        id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
        telephone = db.Column(db.String(11), nullable=False)
        username = db.Column(db.String(50), nullable=False)
        _password = db.Column(db.String(100), nullable=False)
        email = db.Column(db.String(50), unique=True)
        realname = db.Column(db.String(50))
        avatar = db.Column(db.String(50))
        signature = db.Column(db.String(100))
        gender = db.Column(db.Enum(GenderEnum), default=GenderEnum.UNKNOW)
        join_time = db.Column(db.DateTime, default=datetime.now)
    
        #对password对应的是_password,所以要做处理
        def __init__(self, *args, **kwargs):
            if "password" in kwargs:
                self.password = kwargs.get('password')
                kwargs.pop("password")
            super(FrontUser, self).__init__(*args, **kwargs)
    
    
        @property
        def password(self):
            return self._password
    
        @password.setter
        def password(self, newpwd):
            self._password = generate_password_hash(newpwd)
    
        def check_password(self, rawpwd):
            return check_password_hash(self._password, rawpwd)

    同步到数据库

    python manage.py db migrate
    python manage.py db upgrade

    然后我可以在manage.py中配置命令来添加前台用户

    from apps.front import models as front_models
    
    FrontUser = front_models.FrontUser
    ...
    
    @manager.option('-t', '--telephone', dest='telephone')
    @manager.option('-u', '--username', dest='username')
    @manager.option('-p', '--password', dest='password')
    def create_front_user(telephone, username, password):
        user = FrontUser(telephone=telephone, username=username, password=password)
        db.session.add(user)
        db.session.commit()
        print( '成功创建前台用户:{}'.format(username))
    
    ...

    创建一个前台用户

    查看数据库

  • 相关阅读:
    USACO Section 1.4 Mother's Milk
    USACO Section 1.5 Checker Challenge
    USACO Section 1.5 Number Triangles
    九度 1140 八皇后
    九度 1091 棋盘游戏
    USACO Section 2.1 Sorting A ThreeValued Sequence
    USACO Section 1.4 The Clocks
    USACO Section 1.5 Superprime Rib
    USACO Section 2.1 Ordered Fractions
    双目测距与三维重建
  • 原文地址:https://www.cnblogs.com/sellsa/p/9489226.html
Copyright © 2011-2022 走看看