mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-06-26 15:17:29 +00:00
Initial commit
This commit is contained in:
94
api/serializers.py
Normal file
94
api/serializers.py
Normal file
@ -0,0 +1,94 @@
|
||||
from knox.models import AuthToken
|
||||
from django.contrib.auth import authenticate
|
||||
from api.models import User
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class CustomUserSerializer(serializers.ModelSerializer):
|
||||
"""serializer for the user object"""
|
||||
|
||||
user_permissions = serializers.SerializerMethodField()
|
||||
|
||||
def get_user_permissions(self, instance):
|
||||
permission_ids = instance.user_permissions.all()
|
||||
return [
|
||||
{"id": permission.id, "name": permission.name}
|
||||
for permission in permission_ids
|
||||
]
|
||||
|
||||
class Meta: # type: ignore
|
||||
model = User
|
||||
fields = (
|
||||
"id",
|
||||
"username",
|
||||
"email",
|
||||
"user_permissions",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"last_login",
|
||||
"date_joined",
|
||||
"is_superuser",
|
||||
)
|
||||
|
||||
|
||||
class CustomReadOnlyUserSerializer(serializers.ModelSerializer):
|
||||
"""serializer for the user object"""
|
||||
|
||||
class Meta: # type: ignore
|
||||
model = User
|
||||
# fields = "__all__"
|
||||
fields = (
|
||||
"id",
|
||||
"email",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"username",
|
||||
"mobile",
|
||||
"address",
|
||||
|
||||
)
|
||||
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
"""serializer for the user object"""
|
||||
|
||||
class Meta: # type: ignore
|
||||
model = User
|
||||
fields = ("username", "password")
|
||||
extra_kwargs = {"password": {"write_only": True, "min_length": 5}}
|
||||
|
||||
def create(self, validated_data):
|
||||
return User.objects.create_user(**validated_data)
|
||||
|
||||
|
||||
class AuthSerializer(serializers.Serializer):
|
||||
"""serializer for the user authentication object"""
|
||||
|
||||
username = serializers.CharField()
|
||||
password = serializers.CharField(
|
||||
style={"input_type": "password"}, trim_whitespace=False
|
||||
)
|
||||
|
||||
def validate(self, attrs):
|
||||
username = attrs.get("username")
|
||||
password = attrs.get("password")
|
||||
|
||||
user = authenticate(
|
||||
request=self.context.get("request"), username=username, password=password
|
||||
)
|
||||
|
||||
if not user:
|
||||
msg = "Unable to authenticate with provided credentials"
|
||||
raise serializers.ValidationError(msg, code="authentication")
|
||||
|
||||
attrs["user"] = user
|
||||
return user
|
||||
|
||||
|
||||
class KnoxTokenSerializer(serializers.ModelSerializer):
|
||||
"""serializer for the auth token object"""
|
||||
|
||||
class Meta: # type: ignore
|
||||
model = AuthToken
|
||||
fields = "__all__"
|
Reference in New Issue
Block a user