mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-25 05:01:28 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.contrib.auth import authenticate
 | |
| from django.utils.translation import gettext_lazy as _
 | |
| 
 | |
| from rest_framework import serializers
 | |
| 
 | |
| 
 | |
| class AuthTokenSerializer(serializers.Serializer):
 | |
|     username = serializers.CharField(
 | |
|         label=_("Username"),
 | |
|         write_only=True
 | |
|     )
 | |
|     password = serializers.CharField(
 | |
|         label=_("Password"),
 | |
|         style={'input_type': 'password'},
 | |
|         trim_whitespace=False,
 | |
|         write_only=True
 | |
|     )
 | |
|     token = serializers.CharField(
 | |
|         label=_("Token"),
 | |
|         read_only=True
 | |
|     )
 | |
| 
 | |
|     def validate(self, attrs):
 | |
|         username = attrs.get('username')
 | |
|         password = attrs.get('password')
 | |
| 
 | |
|         if username and password:
 | |
|             user = authenticate(request=self.context.get('request'),
 | |
|                                 username=username, password=password)
 | |
| 
 | |
|             # The authenticate call simply returns None for is_active=False
 | |
|             # users. (Assuming the default ModelBackend authentication
 | |
|             # backend.)
 | |
|             if not user:
 | |
|                 msg = _('Unable to log in with provided credentials.')
 | |
|                 raise serializers.ValidationError(msg, code='authorization')
 | |
|         else:
 | |
|             msg = _('Must include "username" and "password".')
 | |
|             raise serializers.ValidationError(msg, code='authorization')
 | |
| 
 | |
|         attrs['user'] = user
 | |
|         return attrs
 |