Skip to content

Instantly share code, notes, and snippets.

@walkness
Last active August 3, 2016 21:18
Show Gist options
  • Save walkness/7faf7f11fd7cd10b561d4249dd114003 to your computer and use it in GitHub Desktop.
Save walkness/7faf7f11fd7cd10b561d4249dd114003 to your computer and use it in GitHub Desktop.
Django Rest Framework PasswordField
from rest_framework import serializers
from django.contrib.auth import password_validation
class PasswordField(serializers.CharField):
def __init__(self, *args, **kwargs):
kwargs['write_only'] = True
kwargs['style'] = {'input_type': 'password'}
self.validate_password = kwargs.pop('validate_password', True)
self.user = kwargs.pop('user', None)
self.user_from_request = kwargs.pop('get_user_from_request', True)
super(PasswordField, self).__init__(*args, **kwargs)
def set_user(self, user):
self.user = user
def get_user(self):
if not self.user and self.user_from_request:
if self.context:
request = self.context.get('request')
if request.user.is_authenticated():
self.user = request.user
return self.user
def to_internal_value(self, data):
if self.validate_password:
password_validation.validate_password(data, user=self.get_user())
return super(PasswordField, self).to_internal_value(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment