在django中添加新的注册用户到数据库和他们的登录系统



我已经创建了一个表单,用户在其中输入数据并将该数据保存到数据库中。但是形式不是s!【在这里输入图像描述】【1】有了数据,编码是否有错误?请帮. .

我的代码在这里:-
1) views.py 
-----------------------------------------------------------
from django.http import  HttpResponse
#from django.shortcuts import render_to_response
from django.template import RequestContext, loader
from forms import SignupForm
def signup(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            form.cleaned_data('username')
            form.cleaned_data('email')
            form.cleaned_data('password1')
            form.save()
        return HttpResponse('/login/')     #havent did the login method yet...
    else: 
        t = loader.get_template('signup.html')
        cform = SignupForm()
        c = RequestContext (request, {'form' : cform,})
        return HttpResponse(t.render(c))      
#def login(request):
#   newform = SignupForm()
#if newform.is_valid():

2) forms.py -

from django.contrib.auth.models import User
from django import forms

class SignupForm(forms.Form):
    username            = forms.CharField(max_length=255, label="Username")
    email               = forms.CharField(max_length=255, label="E-Mail Address")
    password1           = forms.CharField(max_length=255, label="Password", widget=forms.PasswordInput)
    password2           = forms.CharField(max_length=255, label="Repeat Password", widget=forms.PasswordInput)

    def clean_username(self):
        try:
            User.objects.get(username=self.cleaned_data['username'])
        except User.DoesNotExist:
            return self.cleaned_data['username']
        raise forms.ValidationError("This username is already in use.Please choose another.")
    def clean(self):
        if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
            if self.cleaned_data['password1'] != self.cleaned_data['password2']:
                raise forms.ValidationError("You must type the same password each time")
        return self.cleaned_data
    def save(self):
        new_user = User.objects.create_user(username=self.cleaned_data['username'], email=self.cleaned_data['email'], password=self.cleaned_data['password1'])
        return new_user

3) urls . py: -

from django.conf.urls import patterns, include, url
from django.contrib import admin
#from salary import settings 
#from salarylive.views import signup
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    #url(r'^$', 'salary.views.home', name='home'),
    #url(r'^salary/', include('salary.foo.urls')),
    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    url(r'^signup/$', 'salarylive.views.signup'),
    #url(r'^login/$', 'salarylive.views.login'),
)

错误回溯:-

error traceback :- Environment:
Request Method: POST
Request URL: http://localhost:8000/signup/
Django Version: 1.4.3
Python Version: 2.7.0
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'salarylive')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')

Traceback:
File "c:Python27libsite-packagesdjangocorehandlersbase.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "e:Software InstallationsAptana Workspacesalarysalaryliveviews.py" in signup
  10.             form.cleaned_data('username')
Exception Type: TypeError at /signup/
Exception Value: 'dict' object is not callable

有一些缩进错误。第一个return HttpResponse应该再缩进一级,这样只有在表单有效的情况下才会发生。第二个return HttpResponse和它上面的行应该缩进一个,比少一个级别,这样它就可以捕捉if语句的传递。

你有它的方式,代码总是重定向,即使表单是无效的,数据没有保存。通过这些更改,第二个返回将在无效时重新呈现带有错误的表单。

相关内容

最新更新