flask用户注册时实现注册为不同权限的用户
用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()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你也是看那本Flask Web开发吧,要搭建一个自己用的博客,其实按照书里的来就够了,不需要新建角色,书里的代码在
config.py
文件里面设置了一个FLASKY_ADMIN
,然后在models.py
文件里面的User
部分的代码那里有这一段:这一段就是用来处理一般用户跟管理员的,当你注册的email跟FLASKY_ADMIN一样的时候,就会被分配为管理员
你在shell创建name为Admin的角色
db.session.commit(admin_role)了吗?
如果没有,你在
会找不到role的数据
建议你把报错贴出来