3

私はdjangoが初めてで、ユーザー認証を機能させようとしています。非常に基本的なログイン フォームとビューをセットアップしましたが、次のエラーが表示されます。

AttributeError at /accounts/login/ 'User' object has no attribute 'user'

私はUser.user
にアクセスしようとしないので混乱しています。認証されたユーザーは「/」にリダイレクトするだけなので、最初のelseステートメントで何かでなければならないことはわかってい
ます。ビューは次のとおりです。

def login(request):
  if request.user.is_authenticated():
    return HttpResponseRedirect("/")
  else:
    if request.method == 'POST':
      username = request.POST['username']
      password = request.POST['password']
      user = authenticate(username=username, password=password)
      if user is not None:
        if user.is_active:
          login(user)
          return HttpResponseRedirect("/")
      return HttpResponse("There was an error logging you in")
    else:
      return render_to_response("registration/login.html", 
                                 context_instance=RequestContext(request))

エラーは、views.py の 15 行目で発生します: if request.user.is_authenticated():

4

2 に答える 2

5

ビュー関数はと呼ばれlogin、単一のパラメーターを取りますrequest

ビューの11行目で、を呼び出しますlogin(user)。さて、あなたはおそらくからのログイン関数であることを意味し、django.contrib.authおそらくビューの上部にあるそこからそれをインポートしたのでしょう。ただし、Pythonは一度に1つの名前しか使用できません。したがって、ビューloginに名前を付けると、その名前への既存の参照が上書きされます。

その結果、その行はログイン関数ではなく、ビューを呼び出します。(そのため、特定のエラーが発生します。ビューの最初の行がチェックされrequest.user、通常はリクエストである最初のパラメーターから取得requestされます。ただし、この場合、user最初のパラメーターとして渡され、もちろんユーザーは渡されません。 t自体にユーザーパラメータがあります。)

解決策は、ビューの名前を別の名前に変更するか、ビュー内from django.contrib import authで呼び出して呼び出すauth.login(user)ことです。

于 2012-04-11T21:23:30.507 に答える
1

login には、request と user の 2 つの引数が必要です。リクエストが与えられていない場合、ログインは Cookie などを設定できません。

login(request, user)

https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login

于 2012-04-11T21:13:18.367 に答える