【问题标题】:Python - Django - activate() returns NonePython - Django - activate() 返回无
【发布时间】:2013-07-27 06:21:51
【问题描述】:

好的,所以我正在尝试使用 Django 创建一个登录。

来自views.py:

from django.shortcuts import *
from forms import UserRegistrationForm
from django.contrib.auth import authenticate, login
from django.core.mail import send_mail
from django.conf import settings
import pprint
import utils
import models
from django.http import HttpResponse
import views
from django.conf.urls import patterns, url    

def login_user(request):
    state = "Please log in below..."
    username = password = ''

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

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

        if user is not None:
            if not user.is_verified:
                state = "Please check your e-mail to verify your account."
            elif user.is_active:
                login(request, user)
                state = "You're successfully logged in!"
            else:
                state = "Your account is not active, please contact the site admin."
        else:
            state = "Your username and/or password were incorrect."

        return render_to_response('myapp/dashboard.html', {'state': state}, RequestContext(request))

    else:
        return render_to_response('myapp/login.html', RequestContext(request))

我的登录模板(login.html):

<h3>Login</h3><hr />

            <form action="/login/" method="post">
        {% csrf_token %}
                {% if next %}
                <input type="hidden" name="next" value="{{ next }}" />
                {% endif %}

                username:
                <input type="text" name="username" value="{{ username }}" /><br />
                password:
                <input type="password" name="password" value="" /><br />

                <input class="btn" type="submit" value="Log In" />
            </form>

我正在使用基本的 SQLite3 来解决所有问题。 python manage.py syncdb 运行没有问题

来自 settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'tempDB'
    }
}

当我登录到我的管理站点时,我看到了用户:

用户名:尼克 密码:nick 的哈希版本

当我插入中断(使用 PBD)时,我能够看到应用程序通过了 login_user 视图。

> ...myapp/myapp/views.py(52)login_user()
-> state = "Please log in below..."
(Pdb) n
> ...myapp/myapp/views.py(53)login_user()
-> username = password = ''
(Pdb) print username
*** NameError: name 'username' is not defined
(Pdb) n
> ...myapp/myapp/views.py(55)login_user()
-> if request.POST:
(Pdb) print username

(Pdb) n
> ...myapp/myapp/views.py(56)login_user()
-> username = request.POST.get('username')
(Pdb) print username

(Pdb) n
> ...myapp/myapp/views.py(57)login_user()
-> password = request.POST.get('password')
(Pdb) print username
nick
(Pdb) n
> ...myapp/myapp/views.py(59)login_user()
-> user = authenticate(username=username, password=password)
(Pdb) print password
nick
(Pdb) n
> ...myapp/myapp/views.py(61)login_user()
-> if user is not None:
(Pdb) print user
None

这表明它获得了用户名“nick”和密码“nick”(我设置帐户时使用的设置)但是我遇到的问题是身份验证仍然返回 None,这意味着没有设置某些东西正确/不工作。

在 login_user 查看后,“状态”会显示“您的用户名和/或密码不正确。”正如views.py中所说的那样

如果有人能帮助我,我将不胜感激!

【问题讨论】:

标签: python django web-applications heroku login


【解决方案1】:

(也回复了 G+)

来自您的 pdb 会话:

(Pdb) print password
nick

如果发生这种情况,那就有问题了,你不同意吗? 另外,我会取消 vars 的初始化,而是这样做:

username = request.POST.get('username')
password = request.POST.get('password')
if username and password:
    # Your code

request.POST.get 无论如何都可以工作(POST 始终初始化为 QueryDict),如果找不到密钥,get() 将返回 None,因此您不会收到任何错误 - 这对您来说可能更容易看看发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2013-09-10
    • 2014-05-14
    • 2020-08-09
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多