Added account update view
This commit is contained in:
parent
93fe541717
commit
6cdf84b71c
|
@ -23,6 +23,7 @@
|
||||||
<li ><a href="#">Home</a></li>
|
<li ><a href="#">Home</a></li>
|
||||||
<li><a href="{% url 'geometry_create' %}">New Paste</a></li>
|
<li><a href="{% url 'geometry_create' %}">New Paste</a></li>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
|
<li><a href="{% url 'user_update' user_id=user.pk %}">Account</a></li>
|
||||||
<li><a href="{% url 'logout' %}">Logout</a></li>
|
<li><a href="{% url 'logout' %}">Logout</a></li>
|
||||||
{% else %}
|
{% else %}
|
||||||
<li><a href="{% url 'login' %}">Login</a></li>
|
<li><a href="{% url 'login' %}">Login</a></li>
|
||||||
|
|
|
@ -22,6 +22,7 @@ class UserCreateForm(ModelForm):
|
||||||
|
|
||||||
|
|
||||||
def clean_email(self):
|
def clean_email(self):
|
||||||
|
#Make sure Email is unique
|
||||||
email = self.cleaned_data.get("email")
|
email = self.cleaned_data.get("email")
|
||||||
if User.objects.filter(email = email):
|
if User.objects.filter(email = email):
|
||||||
raise forms.ValidationError("Email already in use.")
|
raise forms.ValidationError("Email already in use.")
|
||||||
|
@ -33,6 +34,61 @@ class UserCreateForm(ModelForm):
|
||||||
user = super(UserCreateForm, self).save(commit=False)
|
user = super(UserCreateForm, self).save(commit=False)
|
||||||
user.set_password(self.cleaned_data["password1"])
|
user.set_password(self.cleaned_data["password1"])
|
||||||
user.is_active = False
|
user.is_active = False
|
||||||
|
if commit:
|
||||||
|
user.save()
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UserUpdateForm(ModelForm):
|
||||||
|
new_password1 = forms.CharField(label='New Password',
|
||||||
|
widget=forms.PasswordInput,
|
||||||
|
required=False)
|
||||||
|
new_password2 = forms.CharField(label='New Password confirmation',
|
||||||
|
widget=forms.PasswordInput,
|
||||||
|
required=False)
|
||||||
|
current_password = forms.CharField(label='Current Password', widget=forms.PasswordInput)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
fields = ['email']
|
||||||
|
|
||||||
|
|
||||||
|
def clean_current_password(self):
|
||||||
|
current_password = self.cleaned_data.get("current_password")
|
||||||
|
|
||||||
|
if not self.instance.check_password(current_password):
|
||||||
|
raise forms.ValidationError("Password incorrect")
|
||||||
|
|
||||||
|
return current_password
|
||||||
|
|
||||||
|
|
||||||
|
def clean_new_password2(self):
|
||||||
|
password1 = self.cleaned_data.get("new_password1")
|
||||||
|
password2 = self.cleaned_data.get("new_password2")
|
||||||
|
|
||||||
|
if password1 and password2 and password1 != password2:
|
||||||
|
raise forms.ValidationError("Passwords don't match")
|
||||||
|
|
||||||
|
return password1
|
||||||
|
|
||||||
|
|
||||||
|
def clean_email(self):
|
||||||
|
#Make sure Email is still unique
|
||||||
|
email = self.cleaned_data.get("email")
|
||||||
|
if User.objects.filter(email = email).exclude(id=self.instance.id):
|
||||||
|
raise forms.ValidationError("Email already in use.")
|
||||||
|
|
||||||
|
return email
|
||||||
|
|
||||||
|
|
||||||
|
def save(self, commit=True):
|
||||||
|
user = super(UserUpdateForm, self).save(commit=False)
|
||||||
|
|
||||||
|
password = self.cleaned_data.get("new_password1")
|
||||||
|
if password:
|
||||||
|
user.set_password(password)
|
||||||
|
|
||||||
if commit:
|
if commit:
|
||||||
user.save()
|
user.save()
|
||||||
return user
|
return user
|
|
@ -16,7 +16,7 @@
|
||||||
<!-- if IE without GCF, prompt goes here -->
|
<!-- if IE without GCF, prompt goes here -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1>Change password</h1>
|
<h1>Edit your account</h1>
|
||||||
<div class="pure-g-r">
|
<div class="pure-g-r">
|
||||||
<div class="pure-u-2-3">
|
<div class="pure-u-2-3">
|
||||||
<div class="textcontainer">
|
<div class="textcontainer">
|
|
@ -3,13 +3,15 @@ from django.core.urlresolvers import reverse_lazy
|
||||||
|
|
||||||
from pastebin.models import Geometry
|
from pastebin.models import Geometry
|
||||||
|
|
||||||
from views import UserCreate, SendConfirmationView, CheckConfirmationView
|
from views import UserCreateView, UserUpdateView, SendConfirmationView, CheckConfirmationView
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^signup/$', UserCreate.as_view(), name='signup'),
|
url(r'^signup/$', UserCreateView.as_view(), name='signup'),
|
||||||
url(r'^confirm/(?P<user_id>\d+)/$', SendConfirmationView.as_view(), name='send_confirmation'),
|
url(r'^confirm/(?P<user_id>\d+)/$', SendConfirmationView.as_view(), name='send_confirmation'),
|
||||||
url(r'^confirm/(?P<user_id>\d+)/(?P<token>.+)/$', CheckConfirmationView.as_view(), name='check_confirmation'),
|
url(r'^confirm/(?P<user_id>\d+)/(?P<token>.+)/$', CheckConfirmationView.as_view(), name='check_confirmation'),
|
||||||
|
|
||||||
|
url(r'^update/(?P<user_id>\d+)/$', UserUpdateView.as_view(), name='user_update'),
|
||||||
|
|
||||||
url(r'^login/$', 'django.contrib.auth.views.login', {'extra_context' : {'latest_geometries' : Geometry.get_latest()},
|
url(r'^login/$', 'django.contrib.auth.views.login', {'extra_context' : {'latest_geometries' : Geometry.get_latest()},
|
||||||
'template_name' : 'users/login.html'},
|
'template_name' : 'users/login.html'},
|
||||||
name='login'),
|
name='login'),
|
||||||
|
@ -17,8 +19,5 @@ urlpatterns = patterns('',
|
||||||
'next_page' : reverse_lazy('login')},
|
'next_page' : reverse_lazy('login')},
|
||||||
name='logout'),
|
name='logout'),
|
||||||
|
|
||||||
url(r'^password/change/$', 'django.contrib.auth.views.password_change',{'extra_context' : {'latest_geometries' : Geometry.get_latest()},
|
|
||||||
'template_name' : 'users/password_change.html',
|
|
||||||
'post_change_redirect' : reverse_lazy('login')},
|
|
||||||
name='password_change'),
|
|
||||||
)
|
)
|
|
@ -1,4 +1,4 @@
|
||||||
from django.views.generic.edit import CreateView
|
from django.views.generic.edit import CreateView, UpdateView
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
@ -7,20 +7,35 @@ from django.contrib.auth.tokens import default_token_generator
|
||||||
from django.template import loader
|
from django.template import loader
|
||||||
from django.utils.http import int_to_base36
|
from django.utils.http import int_to_base36
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
|
|
||||||
from pastebin.views import LastesGeometriesMixin
|
from pastebin.views import LastesGeometriesMixin
|
||||||
|
|
||||||
from forms import UserCreateForm
|
from forms import UserCreateForm, UserUpdateForm
|
||||||
|
|
||||||
class UserCreate(CreateView, LastesGeometriesMixin):
|
class UserCreateView(CreateView, LastesGeometriesMixin):
|
||||||
model = User
|
model = User
|
||||||
form_class = UserCreateForm
|
form_class = UserCreateForm
|
||||||
template_name = 'users/signup.html'
|
template_name = 'users/signup.html'
|
||||||
|
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse('send_confirmation', kwargs={'user_id' : self.object.pk})
|
return reverse('send_confirmation', kwargs={'user_id' : self.object.pk})
|
||||||
|
|
||||||
|
|
||||||
|
class UserUpdateView(UpdateView, LastesGeometriesMixin):
|
||||||
|
model = User
|
||||||
|
form_class = UserUpdateForm
|
||||||
|
template_name = 'users/user_update.html'
|
||||||
|
pk_url_kwarg = 'user_id'
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return self.model.objects.filter(id=self.request.user.id)
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
return reverse('geometry_create')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SendConfirmationView(TemplateView, LastesGeometriesMixin):
|
class SendConfirmationView(TemplateView, LastesGeometriesMixin):
|
||||||
template_name = 'users/send_confirmation.html'
|
template_name = 'users/send_confirmation.html'
|
||||||
|
|
Loading…
Reference in New Issue