0

私は request.user.is_authenticated() このビューに問題があります。

from django.http import HttpResponseRedirect
from django.contrib.auth.models import User
from django.shortcuts import render_to_response
from django.template import RequestContext
from forms import RegistrationForm

def ContributorRegistration(request):
    if request.user.is_authenticated():
        '''if user is logged in -> show profile'''
        return HttpResponseRedirect('/profile/')
    if request.method == 'POST':
        '''if post, check the data'''
        form = ContributorRegistration(request.POST)
        if form.is_valid():
            ''' if form is valid, save the data'''
            user = User.objects.create_user(username=form.cleaned_data['username'],email = form.cleaned_data['email'], password= form.cleaned_data['password'])
            user.save()
            contributor = user.get_profile()
            contributor.location = form.cleaned_data['location']
            contributor.save()
            return HttpResponseRedirect('profile.html')
        else:
            '''form not valid-> errors'''
            return render_to_response('register.html',{'form':form},context_instance=RequestContext(request))
    else: 
        '''method is not a post and user is not logged, show the registration form'''
        form = RegistrationForm()
        context={'form':form}
        return render_to_response('register.html',context,context_instance=RequestContext(request))

基本的に、ユーザーがログインしている場合、profile.html が表示されます: OK ユーザーがログインしておらず、データを投稿していない場合、フォームが表示されます: OK フォームからデータを送信すると、このエラーが返されます:

Request Method: POST
Request URL:    http://localhost:8000/register/
Django Version: 1.4.1
Exception Type: AttributeError
Exception Value:    
'QueryDict' object has no attribute 'user'
Exception Location: /Users/me/sw/DjangoProjects/earth/views.py in ContributorRegistration, line 9

9行目は、フォームデータを送信するときにオブジェクトがないif request.user.is_authenticated(): ようです。どうすれば解決できますか?ありがとうrequestuser

4

2 に答える 2

3

フォームであるかのように、独自のビュー関数に request.POST データを入力しています。

if request.method == 'POST':
    '''if post, check the data'''
    form = ContributorRegistration(request.POST)
    if form.is_valid():

する必要があります

if request.method == 'POST':
    '''if post, check the data'''
    form = RegistrationForm(request.POST)
    if form.is_valid():

オブジェクトにアクセスするにrequest.userは、アプリケーションにユーザー認証ミドルウェアをインストールする必要があります。これを行うには (非常に簡単です)、次の手順を実行します。

あなたに行き、タプルsettings.pyに追加'django.contrib.auth'します。'django.contrib.contenttypes'INSTALLED_APPS

完全にインストールするには、syncdb コマンドが必要になる可能性が非常に高くなります (ユーザー認証のためにいくつかのデータベース テーブルが必要です)。

python manage.py syncdb

そして、それはそれを機能させるはずです。

于 2012-10-04T17:25:19.160 に答える
0

それは私だけですか、それともあなたのフォームの名前はあなたのビュー機能と同じContributorRegistrationですか?

おそらくあなたはタイプミスをしました。

于 2012-10-04T17:37:59.557 に答える