আমি কীভাবে জঙ্গোতে রেসপন্স নিষিদ্ধ করতে পারি


168

আমি নিম্নলিখিত করতে চাই:

raise HttpResponseForbidden()

তবে আমি ত্রুটি পেয়েছি:

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

আমি এই কিভাবে করা উচিত?

উত্তর:


183

আপনি অন্য কোনও প্রতিক্রিয়া হিসাবে ভিউ থেকে এটি ফিরে।

from django.http import HttpResponseForbidden

return HttpResponseForbidden()

30
কেন সেখানে একটি ব্যতিক্রম শ্রেণি আছে Http404কিন্তু নেই Http403? অসঙ্গতি কেন?
ফ্লিম্ম

@Flimm stackoverflow.com/questions/3297048/... rest_framework আমদানি অবস্থা status.HTTP_403_FORBIDDEN থেকে 403: আমি নিশ্চিত জ্যাঙ্গো সম্পর্কে নই, কিন্তু জ্যাঙ্গো বিশ্রাম ফ্রেমওয়ার্ক রয়েছে
ডেভিড ওয়াটসন

15
প্রকৃতপক্ষে ব্যবহারের মাধ্যমে raise PermissionDeniedআপনাকে আপনার কাস্টম 403 দর্শনটি দেখানোর সুযোগ রয়েছে
গুইভাল

376

আপনি যদি কোনও ব্যতিক্রম বাড়াতে চান তবে আপনি ব্যবহার করতে পারেন:

from django.core.exceptions import PermissionDenied

def your_view(...):
    raise PermissionDenied()

এটি এখানে নথিভুক্ত করা হয়:

https://docs.djangoproject.com/en/stable/ref/views/#the-403-http-forbidden-view

পুনরুদ্ধারের বিপরীতে HttpResponseForbidden, উত্থাপনের PermissionDeniedফলে 403.htmlটেমপ্লেটটি ব্যবহার করে ত্রুটিটি রেন্ডার হয়ে যায় বা আপনি একটি কাস্টম "নিষিদ্ধ" ভিউ দেখানোর জন্য মিডলওয়্যার ব্যবহার করতে পারেন।


2
PermissionDenied এ কি আমরা একটি কাস্টম বার্তা যুক্ত করতে পারি?
এজে

2
জ্যাক, হ্যাঁ আপনি করতে পারেন - এর মতো কিছু করুন: বাড়ান PermissionDenied ("কোনও ব্যবহারকারী লগইন নেই")
মার্ক চ্যাকারিয়ান

1
এটি গুরুত্বপূর্ণ কিনা তা নিশ্চিত নন, তবে ডক্সগুলি শেষটি throw PermissionDeniedব্যতীত কোনও ফাংশন কল হিসাবে না বলে ()
ফাইডো

2
এইচটিটিপিআরএসপোনস ফোর্ডের মাধ্যমে এটি ব্যবহারের সুবিধা কী?
ফ্লিম করুন

3
@ ফ্লিম: এটি স্বয়ংক্রিয়ভাবে মিডওয়্যার পর্যায়ে 403 ট্রিগার করে, আপনাকে আপনার কাস্টম "নিষিদ্ধ" ভিউটি দেখানোর অনুমতি দেয়।
অর্গানিক

11

403 এইচটিটিপি ত্রুটিগুলির রেন্ডারিং নিয়ন্ত্রণ করতে আপনি বৈকল্পিকভাবে "403.html" নামে একটি কাস্টম টেম্পলেট সরবরাহ করতে পারেন ।

@ ডেভ-হোল্টার দ্বারা সঠিকভাবে নির্দেশিত হিসাবে, 403 টেমপ্লেট কেবল তখনই ব্যবহার করা যেতে পারে যদি আপনি PermissionDenied বাড়ান

নীচে কাস্টম টেমপ্লেটগুলি "403.html", "404.html" এবং "500.html" পরীক্ষা করতে ব্যবহৃত একটি নমুনা ভিউ রয়েছে; দয়া করে নিশ্চিত করুন যে DEBUG = প্রকল্পের সেটিংসে ভুয়া বা কাঠামোটি 404 এবং 500 এর পরিবর্তে কোনও ট্রেসব্যাক প্রদর্শন করবে।

from django.http import HttpResponse
from django.http import Http404
from django.core.exceptions import PermissionDenied


def index(request):

    html = """
<!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>
"""

    action = request.GET.get('action', '')
    if action == 'raise403':
        raise PermissionDenied
    elif action == 'raise404':
        raise Http404
    elif action == 'raise500':
        raise Exception('Server error')

    return HttpResponse(html)

2
এটা কাজ করে না. 403 টেমপ্লেট কেবল তখনই ব্যবহার করা যেতে পারে যদি আপনি PermissionDenied বাড়ান।
ডেভ হাল্টার

ধন্যবাদ @ ডেভ-হোল্টার, আপনি ঠিক বলেছেন। আমি আমার মন্তব্য এটি সংশোধন আপডেট।
মারিও অরল্যান্ডি

2

ত্রুটির সাথে বার্তা প্রেরণ এই ভাবে চেষ্টা করুন

from django.core.exceptions import PermissionDenied
raise PermissionDenied("You do not have permission to Enter Clients in Other Company, Be Careful")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.