Как сделать представление django api доступным для всех пользователей?

Я создаю представление Django API для игры, расширяя класс rest_framework.views.APIView.

Вполне вероятно, что большинство пользователей не будут проходить аутентификацию. Как я могу обеспечить это? Насколько я знаю, не существует permissions.IsNotAuthenticated или подобного.

В этой части у меня возникают проблемы в моем представлении, где я пытаюсь создать игровой раунд и объект игровой сессии. Я попытался обойти эту проблему, создав псевдо-пользователя, если пользователь не аутентифицирован:

if not isinstance(request.user, CustomUser):
            current_user = '1'
        else:
            current_user = request.user

Однако, я продолжаю получать сообщение об ошибке Value:

Cannot assign "'1'": "Gamesession.user" must be a "CustomUser" instance.

Ниже приведен участок кода из views.py

current_score = 0
        if not isinstance(request.user, CustomUser):
            current_user = '1'
        else:
            current_user = request.user

        gamesession = Gamesession.objects.create(
            id=controller.generate_random_id(Gamesession),
            user=current_user,
            gametype=gametype,
            created=datetime.now()
        )

        gameround = Gameround.create({
            'id': controller.generate_random_id(Gameround),
            'user': current_user,
            'gamesession': gamesession,
            'created': datetime.now(),
            'score': current_score,
        })
        gameround_serializer = GameroundSerializer(gameround)

Вы создаете это с помощью:

current_score = 0
if not isinstance(request.user, CustomUser):
    current_user_id = 1
else:
    current_user_id = request.user.pk

gamesession = Gamesession.objects.create(
    id=controller.generate_random_id(Gamesession),
    user_id=current_user_id,
    gametype=gametype,
    created=datetime.now()
)

gameround = Gameround.objects.create(
    id=controller.generate_random_id(Gameround),
    user_id=current_user_id,
    gamesession=gamesession,
    created=datetime.now(),
    score=current_score,
)
gameround_serializer = GameroundSerializer(gameround)

Для этого необходимо, чтобы существовал CustomUser с первичным ключом 1 и вы, таким образом, связываете всех "анонимных" пользователей с этим конкретным пользователем.

Вернуться на верх