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