Django用户登录和身份验证不起作用

时间:2016-06-15 20:39:31

标签: python django user-interface authentication

我正在使用Django创建一个简单的用户登录页面,并在登录重定向到主页之后。但它总是重定向到app的views.py中给出的未授权选项(即无效的详细信息)。请检查并帮助我。

项目名称:登录和应用程序名称:索引

views.py


from django.shortcuts import render_to_response
from django.contrib import auth
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, logout
from django.core.context_processors import csrf

# Create your views here.

def login(request):
    c = {}
    c.update(csrf(request))
    return render_to_response('login.html', c)

def auth(request):
    username = request.GET.get('username', '')
    password = request.GET.get('password', '')
    user = authenticate(username=username, password=password)

    if user is not None:
            if user.is_active:
                    login(request, user)
                    return HttpResponseRedirect("/home/")
            else:
                    return HttpResponse("Bad request")
    else:
            return HttpResponse("Invalid details")

  @login_required
  def home(request):
       return render_to_response('home.html') 


 App urls.py

from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth.views import login, logout
from . import views

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^$', views.login, name='login'),
   url(r'^auth/$', views.auth, name='auth'),
  url(r'^home/$', views.home, name='home'),
]


Project's: urls.py:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^', include('index.urls')),
  ]

模板:

 login.html

 {% block content %}

 {% if form.errors %}
<p class="error">Sorry, that's not a valid username or password</p>
{% endif %}

 <form action="/auth/" method="post">{% csrf_token %}
  <label for="username">User name:</label>
 <input type="text" name="username" value="" id="username">
 <label for="password">Password:</label>
 <input type="password" name="password" value="" id="password">

 <input type="submit" value="login" />
 <input type="hidden" name="next" value="{{ next|escape }}" />
 </form>

{% endblock %}

home.html

{% block content %}

<h1>Hello Vivek</h1>

{% endblock %}

2 个答案:

答案 0 :(得分:0)

我将分享另一种方法来管理django中的身份验证,假设您已经有一个登录html模板(在带有post动作的表单中输入用户名和密码),用户表单和主页模板,这将是身份验证视图.py:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.views.generic import View
from django.core.urlresolvers import reverse
from django.contrib import messages
from django.contrib.auth import login, authenticate, logout
from ..form import UsersForm


class LoginView(View):

    template_name = ['yourtemplatedirectory/login.html', 'yourtemplatedirectory/home.html']

    def get(self, request, *args, **kwargs):
        form = UsersForm()
        if request.user.is_authenticated():
            return render(request, self.template_name[1])
        return render(request, self.template_name[0])

    def post(self, request, *args, **kwargs):
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username = username, password = password)
        if user is not None:
            login(request, user)
            if user.is_active:
                return render(request, self.template_name[ 1 ])
        else:
            messages.add_message(
                request, messages.ERROR, "Invalid username or password"
                )
            return HttpResponseRedirect(reverse( 'yourapp:login' ))


def LogoutView(request):
    logout(request)
    return HttpResponseRedirect(reverse( 'yourapp:home' ))

只需从登录和注销按钮调用相应的URL即可。希望它有所帮助!!

答案 1 :(得分:0)

改变
username = request.GET.get('username', '')
password = request.GET.get('password', '')

username = request.POST.get('username', '')
password = request.POST.get('password', '')