我为django创建了自定义用户注册表单,但它不起作用:-(
我创建了LOGINSYS app来操纵用户(登录, Profiles 页面,注册)
我的forms.py看起来像这样:
#-*- 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()
我的views.py看起来像:
#-*- 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('/')
不幸的是,当我在前端注册它没有做任何事情:-(
请帮我
2 回答
您的代码不呈现表单,请参阅this example中
render
的用法 .我建议使用django-auth-tools来构建自己的自定义用户模型 . 它提供了可以轻松扩展的基本模型,视图和表格 .
使用'super'覆盖方法save时,必须使用MyRegistrationForm,而不是(!)超类UserCreationForm .
相应地重写类方法: