django - Restrict access to a Class Based View based on the request user and view to be rendered -
यहाँ दृश्य है:
प्रोफाइल / models.py
क्लास यूज़रप्रोफ़ाइल (models.Model): user = models.OneToOneField (उपयोगकर्ता, प्राइमरी_की = सच) जन्मदिन = मॉडल.डेटाइमफिल्ड (रिक्त = सच) def __unicode __ (स्व): वापसी यूनिकोड (स्वयं। यूजर) श्रेणी विशेषप्रोफ़ाइल (models.Model) : user = models.OneToOneField (उपयोगकर्ता, primary_key = true) ... # अतिरिक्त फ़ील्ड यहाँ def __unicode __ (स्वयं): वापसी यूनिकोड (स्व। ऊस्टर) वर्ग विशेषप्रोफाइल URL (models.Model): profile = models.OneToOneField (SpecialProfile, primary_key = सच) ... # कुछ और यूआरएल मुखपृष्ठ_उर्ल = मॉडल। URLField (रिक्त = सच) def __unicode __ (स्वयं): वापसी यूनिकोड (self.profile) वर्ग विशेषप्रोफाइल छवियाँ (models.Model): profile = models.OneToOneField (विशेषप्रोफ़ाइल, प्राथमिक_की = सच =) img1 = models.ImageField (रिक्त = सच, upload_to = 'प्रोफाइल /') img2 = models.ImageField (रिक्त = सच, upload_to = 'प्रोफाइल /') img3 = models.ImageField (रिक्त = सच, upload_to = ' प्रोफाइल / ') def __unicode __ (स्वयं) : PublicicofiliewView (DetailView): template_name = "public_profile.html" मॉडल = यूनिकोड (स्वयं। प्रोफाइल) ` प्रोफाइल / views.py
उपयोगकर्ता वर्ग PrivateProfileView (DetailView): template_name = 'प्रोफ़ाइल / प्रोफ़ाइल2.html' context_object_name = "profile" मॉडल = उपयोगकर्ता pk_field = 'pk' प्रोफाइल / urls.py < पूर्व> urlpatterns = पैटर्न ("", url (r '^ $', 'mysite.views.home', name = 'home'), # मुझे कुछ नहीं दे? बस मुझे घर ले जाओ! Url (r '^ (? P & lt; pk & gt; \ d +) / $', PrivateProfileView.as_view (), नाम = "प्रोफ़ाइल"), url (r '^ (? पी & lt; उपयोगकर्ता नाम & gt; \ w +) / $', प्रोफाइल रीडायरेक्ट दृश्य .as_view (), नाम = "प्रोफाइल_अरेडर"), यूआरएल (आर "^ संपादित करें / (? पी & lt; प्रोफाइल_id & gt; \ w +) / $", संपादित करेंप्रोफ़ाइल दृश्य। एएस_व्यूव (), नाम = "प्रोफाइल_अपडेट_प्ररूप"),) यहाँ समस्या है: मैं यह जांचने में सक्षम होना चाहता हूं कि उपयोगकर्ता अनुरोध दे रहा है कि एक प्रोफ़ाइल तक पहुंचने के लिए उपयोग किए गए आईडी के समान है। मैं GET अनुरोध पर रोक लगाता हूं और जांच करता हूं, लेकिन जब मैं ऐसा करता हूं तो डीजेन्ना पागल हो जाता है (संभवतः क्योंकि यह एक DetailView है)। क्या यह सुनिश्चित करने के लिए कोई अनुशंसित / गैर-हैश तरीके है कि केवल यह उपयोगकर्ता जिनके पास यह प्रोफ़ाइल है, वे इसे एक्सेस कर सकते हैं? यदि नहीं, तो उपयोगकर्ता को अनुरोध भेजने से पब्लिक प्रोफाइलफ़ाइल दृश्य पर पुनः निर्देशित किया जाना चाहिए।
आपका समाधान एक संयोजन है कुछ अलग चीजों का:
1) से अनुमतियां आवश्यक मेलिक्स का उपयोग करें। यह क्लास-आधारित दृश्यों के लिए अनुमति कार्यक्षमता जोड़ने का एक आसान तरीका है अनुमतियाँ आवश्यक माक्सिन पर दस्तावेज़ीकरण पाया जा सकता है। 2) अपनी स्वयं की अनुमति बनाएं उस पर है Django दस्तावेज। इस अनुमति को अपने क्लास आधारित दृश्य में शामिल करें।
एक संबंधित उत्तर SO पर है जो फ़ंक्शन-आधारित दृश्य में एक ही समस्या को हल करता है। आप अपनी अनुमति बनाने में मदद के लिए इसका उपयोग कर सकते हैं।
Comments
Post a Comment