0

我被困在 django 的一个简单的注册表单上。填写注册表时出现此错误:

ValueError at /register/
The given username must be set
Request Method:POST
Request URL:http://127.0.0.1:8000/register/
Django Version:1.4
Exception Type:ValueError
Exception Value:The given username must be set 

这是我的views.py:

    def register_page(request):
if request.method == 'POST':
    form = RegistrationForm(request.POST)

    if form.is_valid():
        user = User.objects.create_user(
        username=form.cleaned_data['username'],
        password=form.cleaned_data['password1'],
        email=form.cleaned_data['email']
        )
        return HttpResponseRedirect('/register/success/')
else:
    form = RegistrationForm()
    variables = RequestContext(request, {'form': form
    })
return render_to_response(
'registration/register.html',
variables
)

这是我的注册模板:

    {% extends "base.html" %}
    {% block title %}User Registration{% endblock %}
    {% block head %}User Registration{% endblock %}
    {% block content %}
    <form method="post" action=".">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="register" />
    </form>
    {% endblock %}

和我的网址模式:

urlpatterns = patterns('',
(r'^$', main_page),
(r'^user/(\w+)/$', user_page),
(r'^login/$', 'django.contrib.auth.views.login'),
(r'^logout/$', logout_page),
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': site_media}),
(r'^register/$', register_page),
(r'^register/success/$', direct_to_template,
{'template': 'registration/register_success.html'}),  
)

我找不到有关此问题的任何信息。我会很感激一些指导,我是 Django 的新手。

4

1 回答 1

0

问题出在我的 forms.py 文件中:

def clean_username(self):
username = self.cleaned_data['username']
if not re.search(r'^\w+$', username):
  raise forms.ValidationError(u'Username can only contain '
    'alphanumeric characters and the underscore.')
try:
  User.objects.get(username=username)
except User.DoesNotExist:
  return username
raise forms.ValidationError(u'Username is already taken.')

通过代码并正确缩进后,问题得到解决。正如我所说,我是 Django 和 python 的新手

谢谢

于 2012-06-11T14:46:11.663 回答