كيفية استدعاء طريقة مخصصة في طرق العرض القائمة على الفصل

-1

كنت أستخدم طرق العرض المستندة إلى الوظيفة وحصلت على الإخراج بشكل صحيح. ومع ذلك ، عندما قمت بتغييره إلى طرق عرض قائمة على الفصل أثناء استدعاء الوظيفة ، أتلقى خطأ الطريقة غير مسموح بها (POST):

ملف المشاهدات "

class ChatBot(TemplateView):
    # extend from TemplateView
    template_name = 'bot/chatbot.html'
    //**Getting error in calling bot function**

class MessagePassing(View):
    def bot(request):
        response_data={}
        response_data['input'] = request.POST['message']
        return HttpResponse(json.dumps(response_data),
                        content_type="application/json")

2 الاجابة

0

ليست هذه هي الطريقة لتحديد وجهات النظر القائمة على الفصل. (وثيقة رسمية) .

إذا كنت تريد قبول HTTP POST طلب خاص بك MessagePassing طريقة العرض ، يجب عليك تعريف أسلوب مسمى post() من وجهة نظرك ،

from django.views import View
from django.http import HttpResponse


class MessagePassing(View):
    def post(self, request, *args, **kwargs): # Change is here <<<<
        response_data = {}
        response_data['input'] = request.POST['message']
        return HttpResponse(json.dumps(response_data), content_type="application/json")

لماذا ا bot() لم تنجح الطريقة؟
عندما يأتي الطلب المناسب ، يمرر عنوان URL DIspatcher الخاص بك إلى العرض المقابل ، (هنا MessagePassing ) و ال dispatch() طريقة MessagePassing تحقق من طريقة الطلب ( POST ) ويمر إلى الطريقة المقابلة ، post . ولكنك لم تحدد أ post() طريقة. لذا ، فإنه يثير METHOD NOT ALLOWED استثناء

لذا ، إذا كنت تريد الوصول إلى طريقة العرض الخاصة بك باستخدام طرق HTTP أخرى مثل الحصول عليها ، ووضعها ، والتصحيح ، إلخ ، فيجب عليك تحديد تلك الطرق يدويًا ،

from django.views import View
from django.http import HttpResponse


class MessagePassing(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse("This is GET method")

    def post(self, request, *args, **kwargs):
        return HttpResponse("This is POST method")

    def patch(self, request, *args, **kwargs):
        return HttpResponse("This is PATCH method")

    def put(self, request, *args, **kwargs):
        return HttpResponse("This is PUT method")
:مؤلف
0

استعمال def post(self, request): بدلا من def bot(request) .

self هي حجة مطلوبة. المرجع: ما هو الغرض من الذات؟

استعمال post لان bot ليست طريقة HTTP صالحة. صف دراسي View يتوقع استخدام اسم أسلوب HTTP صالح كاسم الأسلوب.
المرجع 1: معالجة النماذج باستخدام طرق العرض المستندة إلى الفئة
المرجع 2: _allowed_methods

:مؤلف
فوق
قائمة طعام