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


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







All Articles