django中的自定义用户注册表

django中的自定义用户注册表,django,django-models,django-templates,Django,Django Models,Django Templates,我已经为django创建了自定义用户注册表单,但它不起作用:-( 我创建了LOGINSYS应用程序来操纵用户(登录、配置文件页面、注册) 我的forms.py如下所示: #-*- coding:utf-8 -*- from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm fr

我已经为django创建了自定义用户注册表单,但它不起作用:-(

我创建了LOGINSYS应用程序来操纵用户(登录、配置文件页面、注册)

我的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() #-*-编码:utf-8-*- 来自django导入表单 从django.contrib.auth.models导入用户 从django.contrib.auth.forms导入UserCreationForm 从日期时间导入日期,时间增量 类MyRegistrationForm(UserCreationForm): def get_图像_路径(自身,文件名): path=''.join([date.today().strftime('../static/user_image/%Y/%m/%d/),translit.slugify(filename),“.jpg”]) 返回路径 first_name=forms.CharField(必需=True) last_name=forms.CharField(必需=True) 电话=forms.CharField(必需=True) email=forms.EmailField(必需=False) #user\u image=forms.ImageField(path=get\u image\u path,required=False,allow\u empty\u file=True) 类元: 模型=用户 字段=(‘用户名’、‘密码1’、‘密码2’、‘姓’、‘电话’、‘电子邮件’) def save(self,commit=True): user=super(UserCreationForm,self).save(commit=False) user.first\u name=self.cleaned\u数据['first\u name'] user.last\u name=self.cleaned\u数据['last\u name'] user.telephone=self.cleaned_数据['telephone'] user.email=self.cleanned_数据['email'] user.set_密码(自清理_数据[“password1”]) #user.user\u image=self.cleanned\u数据['user\u image'] 如果提交: user.save() my 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('/') #-*-编码:utf-8-*- 从django.shortcuts导入渲染,渲染到响应,重定向 从django.http.response导入HttpResponse 从django.http导入HttpResponseRedirect 从django.template.loader导入get_模板 从django.template导入上下文 从django.template导入请求上下文 从advert.models导入广告、广告类别、广告部分 从django.core.exceptions导入ObjectDoesNotExist 处理器从django.core.context_导入csrf 从django.core.urlResolver反向导入 从django.core.paginator导入paginator 从日期时间导入日期,时间增量 从PIL导入图像 从django.conf导入设置 从django.contrib.syndication.views导入提要 从django.contrib导入验证 从django.contrib.auth.forms导入UserCreationForm 从loginsys.forms导入MyRegistrationForm def寄存器(请求): args={} 参数更新(csrf(请求)) args['form']=MyRegistrationForm() 如有要求,请发送: newuser_form=MyRegistrationForm(request.POST) 如果newuser\u form.is\u valid(): username=newuser\u表单。已清理的\u数据['username'] password=newuser\u form.cleaned\u数据['password1'] #password2=newuser\u form.cleaned\u数据['password2'] first\u name=newuser\u form.cleaned\u数据['first\u name'] last\u name=newuser\u表单。已清理的\u数据['last\u name'] 电话=新用户\u表单。已清理\u数据['telephone'] email=newuser\u form.cleaned\u数据['email'] newuser_form.save() newuser=auth.authenticate(username=newuser\u form.cleaned\u data['username'],password=newuser\u form.cleaned\u data['password2']) 身份验证登录(请求,新用户) 返回重定向(“/”) 其他: args['reg_form']=newuser_form 返回重定向(“/”) 不幸的是,当我在前端注册时,它什么都不做:-(


请帮助我

您的代码没有呈现表单,请参阅中的
呈现的用法


我建议使用来构建您自己的自定义用户模型。它提供了可以轻松扩展的基本模型、视图和表单。

当您使用“super”重写save方法时,您必须使用MyRegistrationForm,而不是(!)超类UserCreationForm

相应地重写类方法:

class MyRegistrationForm(UserCreationForm):
    ...
    def save (self, commit=True):
        user = super(MyRegistrationForm, self).save(commit=False)
        ...

所以你有什么错误吗?你能告诉我…你是如何在
models.py
文件中定义
电话的吗?我没有在models.py中定义它,因为我使用默认的django用户模型。所以我刚刚在auth\u用户表中创建了电话列尝试打印
新用户表单。是否有效()
查看它是否真的是
真的
。在这两种情况下,您都会被重定向到
/
,以便能够区分它们。如果请求,您可能需要执行
操作。方法=='POST':
而不是
如果请求。POST:
您还可以缩短此行:
newuser=auth.authenticate(username=newuser\u form.cleaned\u data['username'],password=newuser\u form.cleaned\u data['password2'])
to->
newuser=auth.authenticate(username=username,password=password)