Custom user registration form in django
I created a custom registration form for django but it doesn't work :-(
I created a LOGINSYS application for user management (login, profile page, registration)
My forms.py looks like this:
# - * - coding: utf-8 - * -
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from datetime import date, timedelta
class MyRegistrationForm (UserCreationForm):
def get_image_path (self, filename):
path = '' .join ([date.today (). strftime ('../ static / user_image /% Y /% m /% d /'), translit.slugify (filename), ".jpg"])
return path
first_name = forms.CharField (required = True)
last_name = forms.CharField (required = True)
telephone = forms.CharField (required = True)
email = forms.EmailField (required = False)
#user_image = forms.ImageField (path = get_image_path, required = False, allow_empty_file = True)
class Meta:
model = User
fields = ('username', 'password1', 'password2', 'first_name', 'last_name', 'telephone', 'email')
def save (self, commit = True):
user = super (UserCreationForm, self) .save (commit = False)
user.first_name = self.cleaned_data ['first_name']
user.last_name = self.cleaned_data ['last_name']
user.telephone = self.cleaned_data ['telephone']
user.email = self.cleaned_data ['email']
user.set_password (self.cleaned_data ["password1"])
# user.user_image = self.cleaned_data ['user_image']
if commit:
user.save ()
my views.py looks like this:
# - * - coding: utf-8 - * -
from django.shortcuts import render, render_to_response, redirect
from django.http.response import HttpResponse
from django.http import HttpResponseRedirect
from django.template.loader import get_template
from django.template import Context
from django.template import RequestContext
from advert.models import Advert, AdvertCategory, AdvertSection
from django.core.exceptions import ObjectDoesNotExist
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
from django.core.paginator import Paginator
from datetime import date, timedelta
from PIL import Image
from django.conf import settings
from django.contrib.syndication.views import Feed
from django.contrib import auth
from django.contrib.auth.forms import UserCreationForm
from loginsys.forms import MyRegistrationForm
def register (request):
args = {}
args.update (csrf (request))
args ['form'] = MyRegistrationForm ()
if request.POST:
newuser_form = MyRegistrationForm (request.POST)
if newuser_form.is_valid ():
username = newuser_form.cleaned_data ['username']
password = newuser_form.cleaned_data ['password1']
# password2 = newuser_form.cleaned_data ['password2']
first_name = newuser_form.cleaned_data ['first_name']
last_name = newuser_form.cleaned_data ['last_name']
telephone = newuser_form.cleaned_data ['telephone']
email = newuser_form.cleaned_data ['email']
newuser_form.save ()
newuser = auth.authenticate (username = newuser_form.cleaned_data ['username'], password = newuser_form.cleaned_data ['password2'])
auth.login (request, newuser)
return redirect ('/')
else:
args ['reg_form'] = newuser_form
return redirect ('/')
Unfortunately, when I check in on the front-end, it does nothing :-(
Please help me
+3
source to share
2 answers
Your code does not display the form, see. Use render
in this example .
I recommend using django-auth-tools to create your own custom model. It provides basic models, views and shapes that can be easily extended.
0
source to share
When you override the save method using 'super', you must use MyRegistrationForm, but not (!) The UserCreationForm superclass.
Rewrite the class method as follows:
class MyRegistrationForm(UserCreationForm):
...
def save (self, commit=True):
user = super(MyRegistrationForm, self).save(commit=False)
...
0
source to share