Completed signup process

This commit is contained in:
Sebastian 2013-10-30 20:32:46 +01:00
parent 7468dbf9b2
commit 457d95ec64
7 changed files with 225 additions and 17 deletions

View File

@ -26,7 +26,7 @@
<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>
<li><a href="#">Sign up</a></li> <li><a href="{% url 'signup' %}">Sign up</a></li>
{% endif %} {% endif %}
</ul> </ul>
</div> </div>

View File

@ -0,0 +1,43 @@
{% extends "base.html" %}
{% block title %} New paste {% endblock %}
{% block headeraddons %}
<script src="{{STATIC_URL}}js/jquery-1.10.2.min.js"></script>
{% endblock %}
{% block content %}
<div id="content">
<div id="prompt">
<!-- if IE without GCF, prompt goes here -->
</div>
<h1>Confirm your registration</h1>
<div class="pure-g-r">
<div class="pure-u-2-3">
<div class="textcontainer">
Oh hey <b>{{confirm_user.username}}</b>,<br/>
thank you for confirming your mail address.</br>
You should now be able to <a href="{% url 'login' %}">login</a>.
</div>
</div>
<div class="pure-u-1-3">
<div class="textcontainer">
<h2><i class="icon-upload-alt"></i> Latest uploads</h2>
<ul class="uploads-list">
{% for geometry in latest_geometries %}
<li>
<i class="icon-file"></i>
<a href="{{geometry.get_absolute_url}}">{{geometry.name}}</a>
- {{geometry.date}}
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,7 @@
Hello {{user.username}},
and thank you for registering an account at {{site_name}}.
To validate your email address and complete the registration you need to visit this link:
{{validation_link}}
Have fun !

View File

@ -0,0 +1,47 @@
{% extends "base.html" %}
{% block title %} New paste {% endblock %}
{% block headeraddons %}
<script src="{{STATIC_URL}}js/jquery-1.10.2.min.js"></script>
{% endblock %}
{% block content %}
<div id="content">
<div id="prompt">
<!-- if IE without GCF, prompt goes here -->
</div>
<h1>Confirm your registration</h1>
<div class="pure-g-r">
<div class="pure-u-2-3">
<div class="textcontainer">
Oh hey <b>{{confirm_user.username}}</b>,<br/>
to complete your registration please klick on the link in the email
that has just been send to you.
<br/>
<br/>
If you did not receive an email with a validation link,
please click <a href="{% url 'send_confirmation' user_id=confirm_user.pk %}">here</a> to send another one.
</div>
</div>
<div class="pure-u-1-3">
<div class="textcontainer">
<h2><i class="icon-upload-alt"></i> Latest uploads</h2>
<ul class="uploads-list">
{% for geometry in latest_geometries %}
<li>
<i class="icon-file"></i>
<a href="{{geometry.get_absolute_url}}">{{geometry.name}}</a>
- {{geometry.date}}
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,60 @@
{% extends "base.html" %}
{% block title %} New paste {% endblock %}
{% block headeraddons %}
<script src="{{STATIC_URL}}js/jquery-1.10.2.min.js"></script>
{% endblock %}
{% block content %}
<div id="content">
<div id="prompt">
<!-- if IE without GCF, prompt goes here -->
</div>
<h1>Sign up</h1>
<div class="pure-g-r">
<div class="pure-u-2-3">
<div class="textcontainer">
{% if user.is_authenticated %}
You are alerady logged in, why in the world would you want to sign up ?
{% else %}
<form method="post" class="pure-form pure-form-aligned">
{% csrf_token %}
<fieldset>
{% for field in form %}
<div class="pure-control-group">
{{ field.label_tag }}
{{ field }}
{{ field.errors }}
</div>
{% endfor %}
<div class="pure-control-group">
<label for="submitbutton" >... and </label>
<input class="pure-button button-green" id="submitbutton" type="submit" value="sign up" />
</div>
</fieldset>
</form>
{% endif %}
</div>
</div>
<div class="pure-u-1-3">
<div class="textcontainer">
<h2><i class="icon-upload-alt"></i> Latest uploads</h2>
<ul class="uploads-list">
{% for geometry in latest_geometries %}
<li>
<i class="icon-file"></i>
<a href="{{geometry.get_absolute_url}}">{{geometry.name}}</a>
- {{geometry.date}}
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -3,10 +3,13 @@ from django.core.urlresolvers import reverse_lazy
from pastebin.models import Geometry from pastebin.models import Geometry
from views import UserCreate from views import UserCreate, SendConfirmationView, CheckConfirmationView
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^signup/$', UserCreate.as_view(), name='user_signup'), url(r'^signup/$', UserCreate.as_view(), name='signup'),
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'^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'),

View File

@ -1,10 +1,12 @@
from django.views.generic.edit import CreateView from django.views.generic.edit import CreateView
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
from django.contrib.sites.models import get_current_site from django.contrib.sites.models import get_current_site
from django.contrib.auth.tokens import default_token_generator 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 pastebin.views import LastesGeometriesMixin from pastebin.views import LastesGeometriesMixin
@ -13,29 +15,75 @@ from forms import UserCreateForm
class UserCreate(CreateView, LastesGeometriesMixin): class UserCreate(CreateView, LastesGeometriesMixin):
model = User model = User
form_class = UserCreateForm form_class = UserCreateForm
template_name = 'pastebin/geometry_create.html' template_name = 'users/signup.html'
email_template_name = 'users/validate_email.txt'
def form_valid(self, form): def get_success_url(self):
res = super(UserCreate, self).form_valid(form) return reverse('send_confirmation', kwargs={'user_id' : self.object.pk})
class SendConfirmationView(TemplateView, LastesGeometriesMixin):
template_name = 'users/send_confirmation.html'
email_template_name = 'users/confirmation_email.txt'
def get_context_data(self, **kwargs):
context = super(SendConfirmationView, self).get_context_data(**kwargs)
context['confirm_user'] = User.objects.get(id=kwargs['user_id'])
return context
def get(self, request, *args, **kwargs):
try:
user = User.objects.get(id=kwargs['user_id'])
except User.DoesNotExist:
raise Http404
if user.is_active:
raise Http404
site_name = get_current_site(self.request).name site_name = get_current_site(self.request).name
uid = int_to_base36(self.object.pk) uid = int_to_base36(user.pk)
token = default_token_generator.make_token(self.object) token = default_token_generator.make_token(user)
link = request.build_absolute_uri(reverse('check_confirmation', kwargs={'user_id' : user.pk, 'token' : token}))
context = { context = {
'email': self.object.email, 'email': user.email,
'site_name': site_name, 'site_name': site_name,
'validation_link': "%s - %s" % (uid, token), 'validation_link': link,
'user': self.object 'user': user
} }
subject = "Validate your registration at %s" % site_name subject = "Validate your registration at %s" % site_name
email = loader.render_to_string(self.email_template_name, context) email = loader.render_to_string(self.email_template_name, context)
self.object.email_user(subject,email) user.email_user(subject,email)
return res
def get_success_url(self): return super(SendConfirmationView,self).get(self, request, *args, **kwargs)
return reverse('login')
class CheckConfirmationView(TemplateView, LastesGeometriesMixin):
template_name = 'users/check_confirmation.html'
def get_context_data(self, **kwargs):
context = super(CheckConfirmationView, self).get_context_data(**kwargs)
context['confirm_user'] = User.objects.get(id=kwargs['user_id'])
return context
def get(self, request, *args, **kwargs):
try:
user = User.objects.get(id=kwargs['user_id'])
except User.DoesNotExist:
raise Http404
if user.is_active:
raise Http404
if not default_token_generator.check_token(user,kwargs['token']):
raise Http404
user.is_active = True
user.save()
print "Acitvating %s" % user.username
return super(CheckConfirmationView,self).get(self, request, *args, **kwargs)