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>
{% else %}
<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 %}
</ul>
</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 views import UserCreate
from views import UserCreate, SendConfirmationView, CheckConfirmationView
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()},
'template_name' : 'users/login.html'},
name='login'),

View File

@ -1,10 +1,12 @@
from django.views.generic.edit import CreateView
from django.views.generic.base import TemplateView
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.contrib.sites.models import get_current_site
from django.contrib.auth.tokens import default_token_generator
from django.template import loader
from django.utils.http import int_to_base36
from django.http import Http404
from pastebin.views import LastesGeometriesMixin
@ -13,29 +15,75 @@ from forms import UserCreateForm
class UserCreate(CreateView, LastesGeometriesMixin):
model = User
form_class = UserCreateForm
template_name = 'pastebin/geometry_create.html'
email_template_name = 'users/validate_email.txt'
template_name = 'users/signup.html'
def form_valid(self, form):
res = super(UserCreate, self).form_valid(form)
def get_success_url(self):
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
uid = int_to_base36(self.object.pk)
token = default_token_generator.make_token(self.object)
uid = int_to_base36(user.pk)
token = default_token_generator.make_token(user)
link = request.build_absolute_uri(reverse('check_confirmation', kwargs={'user_id' : user.pk, 'token' : token}))
context = {
'email': self.object.email,
'email': user.email,
'site_name': site_name,
'validation_link': "%s - %s" % (uid, token),
'user': self.object
'validation_link': link,
'user': user
}
subject = "Validate your registration at %s" % site_name
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 reverse('login')
return super(SendConfirmationView,self).get(self, request, *args, **kwargs)
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)