我正在使用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 %}
答案 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', '')