Django登录不起作用

时间:2017-01-12 17:06:46

标签: django authentication login

我尝试创建如下的登录视图:

def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username, password=password)

        if user:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect('rango/index.html')
            else:
                return HttpResponse('Your Rango account is disabled!')
        else:
            print("Invalid login details: {0}, {1}".format(username, password))
            return HttpResponse("Invalid login details supplied!")
    else:
        return render(request, 'rango/login.html', {})

这似乎是正确的方法,但是当我尝试在浏览器中打开页面时,出现以下错误:

TypeError at /rango/login/
login() missing 1 required positional argument: 'user'
Request Method: GET
Request URL:    http://localhost:8000/rango/login/

Django Version: 1.9.10
Exception Type: TypeError
Exception Value:    
login() missing 1 required positional argument: 'user'
Exception Location: C:\Users\Johannes\tangowithdjango\lib\site-packages\django\core\handlers\base.py in get_response, line 147
Python Executable:  C:\Users\Johannes\tangowithdjango\Scripts\python.exe
Python Version: 3.6.0
Python Path:    
['C:\\Users\\Johannes\\tangowithdjango\\tango_with_django_project',
 'C:\\Users\\Johannes\\tangowithdjango\\Scripts\\python36.zip',
 'C:\\Users\\Johannes\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
 'C:\\Users\\Johannes\\AppData\\Local\\Programs\\Python\\Python36\\lib',
 'C:\\Users\\Johannes\\AppData\\Local\\Programs\\Python\\Python36',
 'C:\\Users\\Johannes\\tangowithdjango',
 'C:\\Users\\Johannes\\tangowithdjango\\lib\\site-packages']
Server time:    Thu, 12 Jan 2017 17:56:38 +0100

有没有人遇到类似的问题或知道解决问题的方法?我已经搜索并试了一下但找不到答案。

2 个答案:

答案 0 :(得分:0)

您的代码看起来不错,请确保您要导入此代码

from django.contrib.auth import authenticate, login

同时检查您的观点 这是第一个网址:

url(r'^login', example_views.login, name='log'),

你必须改为:

url(r'^log', example_views.log, name='log'),

答案 1 :(得分:0)

我遵循了该教程并遇到了同样的错误。

我通过更正 urls.py

中的一行来解决这个问题
urlpatterns = patterns(
    ...
    url(r'^login/$', views.login, name='login'),
)

进入这个:

urlpatterns = patterns(
    ...
    url(r'^login/$', views.user_login, name='login'),
)

它应该是您创建的登录视图的名称,在您的情况下为“user_login”。