登录表单未在Django中提交 [英] Registration Form not submitting in Django

查看:149
本文介绍了登录表单未在Django中提交的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在django中使用覆盖save方法的表单进行注册。我没有任何错误,但没有提交表单。以下是我的代码:
Models.py:

 从django.db导入模型
从django。 contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
meta_keywords = models.CharField(Meta Keywords,max_length = 255,
help_text =元标记的逗号分隔的关键字集)
meta_description = models.CharField(Meta描述,max_length = 255,
help_text ='描述元标记的内容)'

def __unicode __(self):
返回User Profile for:+ self.username

class Meta:
ordering = [' - id ']

forms.py



<$ p $从django.contrib.auth.forms导入的用户
从django.contrib.auth.forms导入UserCreationForm
从django导入表单
从django.contrib.auth.models导入用户
从accounts.models import UserProfile
从pprint import pprint


class RegisterationForm(UserCreati onForm)
email = forms.EmailField(label =Email)
fullname = forms.CharField(label =全名)

class Meta:
model = User
fields =(username,fullname,email)

def save(self,commit = True):
user =注册表格,自身).save(commit = False)
first_name,last_name = self.cleaned_data [fullname]。split()
user.first_name = first_name
user.last_name = last_name
user.email = self.cleaned_data [email]
如果提交:
user.save()
返回用户

views.py

  from django.contrib.auth。从django.template导入UserCreationForm 
导入RequestContext
从django.shortcuts import render_to_response,get_object_or_404
from django.core import urlresolvers
from django.http import HttpResponseRedirect
from django.contrib.auth.dec orators从accounts.forms import导入login_required
注册表格
#from accounts.forms import UserProfile

def register(request,template_name =account / register.html):
如果request.method =='POST':
postdata = request.POST.copy()
form = RegisterationForm(postdata)
如果form.is_valid():
form.save
un = postdata.get('username','')
pw = postdata.get('password','')
from django.contrib.auth import login,验证
new_user = authenticate(username = un,password = pw)
如果new_user和new_user.is_active:
登录(request,new_user)
url = urlresolvers.reverse('dashboard ')
return HttpResponseRedirect(url)
else:
form = RegisterationForm()
page_title =用户注册
返回render_to_response(template_name,lo cals(),context_instance = RequestContext(request))


@login_required
def dashboard(request):
pass

@login_required
def设置(请求):
通过

templatefile(register.html) :

 < div class =register_form> 
< form method =postaction =。类= 购物车 >
{%csrf_token%}
{{form.as_p}}
< input type =submitvalue =注册name =submitalt =注册/>
< / form>
< / div>

提交表单后,它不再显示任何形式。在db中没有插入新的记录,我也从管理面板中检查。



我想知道什么可以解决问题,因为每件事情似乎都很好。有没有一些好的方法来调试问题?有些东西像打印一些东西,但是在这种情况下哪里和如何调试?

解决方案

p>

  form.save 

  form.save()

我很紧张!证明我对! (或部分右)



无论我是对还是错,我通常使用Python的 traceback 模块。使用起来很简单。



http: //docs.python.org/library/traceback.html


I am doing registration in django using a form with overriding save method. I am not having any error but not submitting form. Following is my code: Models.py:

from django.db import models
from django.contrib.auth.models import User 
class UserProfile(models.Model):
    user=models.OneToOneField(User) 
    meta_keywords=models.CharField("Meta Keywords",max_length=255,
            help_text="Comma delimited set of keywords of meta tag")
    meta_description=models.CharField("Meta Description",max_length=255,
            help_text='Content for description meta tag')

    def __unicode__(self):
        return "User Profile for: "+self.username

    class Meta:
        ordering=['-id']

forms.py

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
from accounts.models import UserProfile
from pprint import pprint


class RegisterationForm(UserCreationForm):
    email = forms.EmailField(label = "Email")
    fullname = forms.CharField(label = "Full name")

    class Meta:
        model = User
        fields = ("username", "fullname", "email", )

    def save(self, commit=True):
        user = super(RegisterationForm, self).save(commit=False)
        first_name, last_name = self.cleaned_data["fullname"].split()
        user.first_name = first_name
        user.last_name = last_name
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

views.py

from django.contrib.auth.forms import UserCreationForm
from django.template import RequestContext
from django.shortcuts import render_to_response,get_object_or_404
from django.core import urlresolvers
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from accounts.forms import RegisterationForm
#from accounts.forms import UserProfile

def register(request,template_name="account/register.html"):
    if request.method=='POST':
        postdata=request.POST.copy()
        form=RegisterationForm(postdata)
        if form.is_valid():
            form.save
            un=postdata.get('username','')
            pw=postdata.get('password','')
            from django.contrib.auth import login,authenticate
            new_user=authenticate(username=un,password=pw)
            if new_user and new_user.is_active:
                login(request,new_user)
                url=urlresolvers.reverse('dashboard')
                return HttpResponseRedirect(url)            
    else:
        form=RegisterationForm()
    page_title="User Registration"
    return render_to_response(template_name,locals(),context_instance=RequestContext(request))


@login_required
def dashboard(request):
    pass

@login_required
def settings(request):
    pass

templatefile(register.html):

    <div class="register_form">
    <form method="post" action="." class="cart"> 
        {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="Register" name="submit" alt="Register" />
    </form>
</div>

After submitting form, it doesn't show any thing except the form again. In db no new records are inserted, I also checked it from admin panel.

I am wondering that what can be the problem because every thing seems fine. Is there some good way to debug problem? some thing like pprint some thing but where to and how to debug in this situation?

解决方案

Let me take a wild guess

form.save

to

form.save()

I am nervous! Prove me right!!! (or partially right)

Whether I am right or wrong, I usually use Python's traceback module. It's really simple to use.

http://docs.python.org/library/traceback.html

这篇关于登录表单未在Django中提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆