Flask-permissions: AttributeError: الكائن "str" ​​ليس له سمة "الأدوار"

تم إنشاؤها على ١٥ يوليو ٢٠١٦  ·  3تعليقات  ·  مصدر: raddevon/flask-permissions

مرحبًا ، أحاول اتباع الخطوات ولكني أتلقى خطأ عندما أحاول إضافة أدوار إلى المستخدم (مثيل UserMIxin) ولست متأكدًا من كيفية تجميعها ..

my_user = UserMixin()
my_user.add_roles('admin', 'superadmin')
db.session.add(my_user)
db.session.commit()

ولكن عندما أقوم بإنشاء مستخدم عادي ، أفعل ذلك عادةً

my_user = User(name="xxx", email="[email protected]", pass="1234")
db.session.add(my_user)
db.session.commit()

نموذجي مثل هذا:

class User(UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(50), nullable=False, unique=True)
    password = db.Column(db.String(50), nullable=False)

def __init__(self, name, email, password, roles=None):
    """Setting params to the object."""
    self.name = name
    self.email = email.lower()
    self.password = bcrypt.hashpw(
        password.encode('utf-8'), bcrypt.gensalt())
    UserMixin.__init__(self, roles)

.... other methods ...

أي نصائح حول كيف أفعل أنا على حق؟ :)
(im باستخدام bepetersn fork)

التعليق الأكثر فائدة

أفترض مع هذا الخط ...
first_user = UserMixin
تقصد هذا ...
first_user = UserMixin()
لكنك تحتاج حقًا إلى القيام بذلك ...
first_user = User()
(حيث User # $ فئة فرعية UserMixin لتعريفك).

تحتاج إلى إنشاء مثيل مستخدم مع نموذج المستخدم الخاص بك ، والذي يجب أن يكون فئة فرعية من UserMixin. لا يمكنك فعل ذلك مع UserMixin مباشرة بعد الآن. أنا أعتبر هذا فشلًا في التوثيق ، لذلك أقوم حاليًا بتحديث README لإظهار الطريقة الصحيحة لإنشاء مستخدم بالفعل باستخدام الكود الجديد. سأقوم بإصلاح الاختبارات بهذا أيضًا ، لذا سيكون العلاقات العامة جاهزًا أخيرًا!

ال 3 كومينتر

مرحبًا يا ليو ، لقد أتيحت لي الفرصة أخيرًا للنظر في هذا ، وواجهت مشكلة في إنتاج خطأك بالضبط. رأيت البعض الآخر الذي يمكننا التحدث عنه وربما أعرف ما الذي يسببهم (مذكور أدناه). ومع ذلك ، فإن الخبر السار هو أن لدي مثالًا وظيفيًا بالكامل باستخدام رمز نموذج المستخدم أعلاه على https://github.com/bepetersn/flask-permissions-ex.

لقد مر وقت طويل منذ أن نظرت إلى هذه الأشياء ، لكن التغيير الأكبر في مفترقتي (إعادة: الأخطاء المذكورة أعلاه) هو أنه لا يجب عليك إنشاء مثيل UserMixin الآن - إنها قاعدة نموذج مجردة. لذلك تريد استخدام نموذج مستخدم مثل نموذجك أعلاه. ويمكن أن يتسبب ذلك في بعض الأخطاء - لقد حصلت على خطأ مختلف عن أخطائك بشأن عدم القدرة على تعيين الأدوار.

اسمحوا لي أن أعرف ما هو رأيك.

مرحبا بريان،
مشكلتي الرئيسية هي عندما أقوم بإنشاء أدوار ثم أحاول إضافتها إلى مستخدم .. يبدو أن المشكلة :)

from app import db
from flask_permissions.models import UserMixin, Role

db.create_all()
superadmin.add_abilities(
    'create_admin', 'edit_admin_user', 'delete_admin_user')
db.session.add(superadmin)
db.session.commit()
#....
first_user = UserMixin

first_user.add_roles('superadmin')  ###triggers the error
db.session.add(first_user)
db.session.commit()

أفترض مع هذا الخط ...
first_user = UserMixin
تقصد هذا ...
first_user = UserMixin()
لكنك تحتاج حقًا إلى القيام بذلك ...
first_user = User()
(حيث User # $ فئة فرعية UserMixin لتعريفك).

تحتاج إلى إنشاء مثيل مستخدم مع نموذج المستخدم الخاص بك ، والذي يجب أن يكون فئة فرعية من UserMixin. لا يمكنك فعل ذلك مع UserMixin مباشرة بعد الآن. أنا أعتبر هذا فشلًا في التوثيق ، لذلك أقوم حاليًا بتحديث README لإظهار الطريقة الصحيحة لإنشاء مستخدم بالفعل باستخدام الكود الجديد. سأقوم بإصلاح الاختبارات بهذا أيضًا ، لذا سيكون العلاقات العامة جاهزًا أخيرًا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

jterrace picture jterrace  ·  3تعليقات

gpetukhov picture gpetukhov  ·  3تعليقات

hansent picture hansent  ·  3تعليقات

ispmarin picture ispmarin  ·  3تعليقات

AndreaCrotti picture AndreaCrotti  ·  3تعليقات