Как сделать представление 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 и вы, таким образом, связываете всех "анонимных" пользователей с этим конкретным пользователем.