如何根据用户在 Python 中的电子邮件为用户授予用户角色?
How to give users a user role based on their email in Python?
我正在创建一个包含 3 个输入字段的注册页面:姓名、电子邮件、密码。在我的用户模型 class 中,我创建了一个 user_role 方法:
from models.base_model import BaseModel
from flask_login import UserMixin
import peewee as pw
class Users(BaseModel, UserMixin):
name = pw.CharField(max_length=100, unique=True)
email = pw.CharField(max_length=100, unique=True)
password = pw.CharField()
role = pw.CharField(max_length=50)
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
def __repr__(self):
return f"User: {self.name}, {self.email}, {self.role}"
def user_roles(self):
user_email = self.email
self.roles = ["user","admin"]
check_email = ["test@testing.com"]
if user_email == check_email:
return self.roles == "admin"
else:
return self.roles == "user"
check_email 用于检查用户在该字段中填写的电子邮件是否等于 check_email 值。如果是,则角色应分配为 'admin'。在我的路由文件中,这是保存到数据库时的样子:
if form.validate_on_submit():
name = form.name.data
email = form.email.data
raw_password = form.password.data
password = generate_password_hash(raw_password, method="sha256", salt_length=20)
role = Users.user_roles(email)
new_user = Users(name=name, email=email, password=password, role=role)
现在,当我尝试测试注册表时,这是它给我的错误:
我想知道有没有办法解决这个错误?
PS:我这样做是为了测试目的,看看我是否可以分配用户角色。将来我可能会添加更多用户角色,所以我认为 Flask-Admin 无法帮助我
您将 user_roles
方法定义为 class 方法,但它可以而且应该是静态方法。您还使用电子邮件字符串调用 user_roles
,但尝试在方法中访问 self.email
。只需更改它即可。
def get_role(email):
check_email = "test@testing.com"
if email == check_email:
return "admin"
else:
return "user"
编辑:忘记删除括号,因为我们不需要数组,只需要字符串。
我正在创建一个包含 3 个输入字段的注册页面:姓名、电子邮件、密码。在我的用户模型 class 中,我创建了一个 user_role 方法:
from models.base_model import BaseModel
from flask_login import UserMixin
import peewee as pw
class Users(BaseModel, UserMixin):
name = pw.CharField(max_length=100, unique=True)
email = pw.CharField(max_length=100, unique=True)
password = pw.CharField()
role = pw.CharField(max_length=50)
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
def __repr__(self):
return f"User: {self.name}, {self.email}, {self.role}"
def user_roles(self):
user_email = self.email
self.roles = ["user","admin"]
check_email = ["test@testing.com"]
if user_email == check_email:
return self.roles == "admin"
else:
return self.roles == "user"
check_email 用于检查用户在该字段中填写的电子邮件是否等于 check_email 值。如果是,则角色应分配为 'admin'。在我的路由文件中,这是保存到数据库时的样子:
if form.validate_on_submit():
name = form.name.data
email = form.email.data
raw_password = form.password.data
password = generate_password_hash(raw_password, method="sha256", salt_length=20)
role = Users.user_roles(email)
new_user = Users(name=name, email=email, password=password, role=role)
现在,当我尝试测试注册表时,这是它给我的错误:
我想知道有没有办法解决这个错误?
PS:我这样做是为了测试目的,看看我是否可以分配用户角色。将来我可能会添加更多用户角色,所以我认为 Flask-Admin 无法帮助我
您将 user_roles
方法定义为 class 方法,但它可以而且应该是静态方法。您还使用电子邮件字符串调用 user_roles
,但尝试在方法中访问 self.email
。只需更改它即可。
def get_role(email):
check_email = "test@testing.com"
if email == check_email:
return "admin"
else:
return "user"
编辑:忘记删除括号,因为我们不需要数组,只需要字符串。