2015-07-23 4 views
1

Я пытаюсь настроить логин, используя Джанго и самозагрузки нашли here и hereДжанго Войти Exception Значение: «юникода» объект не вызываемая

мой 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

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 -

 {% 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 %} 

Как только я нажимаю «вход» Я получаю следующее отслеживающий -

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 

ответ

1

В файле URLS, вам нужно удалить строка вокруг имен вида.

Как это:

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

Обратите внимание, что новый django recommended way is:

from core import views 

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

Кроме того, вы можете упростить ваш взгляд, как это:

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 - зависит от того, где templa te находится.

+0

Спасибо, что сделал. Отдельная проблема теперь заключается в том, что она жалуется, что 'TemplateDoesNotExist at/login /' – whoisearth

+0

'render_to_response' ожидает имя шаблона в качестве первого аргумента. Вы предоставляете ему путь, который является вопросом – karthikr

+0

thnx. создавая новый вопрос, я удалил render_to_response и получил ту же ошибку. – whoisearth

Смежные вопросы