Django 登录不工作

Django login not working

我正在尝试使用 django auth.views
创建一个 login 页面 但不幸的是,用户没有登录。我什至尝试以超级用户身份登录(能够使用 django admin 登录)。但是即使通过我的登录也无法以超级用户身份登录。
这是我的 views.py

from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from .forms import LoginForm
from django.utils import timezone
from django.views.generic.base import TemplateView, RedirectView
from django.views.generic.edit import FormView
from django.views.generic  import DetailView, ListView
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login as auth_login
from django.shortcuts import redirect, resolve_url
from django.utils.decorators import method_decorator

from django.views.decorators.debug import sensitive_post_parameters



class IndexView(TemplateView):
    template_name = 'index.html'
    def get_context_data(self, **kwargs ):
        context = super(IndexView, self).get_context_data(**kwargs)
        context = {'now':timezone.localtime(timezone.now(),timezone = None) }
    return context

class Login(FormView):
    form_class = AuthenticationForm

    def form_valid(self, form):
        redirect_to = settings.LOGIN_REDIRECT_URL
        auth_login(self.request, form.get_user())
        if self.request.session.test_cookie_worked():
            self.request.session.delete_test_cookie()
        return HttpResponseRedirect(redirect_to)

    def form_invalid(self, form):
            return self.render_to_response(self.get_context_data(form=form))

    @method_decorator(sensitive_post_parameters('password'))
    def dispatch(self, request, *args, **kwargs):
       request.session.set_test_cookie()
       return super(Login, self).dispatch(request, *args, **kwargs)



class ProfileView(TemplateView):
    template_name='profile.html'

    @method_decorator(login_required) 

    def dispatch(self, *args, **kwargs):
        if self.request.user.is_active:
            return super(ProfileView, self).dispatch(*args, **kwargs)                
        else:        
            return HttpResponseRedirect('%s?next=%s' % (settings.LOGIN_URL, self.srequest.path))

settings.py 中,我将 LOGIN_URLLOGIN_REDIRECT_URL 的设置值分别设置为 'accounts/login''accounts/profile'

这是我在模板中的表单。

<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <input class="btn btn-danger form-control submit-btn"  type="submit" value="Login + Access Profile" />
</form>   

Problem: After typing the credentials, the url just adds a csrfmiddletoken=..... It doesnt redirect to profile page. Nor does the User gets Logged in ( because when accounts/profile is visited it redirects back to login page.)

谁能帮我解决这个问题。我刚刚学习基于 Django class 的视图、身份验证。提前致谢。

您正在尝试使用自定义 CBV Login(FormView),但在模板中您有 <form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 因此无法在 POST 请求时调用您的登录视图。 您应该至少将 "action" 参数更改为 action="/accounts/login"(但最好使用 "url" 模板标签)

附加信息:http://www.w3.org/TR/html401/interact/forms.html https://docs.djangoproject.com/en/1.8/ref/templates/builtins/("url" 部分)

我还注意到 return HttpResponseRedirect('%s?next=%s' % settings.LOGIN_URL, self.srequest.path)) 中的错字 - 我认为应该 self.request.path