Je reçois le message d'erreur ".accepted_renderer non défini sur Response resp api Django".
Je suis le tutoriel Django rest-api. Version Django que j'utilise 1.8.3 J'ai suivi le tutoriel jusqu'à la première partie. Cela a fonctionné correctement. Mais quand j'ai continué la 2e partie en envoyant la réponse, j'ai eu une erreur
Cannot apply DjangoModelPermissions on a view that does not have `.queryset` property or overrides the `.get_queryset()` method.
Puis j'ai essayé d'autres moyens que j'ai
.accepted_renderer not set on Response resp api Django
Sil te plait aide moi. Je pense que son problème de permission.
Vous avez probablement défini DjangoModelPermissions
comme classe d'autorisation par défaut dans vos paramètres. Quelque chose comme:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
)
}
DjangoModelPermissions
ne peut être appliqué qu'aux vues ayant une propriété .queryset
ou une méthode .get_queryset()
.
Étant donné que le didacticiel 2 utilise des FBV, vous devrez probablement le convertir en CBV ou spécifier une classe d’autorisations différente pour cette vue . Vous devez utiliser le décorateur api_view
dans votre vue. Vous pouvez ensuite définir permissions
comme ci-dessous:
from rest_framework.decorators import api_view, permission_classes
from rest_framework import permissions
@api_view([..])
@permission_classes((permissions.AllowAny,))
def my_view(request)
...
Pour résoudre l'erreur de rendu, vous devez ajouter le rendu correspondant à vos paramètres.
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.<corresponding_renderer>',
...
)
}
Je l’ai fonctionné d’une autre manière . Mon utilisateur connecté était le superutilisateur que j’ai créé. Donc, j’ai créé un autre utilisateur à partir de l’administrateur et lui ai assigné toutes les autorisations. Puis connecté à l'administrateur par cet utilisateur.
Dans le fichier settings.py, j'ai changé de code.
REST_FRAMEWORK = {
# Use Django's standard `Django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
Et ça a fonctionné.
La solution pour moi a été soulignée par @ProfNandaa ci-dessus
Solution rapide, commentez le La ligne 'rest_framework.renders.DjangoModelPermissions' pour l'instant - si vous suivent le didacticiel DRF 2; et peut-être avez-vous ajouté cela dans settings.py lors de l’exemple de la page d’accueil.
J'avais en effet ajouté ceci à partir de l'exemple de la page d'accueil avant de m'engager dans le tutoriel et de viser le même problème.
Quand j'ai commenté le code incriminé
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
)
}
de settings.py tout a bien fonctionné à nouveau.
Il y a beaucoup de bonnes solutions déjà énumérées ici. J'ai également rencontré le même problème dans le deuxième tutoriel. Il montrait:
Impossible d'appliquer DjangoModelPermissionsOrAnonReadOnly sur une vue qui le fait pas défini
.queryset
ou avoir une méthode.get_queryset()
.
J'ai changé le settings.py
pour exclure DEFAULT_PERMISSION_CLASSES
comme ci-dessous:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
]
}
Ensuite, il fonctionne avec succès. J'ai essayé avant d'avoir trouvé ces réponses.
Dans mon cas, (pour le tutoriel 2, djangorestframework
ver 3.7.7), cela fonctionne lorsque je modifie les paramètres pour:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
}