我想创建一个简单的Django身份验证(注册/登录/注销),但我遇到了问题。
如果完成成功登录,则应用程序转到名称为mypage
的下一页,因为我已在settings.py
中定义了该行:LOGIN_REDIRECT_URL = '/mypage'
。
但在新页面中,用户未经过身份验证的用户(我的用户仅在"/login"
和"/register"
页面中进行了身份验证,但未在home
和mypage
中进行身份验证
知道我为什么错了?
这里是代码:
urls.py
url(r'^$', views.home),
url(r'^mypage/$', views.mypage),
url(r'^login/$', views.login, {'template_name': 'login.html', 'authentication_form': LoginForm}),
url(r'^logout/$', views.logout, {'next_page': '/login/'}),
url(r'^register/$', views.register),
url(r'^register/success/$', views.register_success)
views.py
def home(request):
return render_to_response('home.html')
def mypage(request):
return render_to_response('home2.html')
settings.py
LOGIN_REDIRECT_URL = '/mypage'
html 1:
{% if user.is_authenticated %}
<li>
<a href="/logout">LogOut</a>
</li>
{% else %}
<li>
<a href="/login">Login</a>
</li>
{% endif %}
html 2:
{% if user.is_authenticated %}
<a href="#" class="lg">Start</a>
{% else %}
<p>Please Login to start</p>
{% endif %}
答案 0 :(得分:1)
在 urls.py
中from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name='login'),
url(r'^logout/$', auth_views.logout, name='logout'),
. . ..
]
在 login.html
中{% extends 'base.html' %}
{% block title %}Login{% endblock %}
{% block content %}
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
{% endblock %}
答案 1 :(得分:1)
当您使用render_to_response
时,您需要将用户添加到上下文手册,或者您可以将render
与请求一起使用,在这种情况下,user
将添加到您的模板上下文
from django.shortcuts import render, render_to_response
def home(request):
return render(request, 'home.html')
def mypage(request):
return render_to_response('home2.html', {'user': request.user})