Сопоставление метода запроса происходит после проверки разрешения - PullRequest
1 голос
/ 24 октября 2019

У меня есть представление, которое создает и обновляет пользователя, как показано ниже.

class UserViewSet(ViewSet):
    def check_permissions(self, request):
        print("Action = ", self.action)
        if self.action == 'create_user':
            return True
        return super().check_permissions(request)

    def create_user(self, request):
        # user creation code

    def update(self, request):    
        #user update code

И create_user сопоставляется методом POST , а update сопоставляется с PUT метод. Таким образом, действие create_user не должно требовать аутентифицированного пользователя, но для обновления пользователь должен аутентифицироваться. Переопределение check_permission сделало свою работу. Теперь, когда я тестировал конечную точку create_user. Я написал тест, который пытается создать пользователя, используя какой-то метод, отличный от POST . Я ожидал, что ответ должен быть HTTP_405_METHOD_NOT_ALLOWED.

def test_create_user_with_invalid_method(self):
    data = self.user_data
    response = self.client.put(self.url, data)
    self.assertEqual(response.status_code, HTTP_405_METHOD_NOT_ALLOWED)

Но ответ был HTTP_401_UNAUTHORIZED. И переменная действия была установлена ​​как None. Мое отображение URL выглядит следующим образом:

url(r'^account/register/$', UserViewSet.as_view({"post": "create_user"}),name="account_register_view"),
url(r'^account/update/$', UserViewSet.as_view({"put": "update"}), name="account_update_vew"),

Итак, глядя на это, я подумал, что djago выполняет отображение запроса (метода, URL-адреса) на действие либо после проверки разрешения, либо делает это раньше, но устанавливает действие какНет, когда не удается найти правильное отображение

Поэтому меня беспокоит то, является ли это правильным поведением и написанным мною тестом, и то, что я ожидал, неверно или здесь происходит что-то странное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...