اذهب إلى المحتوى

السؤال

نشر

حاولت أن أقوم بإرجاع رد response عبارة عن خطأ Forbidden من خلال الكود التالي:

raise HttpResponseForbidden()

ولكن ظهر لي الخطأ التالي:

exceptions must be old-style classes or derived from BaseException, not HttpResponseForbidden

كيف أقوم بإرجاع خطأ Forbidden في جانغو Django؟

Recommended Posts

  • 1
نشر

يمكنك إعادة رد بكود 403 في جانغو من خلال الكود التالي:

from django.core.exceptions import PermissionDenied

def my_view(request, ...):
    if not request.user.is_admin:
        raise PermissionDenied

بالطبع يمكنك تغير الشرط في الكود السابق كما تريد.

على عكس الخطأ HttpResponseForbidden، يؤدي إعادة PermissionDenied إلى عرض رسالة الخطأ باستخدام القالب 403.html ، أو يمكنك استخدام middleware لإظهار ملف عرض مخصصة.

كما يمكنك عرض رسالة خطأ مخصصة، على النحو التالي:

from django.core.exceptions import PermissionDenied

def my_view(request, ...):
    if not request.user.is_admin:
        raise PermissionDenied("You do not have permission to visit this page")
  • 0
نشر (معدل)

يمكنك بشكل اختياري توفير نموذج مخصص باسم "403.html" للتحكم في عرض أخطاء HTTP 403. أيضاً يجب أن تعلم أنه لا يمكن استخدام النموذج 403 إلا إذا قمت برفع PermissionDenied.
يعرض الكود التالي نموذج عرض مستخدم لاختبار القوالب المخصصة "403.html" و "404.html" و "500.html":

def index(request):
    h = """
            <!DOCTYPE html>
            <html lang="en">
              <body>
                <ul>
                    <li><a href="/">home</a></li>
                    <li><a href="?action=raise403">Raise Error 403</a></li>
                    <li><a href="?action=raise404">Raise Error 404</a></li>
                    <li><a href="?action=raise500">Raise Error 500</a></li>
                </ul>
              </body>
            </html>
			"""
    event = request.GET.get('action', '')
    from django.http import Http404
    if event == 'raise404':
        raise Http404
    from django.core.exceptions import PermissionDenied as PD
    if event == 'raise403':
        raise PD
    if event == 'raise500':
        raise Exception('Server error')
    return HttpResponse(h)

أيضاً يجب تعيين DEBUG = False في settings المشروع أو سيعرض لك إطار العمل traceback بدلاً من ذلك لـ 404 و 500.

تم التعديل في بواسطة Ali Haidar Ahmad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...