Ошибка базы данных, метод get axios возвращает (аргумент TypeError: int () должен быть строкой, байтовым объектом или числом, а не AnonymousUser) 500 - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь получить список данных, связанных с вошедшим в систему пользователем, я использую vuejs, axios и drf.Коршидер активирован с обеих сторон.Мне удалось получить токен авторизации, изменить состояние и сохранить его в локальном хранилище.код не удается получить данные, указанные пользователем, вот мои коды:

views.py

class blogsListView(generics.ListAPIView):
    def get_queryset(self):
        return CodeNote.objects.filter(user=self.request.user)
    serializer_class = blogsSerializer

myblogs.vue

<script>
import axios from "axios";
const API_URL = "http://127.0.0.1:8000/";
export default {
  name: "myBlogs",
  data: () => ({
    blogs: []
  }),
  mounted() {
    let token = localStorage.getItem("TOKEN_STORAGE_KEY");
    console.log(token);
    axios
      .get(API_URL + "blogs/mylist", {
        headers: { Authorization: "Token " + token }
      })
      .then(response => {
        this.blogs = response;
      })
      .catch(e => {
        this.errors.push(e);
      });
  }
};
</script>

консоль показывает токенуспешно.Я не уверен, правильно ли я делаю запрос, или проблема в фильтрации.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Есть несколько проверок, которые необходимо выполнить.

  • Проверьте, добавлен ли класс проверки подлинности по умолчанию в настройках REST Framework.Внедрите, что хотите, чтобы.
 REST_FRAMEWORK = {
                'DEFAULT_AUTHENTICATION_CLASSES':(
                    'rest_framework.authentication.BasicAuthentication',
                    'rest_framework.authentication.SessionAuthentication',
                    'rest_framework.authentication.TokenAuthentication',
                )
    }
  • В вашем представлении вы должны добавить access_classes.Если вы хотите предоставить доступ только аутентифицированным пользователям.
  class blogsListView(generics.ListAPIView):
        queryset = CodeNote.objects.all()
        serializer_class = blogsSerializer
        permission_classes = [IsAuthenticated
  • Если вы хотите предоставить доступ как аутентифицированным, так и обычным пользователям.Вы должны проверить, аутентифицирован ли пользователь, и обработать его соответствующим образом.
 def get_queryset(self):
     if self.request.user.is_authenticated:
        return CodeNote.objects.filter(user=self.request.user)
     return []
  • Проверьте, существует ли токен, отправляемый из локального хранилища из внешнего интерфейса, в базе данных.

  • Все в одном

    class blogsListView(generics.ListAPIView):
        queryset = CodeNote.objects.all()
        serializer_class = blogsSerializer
        # permission_classes = [IsAuthenticated]

        def get_queryset(self):
            if self.request.user.is_authenticated:
                return CodeNote.objects.filter(user=self.request.user)
            return []
0 голосов
/ 22 апреля 2019

все получилось, спасибо @bkwan за помощь, я добавил настройки фреймворка rest и отредактировал запрос axios следующим образом:

 REST_FRAMEWORK = {
                'DEFAULT_AUTHENTICATION_CLASSES':(
                    'rest_framework.authentication.BasicAuthentication',
                    'rest_framework.authentication.SessionAuthentication',
                    'rest_framework.authentication.TokenAuthentication',
                )
    }
 def get_queryset(self):
     if self.request.user.is_authenticated:
        return CodeNote.objects.filter(user=self.request.user)
     return []
axios
      .get(API_URL + "blogs/mylist", {
        headers: { Authorization: `Token ${token}` }
      })

...