2009-11-28 14 views
5

मैं एक बड़ी परियोजना का निर्माण कर रहा हूं, जिसमें मूल रूप से यह शामिल है:Django, मॉडल के बिना एक व्यवस्थापक पैनल कैसे उत्पन्न करें?

सर्वर 1: आइस आधारित सेवाएं। सत्र प्रबंधन के लिए ग्लेशियर 2। फायरवॉल ग्लेशियर 2 तक पहुंच की इजाजत देता है।

सर्वर 2: ग्लेशियर 2 के माध्यम से बर्फ सेवाओं के लिए वेब इंटरफ़ेस (पढ़ें, सार्वजनिक)। ग्लेशियर के माध्यम से बर्फ सेवाओं के लिए व्यवस्थापक इंटरफ़ेस 2.

जिस बिंदु से मैं चिंतित हूं वह वेब इंटरफ़ेस है। मैं Django का उपयोग करना चाहता हूं, क्योंकि यह दोनों पाइथन में लिखा गया है और यह अविश्वसनीय रूप से उपयोगी स्वचालित व्यवस्थापक पैनल जनरेटर है।

वेब इंटरफ़ेस किसी भी डेटाबेस तक नहीं पहुंचता है। यह ग्लेशियर 2 राउटर के माध्यम से सर्वर # 1 पर एक आइस सेवा से जुड़ता है और डेटा में हेरफेर करने के लिए उन सेवाओं द्वारा उजागर एपीआई का उपयोग करता है।

और जैसा कि आप शायद जानते हैं, Django में व्यवस्थापक पीढ़ी Django के ORM के उपयोग पर निर्भर करता है; जो मैं उपयोग नहीं कर रहा हूं क्योंकि मेरे पास पहुंचने के लिए कोई डेटाबेस नहीं है।

इसलिए मुझे व्यवस्थापक पैनल जेनरेट करने की आवश्यकता है, लेकिन सामान्य रूप से ओआरएम की तरह मानक डेटा एक्सेस करने की बजाय, मुझे किसी भी "डीबी-एक्सेस" कॉल को रोकना होगा और उन्हें आइस सर्विस कॉल में बदलना होगा, और फिर ले लें सेवा का आउटपुट (यदि कोई है), इसे ओआरएम सामान्य रूप से लौटता है और Django पर नियंत्रण वापस ले जाता है।

कोई भी जानता है कि मैं यह कैसे कर सकता हूं? मुझे उपclass की क्या आवश्यकता होगी? कोई विशिष्ट विचार?

आपके समय के लिए धन्यवाद।

उत्तर

7

मैं कस्टम ORMS लेखन व्यवस्थापक एकीकरण आप चाहते हैं पाने के लिए की तुलना में एक आसान तरीका हो सकता है लगता है की जरूरत है। मैंने इसे एक ऐप में इस्तेमाल किया जो वेबफैक्शन ईमेल खातों को उनके कंट्रोल पैनल एपीआई के माध्यम से प्रबंधित करने की अनुमति देता है।

models.py, admin.py और urls पर एक नज़र डालें।यहाँ py: django-webfaction

व्यवस्थापक अनुक्रमणिका पृष्ठ पर एक प्रविष्टि का उपयोग एक डमी मॉडल है कि सफल रही है = बनाने के लिए झूठी

रजिस्टर व्यवस्थापक के साथ है कि मॉडल।

फिर आप व्यवस्थापक यूआरएल को रोक सकते हैं और उन्हें अपने विचारों पर निर्देशित कर सकते हैं।

यह समझ में आता है कि व्यवस्थापक आपके ऐप के लिए एडिट/एडिट/हटाए गए कार्यों को समझता है। अन्यथा आप अपने स्वयं के कस्टम क्रियाओं को शामिल करने के लिए व्यवस्थापक अनुक्रमणिका या परिवर्तनीय टेम्पलेट्स को ओवरराइड करना बेहतर कर सकते हैं

+0

मैंने आपका ऐप डाउनलोड किया, और मुझे सामान्य कार्यान्वयन पसंद है। सेवाओं के लिए वास्तव में क्या करना है, मूलभूत जो मैंने पहले ही डिज़ाइन किया है, यह नीचे आता है: खाते (प्रमाणीकरण, उपयोगकर्ता, समूह, अनुमतियां), सेटिंग्स (प्रत्येक सेवा के लिए, और यहां तक ​​कि वेब इंटरफ़ेस), लॉग (प्रत्येक उपयोगकर्ता द्वारा क्रियाओं को लॉग करता है, व्यवस्थापक पैनल 'हालिया क्रियाओं' के समान नहीं), नौकरियां (अन्य सेवाओं के लिए कतार) और वास्तविक सेवाएं जो कुछ दिलचस्प करती हैं, जिन्हें अभी तक डिज़ाइन नहीं किया गया है। तो, 9/10, एक्शन/एडिट/डिलीट एक्शन सेट रखता है। उस 1/10 के लिए, मैं हमेशा अपने ऐप जैसे अपने स्वयं के अनुकूलित पेज जेनरेट कर सकता हूं। 'प्रबंधित = गलत' सुझाव देने के लिए – user168833

+0

+1 – Don

0

डीजेंगो ओआरएम में एक प्लग करने योग्य बैकेंट है, जिसका अर्थ है कि आप उन चीजों के लिए बैकएंड लिख सकते हैं जो आरडीबीएमएस नहीं हैं। यह शायद एक बड़ा काम है, लेकिन शुरुआत करने के लिए एक अच्छी जगह है डैंको कॉन 2008, Inside the ORM से मैल्कम ट्रेडिनिक की बात के साथ।

अन्यथा, आप ओआरएम को पूरी तरह से बाईपास कर सकते हैं, और आपको आवश्यक पहुंच के लिए मैन्युअल रूप से फॉर्म लिख सकते हैं।

3

contrib.admin की असली शक्ति django Forms है। संक्षेप में, व्यवस्थापक उपकरण मूल रूप से एक मॉडल से मिलान करने के लिए एक फॉर्म को ऑटो-जनरेट कर रहा है जिसमें थोड़ी सी urls.py रूटिंग फेंक दी गई है। अंत में यह व्यवस्थापक उपकरण के अलावा django फॉर्म का उपयोग करना आसान होगा।

+0

+1। उसे आपके द्वारा प्रदत्त यूआरएल से उदाहरण कोड लेना चाहिए, उस काम को प्राप्त करें, फिर उसे अपने उद्देश्यों के अनुकूल बनाएं। – steveha

+0

मैं आपके द्वारा लिंक किए गए दस्तावेज़ों की जांच करूंगा। – user168833

1

आप कर सकते हैं "नकली" कुछ वर्ग तो यह एक मॉडल की तरह लग रही है, लेकिन यह अपने एपीआई के लिए प्रॉक्सी करता

उदा

class QuerysetMock(object): 
    def all(): 
     return call_to_your_api() 
    [...] 


class MetaMock(object): 
    def fields(): 
     return fields_mock_objects.. 
    verbose_name = '' 
    [...] 

class ModelMock(object): 
    _meta = MetaMock() 
    objects = QuerysetMock() 

admin.site.register(ModelMock) 

यह काम कर सकते हैं .. लेकिन आप संगत सामान django.model बहुत कुछ