用flask搭建一个博客系统,想实现权限控制,定义了Role和User模型
#定义角色模型,只分为两个角色,管理员和普通用户,普通用户能够创建文章,管理员用户能够创建用户
class Role(db.Model):
__tablename__ = "roles" #数据库中表的名字
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(64), unique=True)
# user_id = db.Column(db.Integer, db.ForeignKey("users.id"))
#users = db.relationship("User", backref=db.backref('role',lazy='dynamic'))
users = db.relationship('User', backref='role')
def __repr__(self):
return '<Role %r>' % self.name
#定义用户
class User(db.Model, UserMixin):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
userName = db.Column(db.String(30), unique=True)
Shadow = db.Column(db.String(50))
#email = db.Column(db.String(120), unique=True)
# 一对多关系映射,一个Role包含多个User
role_id = db.Column(db.Integer, db.ForeignKey("roles.id"))
#role = db.relationship('Role', backref=db.backref('user_rever',lazy='dynamic'))
#将password字段定义为User类的一个属性,其中设置该属性不可读,若读取抛出AttributeError。
@property
def password(self):
raise AttributeError('password cannot be read')
#定义password字段的写方法,我们调用generate_password_hash将明文密码password转成密文Shadow
@password.setter
def password(self, password):
self.Shadow = generate_password_hash(password)
#定义验证密码的函数confirm_password
def confirm_password(self, password):
return check_password_hash(self.Shadow, password)
def __repr__(self):
return '<User %r>' % self.userName
然后定义了管理员角色和普通用户角色
admin_role = Role(name='Admin')
user_role = Role(name='User')
在交互式shell中可以简单的定义新用户
user_pi = User(userName='pi', password="123", role=user_role)
user_luffy = User(userName='luffy', password="shadow",role=user_role)
db.session.add(user_pi)
db.session.add(user_luffy)
db.session.commit()
但是在views该怎么写
这样写的话会报错
user = User(userName=username, password=password1, role=Role(name='Admin'))
db.session.add(user)
db.session.commit()
你也是看那本Flask Web开发吧,要搭建一个自己用的博客,其实按照书里的来就够了,不需要新建角色,书里的代码在
config.py
文件里面设置了一个FLASKY_ADMIN
,然后在models.py
文件里面的User
部分的代码那里有这一段:这一段就是用来处理一般用户跟管理员的,当你注册的email跟FLASKY_ADMIN一样的时候,就会被分配为管理员