मैं एक एपीआई पर परिष्कृत स्पर्श डाल रहा हूं जिसे मैंने डीजेंगो-पिस्टन का उपयोग करते हुए एक Django ऐप के लिए लिखा है। एपीआई अनुरोध या आईपी पते से क्रमशः Request
या IPAddress
उदाहरणों से खोज करने में सक्षम है। प्रत्येक अनुरोध में इसके साथ जुड़े 1 या अधिक IPAddress
हो सकते हैं।Django पिस्टन: मैं हैंडलर परिणामों से नेस्टेड फ़ील्ड को कैसे बाहर निकाल सकता हूं? क्या यह भी संभव है?
तो, उदाहरण के लिए मेरे पास एक एपीआई कॉल है जो सभी IPAddress
"सक्रिय", "निष्क्रिय", या "सभी" (किसी भी के लिए) की गतिविधि स्थिति से मेल खाने वाली वस्तुओं को दिखाएगी। Request
जिसमें प्रत्येक IPAddress
उदाहरण संबंधित है IPAddress.request
के रूप में उपलब्ध है।
मेरी समस्या यह है कि Request.inputter
अनुरोध के प्रावधान वाले व्यक्ति के User
उदाहरण के लिए एक विदेशी कुंजी है। जब मेरे परिणाम हैंडलर से वापस लौटाए जाते हैं तो मैंने इस एपीआई कॉल के लिए बनाया है, User
इंस्टेंस के सभी फ़ील्ड प्रदर्शित होते हैं, जिनमें password
शामिल हैं।
यह बुरा है; मुझे यह नहीं चाहिए। यहाँ
class SearchByIPStatusHandler(BaseHandler):
model = IPAddress
allowed_methods = ('GET',)
anonymous = AnonymousIPHandler
def read(self, request, status):
"""
Returns IP addresses based on activity status.
Status: 'active', 'inactive', 'all'
"""
if status == 'all':
return self.model.objects.all()
else:
active = True if (status=='active') else False
return self.model.objects.filter(active=active)
और /api/show/all/
से परिणाम का एक उदाहरण है:
मेरी हैंडलर है
<response>
<resource>
<updated>2010-02-05 17:08:53.651729</updated>
<expires>2010-02-12 17:08:23</expires>
<created>2010-02-05 17:08:53.625318</created>
<nexthop>255.255.255.255</nexthop>
<netmask>255.255.255.254</netmask>
<address>2.4.6.80/31</address>
<active>True</active>
<id>4</id>
<request>
<updated>2010-02-05 17:08:53.382381</updated>
<created>2010-02-05 17:08:53.382313</created>
<expires>2010-02-12 17:08:23</expires>
<incident>20100212-badthings-01</incident>
<reason>bad things happened</reason>
<inputter>
<username>jathan</username>
<first_name>Jathan</first_name>
<last_name>McCollum</last_name>
<is_active>True</is_active>
<email>[email protected]</email>
<is_superuser>True</is_superuser>
<is_staff>True</is_staff>
<last_login>2010-02-05 18:55:51.877746</last_login>
<password>[ENCRYPTED STRING I REDACTED]</password>
<id>1</id>
<date_joined>2010-01-28 09:56:32</date_joined>
</inputter>
<requester>joeuser</requester>
<active>True</active>
</request>
</resource>
</response>
सभी मैं वास्तव में चाहते हैं परिणामों में inputter.username
, नहीं के सभी है अन्य सामान। मैंने हैंडलर पर exclude
विशेषता को लागू करने के लिए विभिन्न पुनरावृत्तियों की कोशिश की है। मैं सिर्फ पूरे अनुरोध क्षेत्र को छोड़ते हैं, कि, ठीक काम करता है तो जैसे:
हैंडलर में:
exclude = ('request',)
कौन सा में परिणाम:
<response>
<resource>
<updated>2010-02-05 17:08:53.651729</updated>
<expires>2010-02-12 17:08:23</expires>
<created>2010-02-05 17:08:53.625318</created>
<nexthop>255.255.255.255</nexthop>
<netmask>255.255.255.254</netmask>
<address>2.4.6.80/31</address>
<active>True</active>
<id>4</id>
</resource>
</response>
लेकिन इन परिणामों से यह भी है कि मैं क्या नहीं चाहते हैं ।
तो, अंत में, मेरे सवाल:
हैंडलर परिणामों से मैं कैसे नेस्ट बाहर कर सकते हैं क्षेत्रों? क्या यह भी संभव है?
मैं निम्नलिखित के विभिन्न पुनरावृत्तियों, जो सभी या तो कोई परिणाम है, या अनपेक्षित परिणामों का प्रयास किया है:
# try to exclude request.inputter
exclude = (('request', ('inputter',),))
# try to exclude request.inputter.password
exclude = (('request', ('inputter', ('password',))))
मुझे लगता है कि मैं गलत समझ रहा हूँ या जिस तरह से क्षेत्र बहिष्करण इस संदर्भ में किया जाता है का दुरुपयोग , इसलिए इस विषय पर किसी भी ज्ञान की सराहना की जाती है।
यह वास्तव में काम करता है। जवाब के लिए धन्यवाद! मैं जो उम्मीद कर रहा था उससे ज्यादा कठिन (विशेष रूप से जब मुझे इसे कई हैंडलरों में डुप्लिकेट करना होगा), लेकिन समाधान एक समाधान है! – jathanism