Skip to content

Instantly share code, notes, and snippets.

@genba
Created August 4, 2013 12:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save genba/6150207 to your computer and use it in GitHub Desktop.
Save genba/6150207 to your computer and use it in GitHub Desktop.
LoginForm and SignupForm for Django apps
#-*- coding: utf-8 -*-
from django import forms
from models import User
class PasswordField(forms.CharField):
def __init__(self):
super(PasswordField, self).__init__(widget=forms.PasswordInput)
class LoginForm(forms.Form):
username = forms.CharField()
password = PasswordField()
def clean_username(self):
username = self.cleaned_data['username']
try:
User.objects.get(username=username)
except User.DoesNotExist:
raise forms.ValidationError('User name is not registered')
return username
def clean_password(self):
password = self.cleaned_data['password']
user = User.objects.get(username=self.cleaned_data['username'])
if not user.check_password(password):
raise forms.ValidationError('Passwords do not match')
return password
class SignupForm(forms.Form):
username = forms.CharField()
first_name = forms.CharField()
last_name = forms.CharField(required=False)
email = forms.EmailField()
password = PasswordField()
confirm_password = PasswordField()
def clean_username(self):
username = self.cleaned_data['username']
try:
User.objects.get(username=username)
except User.DoesNotExist:
pass
else:
raise forms.ValidationError('User name already registered')
return username
def clean_email(self):
email = self.cleaned_data['email']
try:
User.objects.get(email=email)
except User.DoesNotExist:
pass
else:
raise forms.ValidationError('User already registered with this e-mail address')
return email
def clean_confirm_password(self):
password = self.cleaned_data['password']
confirm_password = self.cleaned_data['confirm_password']
if password != confirm_password:
raise forms.ValidationError('Passwords do not match')
return confirm_password
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment