django-rest-auth/rest_auth/serializers.py

143 lines
3.7 KiB
Python
Raw Normal View History

2014-04-30 23:52:05 +04:00
from django.contrib.auth import get_user_model
from django.conf import settings
from rest_framework import serializers
from rest_framework.serializers import _resolve_model
from rest_framework.authtoken.models import Token
profile_model_path = getattr(settings, 'REST_PROFILE_MODULE', None)
2014-04-30 23:52:05 +04:00
class LoginSerializer(serializers.Serializer):
username = serializers.CharField(max_length=30)
password = serializers.CharField(max_length=128)
class TokenSerializer(serializers.ModelSerializer):
2014-04-30 23:52:05 +04:00
"""
Serializer for Token model.
"""
class Meta:
model = Token
fields = ('key',)
class UserDetailsSerializer(serializers.ModelSerializer):
2014-04-30 23:52:05 +04:00
"""
User model w/o password
"""
class Meta:
model = get_user_model()
fields = ('username', 'email', 'first_name', 'last_name')
class UserRegistrationSerializer(serializers.ModelSerializer):
2014-04-30 23:52:05 +04:00
"""
Serializer for Django User model and most of its fields.
2014-04-30 23:52:05 +04:00
"""
class Meta:
model = get_user_model()
fields = ('username', 'password', 'email', 'first_name', 'last_name')
2014-04-30 23:52:05 +04:00
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
2014-04-30 23:52:05 +04:00
"""
ModelSerializer that allows fields argument to control fields
"""
def __init__(self, *args, **kwargs):
fields = kwargs.pop('fields', None)
super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs)
if fields:
allowed = set(fields)
existing = set(self.fields.keys())
for field_name in existing - allowed:
self.fields.pop(field_name)
class UserUpdateSerializer(DynamicFieldsModelSerializer):
2014-04-30 23:52:05 +04:00
"""
User model w/o username and password
"""
class Meta:
model = get_user_model()
fields = ('id', 'email', 'first_name', 'last_name')
if profile_model_path:
class UserRegistrationProfileSerializer(serializers.ModelSerializer):
2014-04-30 23:52:05 +04:00
"""
Serializer that includes all profile fields except for user fk / id.
"""
class Meta:
2014-04-30 23:52:05 +04:00
model = _resolve_model(profile_model_path)
fields = filter(lambda x: x != 'id' and x != 'user',
map(lambda x: x.name, model._meta.fields))
class UserProfileSerializer(serializers.ModelSerializer):
"""
Serializer for UserProfile model.
"""
user = UserDetailsSerializer()
class Meta:
# http://stackoverflow.com/questions/4881607/django-get-model-from-string
model = _resolve_model(profile_model_path)
class UserProfileUpdateSerializer(serializers.ModelSerializer):
"""
Serializer for updating User and UserProfile model.
"""
user = UserUpdateSerializer()
class Meta:
# http://stackoverflow.com/questions/4881607/django-get-model-from-string
model = _resolve_model(profile_model_path)
else:
class UserRegistrationProfileSerializer(serializers.Serializer):
pass
class UserProfileSerializer(serializers.Serializer):
pass
class UserProfileUpdateSerializer(serializers.Serializer):
pass
2014-04-30 23:52:05 +04:00
class SetPasswordSerializer(serializers.Serializer):
2014-04-30 23:52:05 +04:00
"""
Serializer for changing Django User password.
"""
new_password1 = serializers.CharField(max_length=128)
new_password2 = serializers.CharField(max_length=128)
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
return super(SetPasswordSerializer, self).__init__(*args, **kwargs)
2014-04-30 23:52:05 +04:00
class PasswordResetSerializer(serializers.Serializer):
2014-04-30 23:52:05 +04:00
"""
Serializer for requesting a password reset e-mail.
"""
email = serializers.EmailField()