如何根据用户在 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"

编辑:忘记删除括号,因为我们不需要数组,只需要字符串。