У меня есть представление, которое создает и обновляет пользователя, как показано ниже.
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-адреса) на действие либо после проверки разрешения, либо делает это раньше, но устанавливает действие какНет, когда не удается найти правильное отображение
Поэтому меня беспокоит то, является ли это правильным поведением и написанным мною тестом, и то, что я ожидал, неверно или здесь происходит что-то странное.