إنشاء موقعين من Django يشتركان في بيانات و 90 ٪ من البيانات والرمز

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

  •  30-09-2019
  •  | 
  •  

سؤال

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

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

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

من الموقع الرئيسي:

  • يقوم المستخدم بتقديم عنصر مخزّن في النموذج

من موقع الهاتف المحمول:

  • مشاهدات المستخدم قائمة بالعناصر وشاهد تلك التي تم إدخالها على الموقع الرئيسي
  • يعطي المستخدم تصنيف 5 نجوم على العنصر الذي تمت إضافته مؤخرًا

من الموقع الرئيسي:

  • يعرض المستخدم قائمة بالعناصر ذات التصنيف العالي والعنصر الذي تمت إضافته مؤخرًا (والذي يحتوي الآن على تصنيف عالي) على القائمة.
هل كانت مفيدة؟

المحلول 2

حسنًا ، كلا الإجابات رائعة وساهمت في ما اخترته لحلتي النهائية.

في ملف Settings.py ، يوجد خيار يسمى ROOT_URLCONF. لقد قمت بإنشاء اثنين من الملفات. اثنين من الملفات ، تسمى Settings_Desktop.py و Settings_Mobile.py وفي كل من هذه الكود التالي:

from settings.py import *

ROOT_URLCONF = 'myapp.urls_mobile'

(أو في حالة سطح المكتب ، myapp.urls_desktop)

هذا في الواقع يعطي الكثير من الميزات الرائعة مثل القدرة على استخدام أدلة القالب المختلفة لكل موقع ، على الرغم من أنني لن أفعل ذلك حقًا.

ثم قمت بإنشاء نسختين من ملف WSGI حيث كان الفرق الوحيد هو هذا السطر:

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_mobile'

أو

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_desktop'

في كل من المضيفين الظاهري ، يكون الاختلاف الوحيد هو خط WSGiscriptalias الذي يشير إلى ملف WSGI مختلف لكل مضيف.

سمح لي ذلك باستخدام تطبيق Django بشكل فعال يمكنه استيعاب كلا الموقعين بسهولة.

شكرا للمساعدة في حل حل جيد لهذا.

نصائح أخرى

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

تحديث:

لذلك دعنا نقول أن لديك موقعك الرئيسي http://www.mainsite.com/ الذي يحتوي على urls.py models.py و views.py الذي يجعل وظيفتك للموقع الرئيسي. ثم لديك http://www.m.mainsite.com/ التي لديها مجموعة من عناوين URL ، ووجهات النظر. ثم يمكنك فقط استيراد نماذج الموقع الرئيسي واستخدامها في طرق عرض مواقع الهاتف المحمول.

لقد فعلت شيئًا مشابهًا جدًا مرة واحدة. كانت طريقتي في حل مشكلة عناوين urls.py شيء من هذا القبيل:

إنشاء اثنين urlconf ، واحد لكل موقع ؛

قم بإنشاء برامج وسيطة جديدة:

from django.utils.cache import patch_vary_headers

class DomainMiddleware:

    def __init__(self):
        pass

    def process_request(self, request):

        #avoid problems when reaching the server directly trough IP
        host = request.META.get('HTTP_HOST', None)
        if host is None: return

        host = host.split(':')[0] #remove port number

        if host is mobile:
            urlconf = "mobile.urls"
        else:
            urlconf = "default.urls"

        request.urlconf = urlconf

    def process_response(self, request, response):
        patch_vary_headers(response, ('Host',))
        return response

تحقق أيضًا من سبب قيامك بعمل patch_vary_headers على المستندات.

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