我正在尝试创建登录表单。在login.html中,当用户输入用户名和密码时,它就成了用户对象。如果有返回,它应该重定向到loggedin.html,如果有,它应该重定向到invaild.html。然而,它一直没有返回。
这是我的setting.py
#Authentication backends
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
#added for login authentification
LOGIN_REDIRECT_URL = 'home'
urls.py
#user auth url
url(r'^login/$', auth_views.login, {'template_name': 'forum/login.html'}, name='login'),
url(r'^auth/$', views.auth_view, name='auth'),
url(r'^logout/$', auth_views.logout, {'template_name': 'forum/logout.html'}, name='logout'),
url(r'^loggedin/$', views.loggedin, name='loggedin'),
Model.py
from django.contrib import auth
from django.contrib.auth import logout, authenticate
from django.http.response import HttpResponseRedirect
from django.shortcuts import render
from django.template import context
from django.template.context_processors import request, csrf
from forum.models import Article
def login(request):
c = {}
c.update(csrf(request))
return render(request, 'forum/login.html', c)
def auth_view(request):
name = request.POST.get('name', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=name, password=password)
print(user)
if user is not None:
auth.login(request, user)
return HttpResponseRedirect('/loggedin.html')
else:
return HttpResponseRedirect('/invalid.html')
def base(request):
return render(request, 'forum/base.html', context)
def loggedin(request):
return render(request, 'forum/loggedin.html', {'name': request.user.name})
def logout(request):
return render(request, 'forum/logout.html')
的login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
{% block title %}Login{% endblock %}
{% if from.errors %}
not valid name or password
{% endif %}
{% block content %}
<h2>Login</h2>
<form action="{% url 'forum:auth' %}" method="post">
{% csrf_token %}
name
<input type="text" name="name" id="name" value=""/>
password
<input type="text" name="password" id="password" value=""/>
<input type="submit" value="login"/>
</form>
{% endblock %}
</body>
</html>