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
ilyas Jumadurdyew
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
Udi
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
alexnas
source
to share