flask-sqlalchemy - flask用户注册时实现注册为不同权限的用户
本文介绍了flask-sqlalchemy - 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()
解决方案
你也是看那本Flask Web开发吧,要搭建一个自己用的博客,其实按照书里的来就够了,不需要新建角色,书里的代码在config.py
文件里面设置了一个FLASKY_ADMIN
,然后在models.py
文件里面的User
部分的代码那里有这一段:
def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)
if self.role is None:
if self.email == current_app.config['FLASKY_ADMIN']:
self.role = Role.query.filter_by(permissions=0xff).first()
if self.role is None:
self.role = Role.query.filter_by(default=True).first()
if self.email is not None and self.avatar_hash is None:
self.avatar_hash = hashlib.md5(
self.email.encode('utf-8')).hexdigest()
这一段就是用来处理一般用户跟管理员的,当你注册的email跟FLASKY_ADMIN一样的时候,就会被分配为管理员
这篇关于flask-sqlalchemy - flask用户注册时实现注册为不同权限的用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文