mirror of
https://github.com/Tivix/django-rest-auth.git
synced 2025-02-16 18:00:35 +03:00
v0.2.2: support projects without user profiles and set defaul registration backend
This commit is contained in:
parent
217b413ba3
commit
0a1d239374
|
@ -5,6 +5,7 @@ from rest_framework import serializers
|
||||||
from rest_framework.serializers import _resolve_model
|
from rest_framework.serializers import _resolve_model
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
||||||
|
profile_model_path = getattr(settings, 'REST_PROFILE_MODULE', None)
|
||||||
|
|
||||||
class LoginSerializer(serializers.Serializer):
|
class LoginSerializer(serializers.Serializer):
|
||||||
username = serializers.CharField(max_length=30)
|
username = serializers.CharField(max_length=30)
|
||||||
|
@ -22,28 +23,6 @@ class TokenSerializer(serializers.ModelSerializer):
|
||||||
fields = ('key',)
|
fields = ('key',)
|
||||||
|
|
||||||
|
|
||||||
class UserRegistrationSerializer(serializers.ModelSerializer):
|
|
||||||
|
|
||||||
"""
|
|
||||||
Serializer for Django User model and most of its fields.
|
|
||||||
"""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = get_user_model()
|
|
||||||
fields = ('username', 'password', 'email', 'first_name', 'last_name')
|
|
||||||
|
|
||||||
|
|
||||||
class UserRegistrationProfileSerializer(serializers.ModelSerializer):
|
|
||||||
|
|
||||||
"""
|
|
||||||
Serializer that includes all profile fields except for user fk / id.
|
|
||||||
"""
|
|
||||||
class Meta:
|
|
||||||
model = _resolve_model(getattr(settings, 'REST_PROFILE_MODULE', None))
|
|
||||||
fields = filter(lambda x: x != 'id' and x != 'user',
|
|
||||||
map(lambda x: x.name, model._meta.fields))
|
|
||||||
|
|
||||||
|
|
||||||
class UserDetailsSerializer(serializers.ModelSerializer):
|
class UserDetailsSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -54,17 +33,15 @@ class UserDetailsSerializer(serializers.ModelSerializer):
|
||||||
fields = ('username', 'email', 'first_name', 'last_name')
|
fields = ('username', 'email', 'first_name', 'last_name')
|
||||||
|
|
||||||
|
|
||||||
class UserProfileSerializer(serializers.ModelSerializer):
|
class UserRegistrationSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Serializer for UserProfile model.
|
Serializer for Django User model and most of its fields.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
user = UserDetailsSerializer()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
# http://stackoverflow.com/questions/4881607/django-get-model-from-string
|
model = get_user_model()
|
||||||
model = _resolve_model(getattr(settings, 'REST_PROFILE_MODULE', None))
|
fields = ('username', 'password', 'email', 'first_name', 'last_name')
|
||||||
|
|
||||||
|
|
||||||
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
|
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
|
||||||
|
@ -96,17 +73,50 @@ class UserUpdateSerializer(DynamicFieldsModelSerializer):
|
||||||
fields = ('id', 'email', 'first_name', 'last_name')
|
fields = ('id', 'email', 'first_name', 'last_name')
|
||||||
|
|
||||||
|
|
||||||
class UserProfileUpdateSerializer(serializers.ModelSerializer):
|
|
||||||
|
|
||||||
"""
|
if profile_model_path:
|
||||||
Serializer for updating User and UserProfile model.
|
class UserRegistrationProfileSerializer(serializers.ModelSerializer):
|
||||||
"""
|
|
||||||
|
|
||||||
user = UserUpdateSerializer()
|
"""
|
||||||
|
Serializer that includes all profile fields except for user fk / id.
|
||||||
|
"""
|
||||||
|
class Meta:
|
||||||
|
|
||||||
class Meta:
|
model = _resolve_model(profile_model_path)
|
||||||
# http://stackoverflow.com/questions/4881607/django-get-model-from-string
|
fields = filter(lambda x: x != 'id' and x != 'user',
|
||||||
model = _resolve_model(getattr(settings, 'REST_PROFILE_MODULE', None))
|
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
|
||||||
|
|
||||||
|
|
||||||
class SetPasswordSerializer(serializers.Serializer):
|
class SetPasswordSerializer(serializers.Serializer):
|
||||||
|
|
|
@ -7,6 +7,7 @@ except:
|
||||||
# make compatible with django 1.5
|
# make compatible with django 1.5
|
||||||
from django.utils.http import base36_to_int as uid_decoder
|
from django.utils.http import base36_to_int as uid_decoder
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
@ -32,11 +33,14 @@ from .serializers import TokenSerializer, UserDetailsSerializer, \
|
||||||
|
|
||||||
|
|
||||||
# Get the UserProfile model from the setting value
|
# Get the UserProfile model from the setting value
|
||||||
user_profile_model = _resolve_model(
|
user_profile_path = getattr(settings, 'REST_PROFILE_MODULE', None)
|
||||||
getattr(settings, 'REST_PROFILE_MODULE', None))
|
user_profile_model = None
|
||||||
|
if user_profile_path:
|
||||||
|
user_profile_model = _resolve_model(user_profile_path)
|
||||||
|
|
||||||
# Get the REST Registration Backend for django-registration
|
# Get the REST Registration Backend for django-registration
|
||||||
registration_backend = getattr(settings, 'REST_REGISTRATION_BACKEND', None)
|
registration_backend = getattr(settings, 'REST_REGISTRATION_BACKEND',
|
||||||
|
'registration.backends.default.views.RegistrationView')
|
||||||
|
|
||||||
if not registration_backend:
|
if not registration_backend:
|
||||||
raise Exception('Please configure a registration backend')
|
raise Exception('Please configure a registration backend')
|
||||||
|
@ -184,12 +188,16 @@ class UserDetails(LoggedInRESTAPIView, GenericAPIView):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
# Create serializers with request.user and profile
|
# Create serializers with request.user and profile
|
||||||
user_details = UserDetailsSerializer(request.user)
|
user_details = UserDetailsSerializer(request.user)
|
||||||
serializer = self.serializer_class(request.user.get_profile())
|
try:
|
||||||
|
serializer = self.serializer_class(request.user.get_profile())
|
||||||
|
profile_data = serializer.data
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
|
||||||
|
profile_data = {}
|
||||||
# Send the Return the User and its profile model with OK HTTP status
|
# Send the Return the User and its profile model with OK HTTP status
|
||||||
return Response({
|
return Response({
|
||||||
'user': user_details.data,
|
'user': user_details.data,
|
||||||
'profile': serializer.data},
|
'profile': profile_data},
|
||||||
status=status.HTTP_200_OK)
|
status=status.HTTP_200_OK)
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -18,7 +18,7 @@ f.close()
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='django-rest-auth',
|
name='django-rest-auth',
|
||||||
version='0.2.1',
|
version='0.2.2',
|
||||||
author='Sumit Chachra',
|
author='Sumit Chachra',
|
||||||
author_email='chachra@tivix.com',
|
author_email='chachra@tivix.com',
|
||||||
url='http://github.com/Tivix/django-rest-auth',
|
url='http://github.com/Tivix/django-rest-auth',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user