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))

...

创建一个前台用户

查看数据库

posted @ 2018-08-16 18:56  sellsa  阅读(1126)  评论(9编辑  收藏  举报