我正在尝试使用 jwt 令牌从 api 获取用户列表,因此我生成了令牌和电子邮件并通过,并尝试使用令牌发出获取请求,但我得到了这个错误:
File "/home/tboss/Desktop/environment/liveimages/backend/venv/lib/python3.7/site-packages/rest_framework_simplejwt/authentication.py", line 111, in get_user
user = User.objects.get(**{api_settings.USER_ID_FIELD: user_id})
rest_framework.request.WrappedAttributeError: type object 'User' has no attribute 'objects'
Run Code Online (Sandbox Code Playgroud)
我已经创建了自定义用户
视图.py:
from users.models import User
from rest_framework import viewsets
from rest_framework.decorators import api_view, permission_classes, authentication_classes
from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.status import (
HTTP_400_BAD_REQUEST,
HTTP_404_NOT_FOUND,
HTTP_200_OK)
from . import serializers
from rest_framework.response import Response
from rest_framework.authentication import TokenAuthentication, SessionAuthentication
class UserViewSet(viewsets.ModelViewSet):
queryset = User.object.all()
serializer_class = serializers.UserSerializers
Run Code Online (Sandbox Code Playgroud)
设置.py:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
'DEFAULT_PERMISSION_CLASSES':( …Run Code Online (Sandbox Code Playgroud) django python-3.x django-rest-framework django-rest-framework-jwt
当我尝试访问 api 时,出现此错误:
"detail": "Authentication credentials were not provided."
Run Code Online (Sandbox Code Playgroud)
我已将其包含在 settings.py 中:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES':(
'rest_framework.permissions.IsAuthenticated',
)
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序 api urls.py:
from django.urls import path,include
from . import views
from rest_framework import routers
router = routers.SimpleRouter()
router.register(r'',views.UserViewSet, 'user_list')
urlpatterns = router.urls
Run Code Online (Sandbox Code Playgroud)
我的观点.py:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.object.all()
serializer_class = serializers.UserSerializers
Run Code Online (Sandbox Code Playgroud)
序列化器.py:
from rest_framework import serializers
from users.models import User
class UserSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email','password')
Run Code Online (Sandbox Code Playgroud)
我的主要 urls.py:
urlpatterns = [
path('admin/', …Run Code Online (Sandbox Code Playgroud) 我正在使用电子邮件而不是用户名进行身份验证,并且我尝试添加谷歌身份验证一切工作正常,但这是我收到的错误:
File "/home/tboss/Desktop/environment/liveimages/backend/venv/lib/python3.7/site-packages/social_django/storage.py", line 79, in create_user
user = cls.user_model().objects.create_user(*args, **kwargs)
TypeError: create_user() missing 1 required positional argument: 'password'
Run Code Online (Sandbox Code Playgroud)
用户模型:
class UserManager(BaseUserManager):
def _create_user(self, email, password, is_staff, is_superuser, **extra_fields):
if not email:
raise ValueError('user must have email address')
now = timezone.now()
email = self.normalize_email(email)
user = self.model(
email=email,
is_staff=is_staff,
is_active=True,
is_superuser=is_superuser,
last_login=now,
date_joined=now,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password, **extra_fields):
return self._create_user(email, password, False, False, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
user=self._create_user(email, password, True, True, **extra_fields) …Run Code Online (Sandbox Code Playgroud) 我想一次获取图像作为多个搜索关键字:
视图.py:
class ImageSearchView(generics.ListAPIView):
authentication_classes = []
permission_classes = []
queryset = Image.objects.all()
serializer_class = ImageSearchSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ['image_keyword']
Run Code Online (Sandbox Code Playgroud)
模型.py:
class Image(models.Model):
license_type = (
('Royalty-Free','Royalty-Free'),
('Rights-Managed','Rights-Managed')
)
image_number = models.CharField(default=random_image_number,max_length=12,unique=True)
title = models.CharField(default=random_image_number,max_length = 100)
image = models.ImageField(upload_to = 'image' , default = 'demo/demo.png')
thumbnail = models.ImageField(upload_to='thumbs', blank=True, null=True)
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.CASCADE)
shoot = models.ForeignKey(ImageShoot, on_delete=models.CASCADE, related_name='Image', null=True,blank=True)
image_keyword = models.TextField(max_length=1000)
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
网址.py:
path('image_search/',views.ImageSearchView.as_view(), name = 'image_search'),
Run Code Online (Sandbox Code Playgroud)
当我向邮递员提出请求时:
localhost:8000/api/image_search?search=boxing cricket …Run Code Online (Sandbox Code Playgroud) 我有 Django 反应应用程序。我使用 drf 作为 API 并使用 React 作为前端。我想将它们分别部署在同一服务器上的数字海洋上。有什么建议么?