Django कर सकते हैं कैसे प्रदर्शित ?कैसे Django डेकोरेटर permission_required पहले से ही लॉग-इन उपयोगकर्ताओं के लिए प्रवेश करने के लिए पृष्ठ पुन: निर्देशित नहीं कर सकते हैं, लेकिन कुछ संदेश
धन्यवाद।
Django कर सकते हैं कैसे प्रदर्शित ?कैसे Django डेकोरेटर permission_required पहले से ही लॉग-इन उपयोगकर्ताओं के लिए प्रवेश करने के लिए पृष्ठ पुन: निर्देशित नहीं कर सकते हैं, लेकिन कुछ संदेश
धन्यवाद।
एक त्वरित और गंदे समाधान यह करने के लिए अपने स्वयं के डेकोरेटर लिखने के लिए होगा। कुछ इस तरह:
decorator_with_arguments = lambda decorator: lambda *args, **kwargs: lambda func: decorator(func, *args, **kwargs)
@decorator_with_arguments
def custom_permission_required(function, perm):
def _function(request, *args, **kwargs):
if request.user.has_perm(perm):
return function(request, *args, **kwargs)
else:
request.user.message_set.create(message = "What are you doing here?!")
# Return a response or redirect to referrer or some page of your choice
return _function
फिर आप इस तरह आपके विचार को सजाने कर सकते हैं:
@custom_permission_required('my_perm')
def my_view(request, *args, **kwargs):
#Do stuff
Django के बाद से 1.4 permission_required
एक raise_exception
पैरामीटर आप सही पर सेट कर सकते हैं कि कोई अनधिकृत PermissionDenied अपवाद उठाया
ईजी। एक कक्षा के आधार देखें पर एक उदाहरण देने के लिए:
from django.contrib.auth.decorators import permission_required
...
class MyView(TemplateView):
@method_decorator(permission_required('can_do_something', raise_exception=True))
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
रेफरी:
from django.utils import six
from django.core.exceptions import PermissionDenied
from django.contrib.auth.decorators import user_passes_test
def permission_required(perm, login_url=None, raise_exception=True):
def check_perms(user):
if isinstance(perm, six.string_types):
perms = (perm,)
else:
perms = perm
if user.has_perms(perms):
return True
if raise_exception and user.pk:
raise PermissionDenied
return False
return user_passes_test(check_perms, login_url=login_url)
और यह उसी तरह का उपयोग करें: permission_required decorator doc
I लगता है कि सवाल अभी भी उपयोगकर्ताओं को लॉग इन होने पर रीडायरेक्ट करना चाहता है। यह उन उपयोगकर्ताओं को रीडायरेक्ट नहीं करेगा जो लॉग इन नहीं हैं। – theicfire
आप Django के permission_required
डेकोरेटर को बदलने के लिए अपने स्वयं के डेकोरेटर लिख सकते हैं:
@permission_required('app.permission')
def view_page(request):
# your view function
कोई अनुमति नहीं वाले उपयोगकर्ताओं में लॉग इन आयन को 403 वर्जित त्रुटि मिलेगी। जो लोग लॉग इन नहीं हैं उन्हें लॉगिन पेज पर रीडायरेक्ट कर दिया जाएगा।
मैं इस सवाल यह सोचते कर रहा हूँ दो टुकड़े
@Manoj गोविंदन का जवाब है और न ही @ Stefano के जवाब काम नहीं करेगा। @ Lidor का जवाब काम करेंगे, लेकिन वह पूरी तरह से फिर से लागू किया गया है permission_required
कार्य करते हैं।
@login_required
@permission_required('hi there', raise_exception=True)
def blah(request):
pass
इस के साथ
यदि उपयोगकर्ता में लॉग इन नहीं कर रहा है, वे पुनः निर्देशित किया जाएगा,:
यहाँ एक आसान तरीका है। वे कर रहे हैं, लेकिन वे अनुमति नहीं है, तो वे एक त्रुटि नीचे हो जाएगा।
कि request.user.message_set.create() वास्तव में एक Django में निर्मित समारोह या सिर्फ एक छद्म उदाहरण है? –
@ पॉलौलो: Django के अंतर्निर्मित 'उपयोगकर्ता' मॉडल में' message_set.create() 'नामक एक फ़ंक्शन था (जिसने) संदेश संदेश बनाया था। यकीन नहीं है कि यह अभी भी है। –
मैंने अभी Django की आधिकारिक साइट पर एक नज़र डाली, uesr.message_set को 1.2 के बाद से हटा दिया गया था, और उन्होंने इसके बजाय संदेश ढांचे का उपयोग करने की अनुशंसा की: https://docs.djangoproject.com/en/1.3/ref/contrib/messages/ –