خيارات Django لجعل المتغيرات متاحة على نطاق واسع

StackOverflow https://stackoverflow.com/questions/1417405

  •  07-07-2019
  •  | 
  •  

سؤال

في كل مرة أفتح فيها صفحة أرغب في الحصول على معرف المشروع النشط حاليًا.سيتم ذلك عن طريق التحقق من النطاق الفرعي والتحقق من أن المستخدم الذي قام بتسجيل الدخول حاليًا يمكنه مشاهدته.

بمجرد وصولي إلى وجهة نظري، أريد أن أكون قادرًا على القيام بذلك

tasks = Task.objects.filter(project = current_project)

أين current_project (أو CURRENT_PROJECT أو المشروع الحالي ؟؟؟) تم الإعداد بالفعل.

هل يمكن لأي شخص أن يشرح إيجابيات/سلبيات الأساليب المختلفة التي وجدتها في المستندات ويضعني على المسار الصحيح؟

  1. الجلسات
  2. الوسيطة
  3. خيوط
  4. بنيتينس

هكذا فعلت ذلك في النهاية:

مصمم الديكور:

def check4project(fn):

    current_project = 'fred'
    def check(*args, **kw):
        kw['project']=current_project
        return fn(*args, **kw)
    return check

عرض المثال

@login_required
@check4project
@tweetpost
def index(request, project=0):

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

المحلول

كل هذا يتوقف على ما هي دلالات "المشروع الحالي".فيما يلي بعض الاحتمالات:

  1. يمكن أن يكون من سمات المستخدم:يزور صفحة ملفه الشخصي ويضع مشروعًا حاليًا.سيتم تخزين هذا في قاعدة البيانات، ويمكنك الوصول إليه باستخدام ORM.

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

  3. كما هو الحال مع رقم 2، يمكنك استخدام مصمم العرض إذا تم التحقق من المشاريع لبعض طرق العرض ولكن ليس كلها.وهذا مشابه لمصممي Django للتحقق من الترخيص.

  4. ومن الممكن أن تكون من سمات زيارة المستخدم للموقع:فهو يزور صفحة المشاريع، ويختار واحدًا للعمل عليه، ويبقى ثابتًا حتى يختار مشروعًا آخر.من الأفضل تخزين هذا في الجلسة، وهو مخصص لهذا النوع من التخزين العابر على وجه التحديد.

من وصفك، يبدو أن رقم 2 أو رقم 3 هو الأفضل بالنسبة لك، اعتمادًا على كيفية تقسيم وجهات نظرك بين الاهتمام بالمشاريع الفرعية وعدم الاهتمام بها.

نصائح أخرى

يمكنك إنشاء معالج سياق ثم الحصول على القيمة الخاصة بك من كائن الطلب.

هل اعتبرت أ علامة القالب المخصص?

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