pertamax
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class UserProfileConfig(AppConfig):
|
||||
name = 'user_profile'
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
@@ -0,0 +1,13 @@
|
||||
from rest_framework.permissions import BasePermission, SAFE_METHODS
|
||||
|
||||
class TargetIsStaff(BasePermission):
|
||||
message = "Hanya bisa memodifikasi user staff."
|
||||
|
||||
def has_permission(self, request, view):
|
||||
if request.method in SAFE_METHODS:
|
||||
return bool(request.user and request.user.is_authenticated)
|
||||
|
||||
return bool(request.user and request.user.is_staff)
|
||||
|
||||
def has_object_permission(self, request, view, obj):
|
||||
return bool(request.user.is_staff and obj.is_staff)
|
||||
@@ -0,0 +1,72 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from rest_framework import serializers
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from rest_framework import serializers
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
class UserCreateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [
|
||||
'id',
|
||||
'username',
|
||||
'email',
|
||||
'password',
|
||||
'first_name',
|
||||
'last_name',
|
||||
]
|
||||
extra_kwargs = {
|
||||
'password': {'write_only': True}
|
||||
}
|
||||
|
||||
def create(self, validated_data):
|
||||
password = validated_data.pop('password')
|
||||
user = User(**validated_data)
|
||||
user.set_password(password)
|
||||
user.is_staff = True
|
||||
user.save()
|
||||
return user
|
||||
|
||||
class UserRetrieveSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [
|
||||
'id',
|
||||
'username',
|
||||
'email',
|
||||
'first_name',
|
||||
'last_name',
|
||||
'is_active',
|
||||
'is_staff',
|
||||
'is_superuser',
|
||||
'date_joined',
|
||||
'last_login',
|
||||
]
|
||||
read_only_fields = fields
|
||||
|
||||
class UserUpdateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [
|
||||
'id',
|
||||
'username',
|
||||
'email',
|
||||
'first_name',
|
||||
'last_name',
|
||||
]
|
||||
|
||||
class UserUpdatePasswordSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [
|
||||
'id',
|
||||
'password',
|
||||
]
|
||||
|
||||
extra_kwargs = {
|
||||
'password': {'write_only': True}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,11 @@
|
||||
from django.urls import path
|
||||
from rest_framework.urlpatterns import format_suffix_patterns
|
||||
from user_profile import views
|
||||
|
||||
urlpatterns = [
|
||||
path('users/', views.UserList.as_view()),
|
||||
path('users/<int:pk>/', views.UserDetail.as_view()),
|
||||
path('users/<int:pk>/password/', views.UserPasswordUpdate.as_view()),
|
||||
]
|
||||
|
||||
urlpatterns = format_suffix_patterns(urlpatterns)
|
||||
@@ -0,0 +1,41 @@
|
||||
from rest_framework import filters, generics, permissions
|
||||
from django.contrib.auth import get_user_model
|
||||
from user_profile.permissions import TargetIsStaff
|
||||
from user_profile import serializers
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
class UserList(generics.ListCreateAPIView):
|
||||
queryset = User.objects.all()
|
||||
serializer_class = serializers.UserCreateSerializer
|
||||
permission_classes = [TargetIsStaff]
|
||||
filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]
|
||||
search_fields = ['username', 'email', 'first_name', 'last_name']
|
||||
filterset_fields = ['username', 'email', 'first_name', 'last_name']
|
||||
ordering_fields = '__all__'
|
||||
|
||||
def get_serializer_class(self):
|
||||
serializer_class = self.serializer_class
|
||||
|
||||
if self.request.method == 'GET':
|
||||
serializer_class = serializers.UserRetrieveSerializer
|
||||
|
||||
return serializer_class
|
||||
|
||||
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
queryset = User.objects.all()
|
||||
serializer_class = serializers.UserUpdateSerializer
|
||||
permission_classes = [TargetIsStaff]
|
||||
def get_serializer_class(self):
|
||||
serializer_class = self.serializer_class
|
||||
|
||||
if self.request.method == 'GET':
|
||||
serializer_class = serializers.UserRetrieveSerializer
|
||||
|
||||
return serializer_class
|
||||
|
||||
class UserPasswordUpdate(generics.UpdateAPIView):
|
||||
queryset = User.objects.all()
|
||||
serializer_class = serializers.UserUpdatePasswordSerializer
|
||||
permission_classes = [TargetIsStaff]
|
||||
Reference in New Issue
Block a user