我有一个视图集API,可以获取使用Django JWT进行身份验证的用户通知,但是我收到了错误消息。请看看!
视图集:
from api.notifications.models import Notification
from rest_framework.generics import ( ListAPIView )
from api.notifications.serializers import ( NotificationListSerializer )
from api.pagination import NewFeedPagination
from rest_framework.permissions import AllowAny
from api.permissions import IsOwnerOrReadOnly
class NotificationListAPIView(ListAPIView):
permission_classes = [AllowAny]
serializer_class = NotificationListSerializer
ordering_fields = 'date'
def get_queryset(self, *args, **kwargs):
queryset_list = Notification.objects.filter(to_user=self.request.user)
return queryset_list
登录并访问网址时,它已成功完成。但它没有登录,它出现了错误:int() argument must be a string or a number, not 'AnonymousUser'
。如何设置AnonymousUser,URL将登录页面:localhost:8000 / admin?
所有回溯错误: 回溯:
File "C:\Python27\lib\site-packages\django\core\handlers\exception.py" in inner
41. response = get_response(request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
489. response = self.handle_exception(exc)
File "C:\Python27\lib\site-packages\rest_framework\views.py" in handle_exception
449. self.raise_uncaught_exception(exc)
File "C:\Python27\lib\site-packages\rest_framework\views.py" in dispatch
486. response = handler(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\rest_framework\generics.py" in get
201. return self.list(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\rest_framework\mixins.py" in list
40. queryset = self.filter_queryset(self.get_queryset())
File "C:\Users\User\Desktop\FeedGit\backend\api\notifications\views.py" in get_queryset
16. queryset_list = Notification.objects.filter(to_user=self.request.user)
File "C:\Python27\lib\site-packages\django\db\models\manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in filter
782. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
800. clone.query.add_q(Q(*args, **kwargs))
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in add_q
1261. clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in _add_q
1287. allow_joins=allow_joins, split_subq=split_subq,
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in build_filter
1217. condition = lookup_class(lhs, value)
File "C:\Python27\lib\site-packages\django\db\models\lookups.py" in __init__
24. self.rhs = self.get_prep_lookup()
File "C:\Python27\lib\site-packages\django\db\models\fields\related_lookups.py" in get_prep_lookup
112. self.rhs = target_field.get_prep_value(self.rhs)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
962. return int(value)
Exception Type: TypeError at /api/v1/notifications/
Exception Value: int() argument must be a string or a number, not 'AnonymousUser'
答案 0 :(得分:0)
正如你的错误所说:
Exception Value: int() argument must be a string or a number, not 'AnonymousUser'
这意味着过滤Notification
您传递的是完整的用户对象,而不是仅传递ID:
更改此行,这将有效
16. queryset_list = Notification.objects.filter(to_user=self.request.user.id)
答案 1 :(得分:0)
好像您没有在设置中设置DRF。尝试以下操作(或根据需要选择设置),看看是否可行:
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated'
]
}