我是django登录设置的新手。 我已经研究过一些看起来很好的东西并将其复制出来。
我发现了这个装饰者: 的 @user_passes_test
这有助于我确保有权访问“/ dashboard”页面的人员已登录。 重定向到登录后,网址是:
placeholder.it/login/?next=/dashboard/%3Fcvr%3D24256790
但是用户总是会发送到:
placeholder.it/accounts/loggedin
下一个网址。 怎么样?
这是我的一些代码: 的 views.py
@user_passes_test(lambda u:u.is_staff, login_url='/accounts/login/')
def dashboard(request):
cvr = request.GET.get('cvr', '')
return render(request,'dashboard.html', { "cvr": cvr})
def login(request):
c = {}
c.update(csrf(request))
return render_to_response('login.html', c)
def auth_view(request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return HttpResponseRedirect('/accounts/loggedin')
else:
return HttpResponseRedirect('/accounts/invalid')
的login.html
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<p class="error">Sorry, that's not a valid username or password</p>
{% endif %}
<form action="{% url '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" />
</form>
<br>
Login to access all sites
{% endblock %}
urls.py
url(r'^accounts/login/$', views.login, name='login'),
url(r'^accounts/auth/$', views.auth_view, name='auth'),
url(r'^dashboard/$', views.dashboard, name='dashboard'),
感谢任何帮助&lt; 3
答案 0 :(得分:3)
您的装饰者正在将未登录的用户发送到login
视图。登录页面有一个发布到auth_view
视图的表单。 auth视图显式将每个登录用户重定向到/accounts/loggedin
。
您可以通过auth_view
中的代码自行重定向用户。您的代码不尊重next
查询参数(装饰器附加到登录URL)。您的代码应该读取next
参数的值并将其放在表单内的隐藏字段中。在对auth_view
的POST请求中,您应该读取该值并将用户重定向到该URL。
答案 1 :(得分:0)
如果用户已登录,则有一个内置装饰器可以处理 导入以下
from django.contrib.auth.decorators import login_required
将装饰器放在你的功能上方:
@login_required(redirect_field_name='next')
def page(request):
将此添加到您的登录模板
input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"