Completed signup process
This commit is contained in:
parent
7468dbf9b2
commit
457d95ec64
|
@ -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>
|
||||||
|
|
|
@ -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 %}
|
|
@ -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 !
|
|
@ -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 %}
|
|
@ -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 %}
|
|
@ -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'),
|
||||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue