3

login_page 関数があり、この関数では、authenticate() 関数は、スーパーユーザーの場合にのみユーザー オブジェクトを返します。通常のユーザーの場合、None を返します。これは、ドキュメントに記載されているとおりではありません。

def login_page(request):
    if request.user.is_authenticated(): # if user is already logged in
        return HttpResponseRedirect('/') # SHOULD BE DASHBOARD
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            seo_specialist = authenticate(username=username, password=password) #returns None
            if seo_specialist is not None:
                login(request, seo_specialist)
                return HttpResponseRedirect('/') # SHOULD BE DASHBOARD
            else:
                return render(request, 'login.html', {'form': form})
        else:
            return render(request, 'login.html', {'form': form})
    else: 
        form = LoginForm()
        context = {'form': form}
        return render(request, 'login.html', context)

私のコードに何か問題がありますか?

4

2 に答える 2

12

これを試して:

def login_page(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        seo_specialist = authenticate(username=username, password=password)
        if seo_specialist is not None:
            return HttpResponse("Signed in")
        else:
            return HttpResponse("Not signed in")
    else:
        # takes you to sign in form. 

基本的にis_validとcleaned_dataをrequest.POSTに置き換えてから認証する。また、あなたが持っていることを確認してください

from django.contrib.auth import authenticate

あなたのビューの一番上に。

于 2013-09-17T22:45:26.193 に答える