django login异常值:'unicode'对象不可调用 [英] django login Exception Value: 'unicode' object is not callable

查看:40
本文介绍了django login异常值:'unicode'对象不可调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用django和bootstrap设置登录名,此处此处

I'm attempting to setup a login using django and bootstrap found here and here

我的views.py

my views.py

def LoginRequest(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            user = authenticate(email=email, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
            else:
                return render_to_response('/', {'form': form}, context_instance=RequestContext(request))
        else:
            return render_to_response('/', {'form': form}, context_instance=RequestContext(request))
    else:
        form = LoginForm()
        return render_to_response('/', {'form': form}, context_instance=RequestContext(request))

我的urls.py

from core.views import LoginRequest, LogoutRequest, ContactRequest

urlpatterns = patterns('',
    url(r'^login/$', 'LoginRequest'),
    url(r'^logout/$', 'LogoutRequest'),

我的forms.py

my forms.py

class LoginForm(forms.Form):
    email = forms.CharField(label=(u'Email'), max_length=30)
    password = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False), max_length=30)

还有我的index.html的摘录-

And the snippet from my index.html -

      {% if user.is_authenticated %}
        <li><a href={% url 'dashboard' %}>Dashboard</a></li>
      {% else %}
        <li class="dropdown">
        <a class="dropdown-toggle" href="#" data-toggle="dropdown">Login<strong class="caret"></strong></a>
        <div class="dropdown-menu" style="padding: 15px; padding-bottom: 10px;">
          <form action='/login/' method="POST">
          {% csrf_token %}
            {% if form.errors %}
                {{ form.errors}}
            {% endif %}
            <label for="id_email">Login:</label>
            <input type="text" name="email" id="id_email">
            <br />
            <label for="id_password">Pass:</label>
            <input type="password" name="password" id="id_password">
            <br />
            <input class="btn btn-primary" type="submit" value="Login" />
            <input type="hidden" name="next" value="{{ '/dashboard' }}" />
        </form>
       </div>
       </li>
     {% endif %}

点击登录"后,我将获得以下回溯-

As soon as I hit "login" I get the following traceback -

Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

Exception Type: TypeError at /login/
Exception Value: 'unicode' object is not callable

推荐答案

在您的url文件中,您需要删除视图名称周围的字符串.

In your urls file, you need to remove the string around the view names.

喜欢这个:

urlpatterns = patterns('',
    url(r'^login/$', LoginRequest), #Shred the quotes
    url(r'^logout/$', LogoutRequest), #Shred the quotes

请注意,新的 django建议的方式是:

from core import views

urlpatterns = patterns('',
    url(r'^login/$', views.LoginRequest),
    url(r'^logout/$', views.LogoutRequest),

此外,您可以像这样简化视图:

Also, you can simplify your view like this:

def LoginRequest(request):

    redirect_to = request.META.get('HTTP_REFERER', '/')
    if request.user.is_authenticated():
        return HttpResponseRedirect(redirect_to)
    form = LoginForm()
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password']
            user = authenticate(email=email, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect(redirect_to)
    return render_to_response('/', {'form': form}, context_instance=RequestContext(request))

此外,/必须类似于:/index.html -取决于模板的位置.

Also, / needs to be something like: /index.html - depends on where the template is located.

这篇关于django login异常值:'unicode'对象不可调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆