From 7468dbf9b2ca82a7ac581abaf7ef3b9833cfe9b1 Mon Sep 17 00:00:00 2001 From: sebastian Date: Sun, 20 Oct 2013 18:14:22 +0200 Subject: [PATCH] Regsitration works Confimation email works --- past3d/settings.py | 3 ++ pastebin/models.py | 4 ++- users/forms.py | 38 +++++++++++++++++++++ users/models.py | 3 -- users/templates/users/validate_email.txt | 7 ++++ users/urls.py | 3 ++ users/views.py | 42 +++++++++++++++++++++++- 7 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 users/forms.py create mode 100644 users/templates/users/validate_email.txt diff --git a/past3d/settings.py b/past3d/settings.py index 5729eb5..7308881 100644 --- a/past3d/settings.py +++ b/past3d/settings.py @@ -139,6 +139,9 @@ SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' LOGIN_REDIRECT_URL = reverse_lazy('geometry_create') +EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' +EMAIL_FILE_PATH = '/tmp/django' + # A sample logging configuration. The only tangible logging # performed by this configuration is to send an email to # the site admins on every HTTP 500 error when DEBUG=False. diff --git a/pastebin/models.py b/pastebin/models.py index c3e1387..e079b2b 100644 --- a/pastebin/models.py +++ b/pastebin/models.py @@ -5,10 +5,12 @@ import re from hashlib import md5 from datetime import datetime, timedelta -from django.contrib.auth.models import User from django.core.urlresolvers import reverse +from django.contrib.auth.models import User from django.db import models + + vertex_pattern = re.compile(r'vertex\s+([0-9.e+-]+)\s+([0-9.e+-]+)\s+([0-9.e+-]+)') def safe_upload_path(base_dir): diff --git a/users/forms.py b/users/forms.py new file mode 100644 index 0000000..0f7059a --- /dev/null +++ b/users/forms.py @@ -0,0 +1,38 @@ +from django import forms +from django.forms import ModelForm +from django.contrib.auth.models import User + +class UserCreateForm(ModelForm): + password1 = forms.CharField(label='Password', widget=forms.PasswordInput) + password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) + + class Meta: + model = User + fields = ['username', 'email'] + + + def clean_password2(self): + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + + if password1 and password2 and password1 != password2: + raise forms.ValidationError("Passwords don't match") + + return password1 + + + def clean_email(self): + email = self.cleaned_data.get("email") + if User.objects.filter(email = email): + raise forms.ValidationError("Email already in use.") + + return email + + + def save(self, commit=True): + user = super(UserCreateForm, self).save(commit=False) + user.set_password(self.cleaned_data["password1"]) + user.is_active = False + if commit: + user.save() + return user \ No newline at end of file diff --git a/users/models.py b/users/models.py index 71a8362..e69de29 100644 --- a/users/models.py +++ b/users/models.py @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/users/templates/users/validate_email.txt b/users/templates/users/validate_email.txt new file mode 100644 index 0000000..0335d10 --- /dev/null +++ b/users/templates/users/validate_email.txt @@ -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 ! \ No newline at end of file diff --git a/users/urls.py b/users/urls.py index 8c8b9e4..4f5c719 100644 --- a/users/urls.py +++ b/users/urls.py @@ -3,7 +3,10 @@ from django.core.urlresolvers import reverse_lazy from pastebin.models import Geometry +from views import UserCreate + urlpatterns = patterns('', + url(r'^signup/$', UserCreate.as_view(), name='user_signup'), url(r'^login/$', 'django.contrib.auth.views.login', {'extra_context' : {'latest_geometries' : Geometry.get_latest()}, 'template_name' : 'users/login.html'}, name='login'), diff --git a/users/views.py b/users/views.py index 60f00ef..4fd6570 100644 --- a/users/views.py +++ b/users/views.py @@ -1 +1,41 @@ -# Create your views here. +from django.views.generic.edit import CreateView +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 pastebin.views import LastesGeometriesMixin + +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' + + def form_valid(self, form): + res = super(UserCreate, self).form_valid(form) + + site_name = get_current_site(self.request).name + uid = int_to_base36(self.object.pk) + token = default_token_generator.make_token(self.object) + + context = { + 'email': self.object.email, + 'site_name': site_name, + 'validation_link': "%s - %s" % (uid, token), + 'user': self.object + } + + subject = "Validate your registration at %s" % site_name + email = loader.render_to_string(self.email_template_name, context) + self.object.email_user(subject,email) + + return res + + def get_success_url(self): + return reverse('login') +