我正在使用基于函数的视图,并且正在正确获取输出。 但是,当我在调用功能时将其更改为基于类的视图时,出现错误不允许使用方法(POST):
views文件”
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")
答案 0 :(得分:1)
使用def post(self, request):
代替def bot(request)
。
self
是必填参数。参考:What is the purpose of self?
使用post
是因为bot
不是有效的HTTP方法。类View
希望将有效的HTTP方法名称用作方法名称。
参考1:Handling forms with Class Based Views
参考2:_allowed_methods
答案 1 :(得分:0)
这不是定义class-based views. (official-doc)的方法。
如果您想通过html
视图接受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")
方法不起作用?
收到适当的请求后,您的URL DIspatcher会将其传递到相应的视图(此处为bot()
),而MessagePassing
的{{3}}方法将检查请求的方法({{1 }})并传递到相应的方法MessagePassing
。但是您没有定义POST
方法。因此,它引发了post
异常
因此,如果您想使用其他HTTP方法(例如get,put,patch等)访问视图,则必须手动将其定义为
post()