使用 DRF 模型视图集为详细视图创建 URL
Create URL for detailview using DRF Modelviewset
我正在使用 DRF 模型视图集为用户模型创建 api。任何人都可以解释或帮助我如何为用户的 detailview
在 react-native 中传递 url。现在我正在以这种方式获取细节视图 127.0.0.1:8000/users/users/2/
。但是每次我不想在 url.
中传递 id
models.py
class User(AbstractUser):
"""This Class is used to extend the in-build user model """
ROLE_CHOICES = (('CREATOR','CREATOR'),('MODERATOR','MODERATOR'),('USERS','USERS'))
GENDER_CHOICES = (('MALE','MALE'),('FEMALE',"FEMALE"),('OTHER','OTHER'))
date_of_birth = models.DateField(verbose_name='Date of Birth', null=True)
profile_image = models.ImageField(upload_to='media/profile_images', verbose_name='Profile Image', default='media/profile_images/default.webp', blank=True)
bio = models.TextField(verbose_name='Bio')
role = models.CharField(max_length=10, verbose_name='Role', choices=ROLE_CHOICES, default='USERS')
gender = models.CharField(max_length=6, verbose_name='Gender', choices=GENDER_CHOICES)
serializers.py
class UserSerializer(serializers.ModelSerializer):
following = serializers.SerializerMethodField(read_only=True)
followers = serializers.SerializerMethodField(read_only=True)
class Meta:
model = User
fields = ('first_name','last_name','username','password','email','date_of_birth',
'profile_image','bio','role','gender', 'following','followers')
extra_kwargs = {'is_active':{'write_only':True},
'password':{'write_only':True}}
def create(self, validated_data):
logger.info('Information Stored!')
return User.objects.create_user(**validated_data)
def update(self, *args, **kwargs):
user = super().update( *args, **kwargs)
p = user.password
user.set_password(p)
user.save()
return user
views.py
class UserAPI(viewsets.ModelViewSet):
serializer_class = UserSerializer
# permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
def get_queryset(self):
users = User.objects.all()
return users
urls.py
router = DefaultRouter()
router.register('users', views.UserAPI, basename='users'),
router.register('following', views.FollowingAPI, basename='following'),
urlpatterns = router.urls
我该如何解决这个问题。需要你的帮助。谢谢
这可能会有帮助。
您可以使用 user = request.user.id
,通过这种方式您可以获得当前登录用户。
您可以使用 action 装饰器
试试这个
class UserAPI(viewsets.ModelViewSet):
...
@action(detail=False)
def profile(self, request):
serializer = UserSerializer(request.user)
return Response(serializer.data)
现在转到 127.0.0.1:8000/users/profile/,您应该会看到当前经过身份验证的用户的数据。
我正在使用 DRF 模型视图集为用户模型创建 api。任何人都可以解释或帮助我如何为用户的 detailview
在 react-native 中传递 url。现在我正在以这种方式获取细节视图 127.0.0.1:8000/users/users/2/
。但是每次我不想在 url.
models.py
class User(AbstractUser):
"""This Class is used to extend the in-build user model """
ROLE_CHOICES = (('CREATOR','CREATOR'),('MODERATOR','MODERATOR'),('USERS','USERS'))
GENDER_CHOICES = (('MALE','MALE'),('FEMALE',"FEMALE"),('OTHER','OTHER'))
date_of_birth = models.DateField(verbose_name='Date of Birth', null=True)
profile_image = models.ImageField(upload_to='media/profile_images', verbose_name='Profile Image', default='media/profile_images/default.webp', blank=True)
bio = models.TextField(verbose_name='Bio')
role = models.CharField(max_length=10, verbose_name='Role', choices=ROLE_CHOICES, default='USERS')
gender = models.CharField(max_length=6, verbose_name='Gender', choices=GENDER_CHOICES)
serializers.py
class UserSerializer(serializers.ModelSerializer):
following = serializers.SerializerMethodField(read_only=True)
followers = serializers.SerializerMethodField(read_only=True)
class Meta:
model = User
fields = ('first_name','last_name','username','password','email','date_of_birth',
'profile_image','bio','role','gender', 'following','followers')
extra_kwargs = {'is_active':{'write_only':True},
'password':{'write_only':True}}
def create(self, validated_data):
logger.info('Information Stored!')
return User.objects.create_user(**validated_data)
def update(self, *args, **kwargs):
user = super().update( *args, **kwargs)
p = user.password
user.set_password(p)
user.save()
return user
views.py
class UserAPI(viewsets.ModelViewSet):
serializer_class = UserSerializer
# permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
def get_queryset(self):
users = User.objects.all()
return users
urls.py
router = DefaultRouter()
router.register('users', views.UserAPI, basename='users'),
router.register('following', views.FollowingAPI, basename='following'),
urlpatterns = router.urls
我该如何解决这个问题。需要你的帮助。谢谢
这可能会有帮助。
您可以使用 user = request.user.id
,通过这种方式您可以获得当前登录用户。
您可以使用 action 装饰器
试试这个
class UserAPI(viewsets.ModelViewSet):
...
@action(detail=False)
def profile(self, request):
serializer = UserSerializer(request.user)
return Response(serializer.data)
现在转到 127.0.0.1:8000/users/profile/,您应该会看到当前经过身份验证的用户的数据。