Django просмотр с помощью простого метода GET приводит к TypeError - PullRequest
0 голосов
/ 21 июня 2020

Используя очень упрощенный c подкласс django.views.View, я получаю TypeError с __init__() takes 1 positional argument but 2 were given в качестве сообщения об ошибке.

urls.py:

from myapp import views
from django.urls import path

urlpatterns = [
    path('webhook/', views.Webhook, name='myapp-webhook'),
]

views.py:

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

class Webhook(View):
    def get(self, request, *args, **kwargs):
        """We don't provide GET access here."""
        # return 403 (Forbidden)
        return HttpResponseForbidden()

    def post(self, request, *args, **kwargs):
        # return 200 (OK)
        return HttpResponse()

tests.py:

from django.test import TestCase

class WebhookTests(TestCase):
    def test_get_method_is_forbidden(self):
        response = self.client.get('/webhook')
        self.assertEqual(response.status_code, 403)

Теперь либо доступ к /webhook в браузере, либо запуск ./manage.py test приводит к:

Internal Server Error: /webhook/
Traceback (most recent call last):
  [...]
TypeError: __init__() takes 1 positional argument but 2 were given

Я точно здесь что-то упускаю. Мы очень ценим указатели на то, что это такое.

1 Ответ

1 голос
/ 21 июня 2020

Вместо:

urlpatterns = [
    path('webhook/', views.Webhook, name='myapp-webhook'),
]

Используйте views.Webhook.as_view():

urlpatterns = [
    path('webhook/', views.Webhook.as_view(), name='myapp-webhook'),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...