Cuando solicito esto, todo está bien y obtengo los datos:
const get_players = async()=>{ const response = await fetch('http://127.0.0.1:8000/player_stats/api/players/') const data = await response.json() console.log(data) }Pero cuando pongo permisos_clases en vistas.py, recibo esto en la consola:
{detail: 'Authentication credentials were not provided.} Soy un principiante en Javascript, así que espero que puedas entender.
No sé cómo poner las credenciales de autenticación en mi fech.
Vistas.py
class PlayersView(ModelViewSet): permission_classes = [IsAuthenticated] serializer_class = PlayersSerializer queryset = Players.objects.all() def list(self, request): queryset = Players.objects.all() serializer = PlayersSerializer(queryset, many=True) return Response(serializer.data) def retrieve(self, request, pk=None): queryset = Players.objects.all() qs = get_object_or_404(queryset, pk=pk) serializer = PlayersSerializer(qs) return Response(serializer.data)Urls.py
router = DefaultRouter() router.register('players',views.PlayersView,basename='players') app_name = 'main' urlpatterns = [ path('',include(router.urls)), ]¿Alguna idea?
su clase de vista nos dice que no puede acceder a esta página a menos que el usuario esté autenticado (iniciado sesión), le sugiero que, en caso de que esté utilizando la autenticación predeterminada de Django (autenticación de sesión), obtenga la cookie almacenada en el almacenamiento local de esta manera: localStorage.getItem('csrf') y luego configure la identificación de sesión: localStorage.setItem('session_id',res.data.session_id) (esto es solo un ejemplo ficticio, no tengo idea de cómo configura su identificación de sesión en el backend) cuando recibe una respuesta en la interfaz, o si está utilizando token auth (como jwt), debe agregar a los encabezados: headers: {'Authorization': Token ${apiToken}} , uno de los excelentes módulos jwt para drf y tan fácil de el uso con diferentes puntos finales es drf-simplejwt , más información: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/
en una nota al margen: no sugeriría usar la autenticación predeterminada de django, ya que es difícil de manejar, especialmente en el lado frontal
El usuario detrás del navegador que ejecuta la búsqueda debe estar autenticado, es decir. conectado. Hay varias formas de hacerlo. Referirse a:
https://www.django-rest-framework.org/api-guide/authentication/
Pero básicamente, SessionAuthentication usará el sistema de inicio de sesión de usuario de Django, y si desea acceder a la API sin iniciar sesión, puede usar TokenAuthentication , en cuyo caso, debe agregar un encabezado HTTP a su solicitud de búsqueda.
const get_players = async() =>{ const response = await fetch('http://127.0.0.1:8000/player_stats/api/players/', { headers: { 'Authorization': `Token ${apiToken}` } }) const data = await response.json() console.log(data) }