سؤال

لدي موقف يتطلب إعادة توجيه المستخدمين الذين قاموا بتسجيل الدخول بالفعل بعيدًا عن صفحة تسجيل الدخول إلى صفحة أخرى.لقد رأيت إشارة إلى أنه يمكن تحقيق ذلك باستخدام مصممي الديكور وهو أمر منطقي، لكنني جديد إلى حد ما في استخدامها.ومع ذلك، فأنا أستخدم تسجيل الدخول إلى Django وعرض جهة خارجية (من تسجيل Django).لا أريد تغيير أي من التعليمات البرمجية الموجودة في django.contrib.auth أو django-registration.كيف يمكنني تطبيق مصمم ديكور على عرض لا أريد تعديله للحصول على السلوك المطلوب.

شكرا لك مقدما!

تحديث:اكتشفت أنني قمت عن طريق الخطأ بربط وظيفة تسجيل الدخول بوحدة التسجيل.تسجيل جانغو ليس له علاقة بهذه المشكلة.ومع ذلك، ما زلت بحاجة إلى أن أكون قادرًا على تجاوز سلوك تسجيل الدخول () الافتراضي.أي أفكار؟

هل كانت مفيدة؟

المحلول

ثلاث طرق أخرى للقيام بذلك، على الرغم من أنك ستحتاج إلى استخدام urlconf الخاص بك لهذه الطرق:

  1. أضف الديكور إلى العرض مباشرة في urlconf:

    ...
    (regexp, decorator(view)),
    ...
    

    أنت بحاجة إلى استيراد العرض ومصمم الديكور إلى urlconf، ولهذا السبب لا أحب هذا.أفضل أن يكون لدي أقل عدد ممكن من الواردات في urls.py الخاص بي.

  2. قم باستيراد العرض إلى ملف <app>/views.py وأضف الديكور هناك:

    import view
    
    view = decorator(view)
    

    تشبه إلى حد كبير طريقة Vinay على الرغم من أنها أكثر وضوحًا لأنك تحتاج إلى urlconf لها.

  3. التفاف العرض في طريقة عرض جديدة:

    import view
    
    @decorator
    def wrapperview(request, *args, **kwargs):
        ... other stuff ...
        return view(request, *args, **kwargs)
    

    الخيار الأخير مفيد جدًا عندما تحتاج إلى تغيير طرق العرض العامة.هذا ما أفعله في كثير من الأحيان على أي حال.

عندما تستخدم urlconf، يكون ترتيب الأنماط مهمًا، لذلك قد تحتاج إلى التبديل بين الأنماط التي سيتم استدعاؤها أولاً.

نصائح أخرى

إذا كان لديك وظيفة الديكور ويمكنك أن تعرف أي عرض في جانغو للتسجيل تريد لتزيين، هل يمكن أن تفعل ذلك تماما

registration.view_func = decorator_func(registration.view_func)

وحيث registration هو وحدة في جانغو للتسجيل الذي يحتوي على وظيفة طريقة العرض التي تريد تزيين، view_func <م> هو وظيفة طريقة العرض التي تريد تزيين، وdecorator_func هو الديكور.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top