Commit 01a4dcd5 authored by lizonr1's avatar lizonr1

Login by e-mail

parent 7e887350
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'id', 'username', 'email')
\ No newline at end of file
fields = ('url', 'id', 'username', 'email')
class AuthTokenSerializerByEmail(serializers.Serializer):
email = serializers.CharField(label=_("Email"))
password = serializers.CharField(label=_("Password"), style={'input_type': 'password'})
def validate(self, attrs):
email = attrs.get('email')
password = attrs.get('password')
queryset = User.objects.all()
user_by_email = get_object_or_404(queryset, email=email)
if user_by_email and password:
user = authenticate(username=user_by_email.username, password=password)
if user:
if not user.is_active:
msg = _('User account is disabled.')
raise serializers.ValidationError(msg)
else:
msg = _('Unable to log in with provided credentials.')
raise serializers.ValidationError(msg)
else:
msg = _('Must include "username" and "password".')
raise serializers.ValidationError(msg)
attrs['user'] = user
return attrs
from xml import parsers
import rest_framework
from django.contrib.auth.models import User
from django.shortcuts import render
# Create your views here.
from rest_framework import viewsets
from rest_framework.authtoken.models import Token
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.decorators import list_route
from rest_framework.response import Response
from rest_framework import viewsets, permissions
from App.user.serializers import UserSerializer
from rest_framework.views import APIView
from App.user.serializers import UserSerializer, AuthTokenSerializerByEmail
from rest_framework import parsers, renderers
class UserViewSet(viewsets.ModelViewSet):
"""
......@@ -22,4 +28,23 @@ class UserViewSet(viewsets.ModelViewSet):
def me(self, request, pk=None):
user = User.objects.filter(pk=request.user.id)[0]
user_data = UserSerializer(user, context={'request': request}).data
return Response(status=rest_framework.status.HTTP_200_OK, data= user_data)
\ No newline at end of file
return Response(status=rest_framework.status.HTTP_200_OK, data= user_data)
class ObtainAuthToken(APIView):
throttle_classes = ()
permission_classes = ()
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializerByEmail
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
print(user.__dict__)
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key})
obtain_auth_token = ObtainAuthToken.as_view()
......@@ -32,7 +32,7 @@ urlpatterns = [
url(r'^api/', include(router.urls)),
url(r'^admin/', admin.site.urls),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^api-token-auth/', token_view.obtain_auth_token),
url(r'^api-token-auth/', user_views.obtain_auth_token),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', coming_soon_page, name='post_list'),
]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment