gpt4 book ai didi

Python 3.5 - Django 1.8 - 登录后{{ next }}

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:03 26 4
gpt4 key购买 nike

我目前正在通过阅读一本有关该框架的热门书籍“Django by example”来学习 Django。目前,我已经读到了第四章,尽管我可以按照说明进行操作,但我还是没有完全理解某些内容。

在我的 login.html 模板中,系统指示我添加以下代码:

{% extends "base.html" %}
{% block title %}Log-in{% endblock %}
{% block content %}
<h1>Log-in</h1>
{% if form.errors %}
<p>
Your username and password didn't match.
Please try again.
</p>
{% else %}
<p>Please, use the following form to log-in:</p>
{% endif %}
<div class="login-form">
<form action="{% url 'login' %}" method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
<p><input type="submit" value="Log-in"></p>
</form>
</div>
{% endblock %}

我在理解 {{next}} 变量以及它如何链接到其他文件方面遇到问题。书上说:“请注意,我们添加了一个隐藏的 HTML 元素,用于提交名为 next 的变量的值。这当您在请求中传递下一个参数时,变量首先由登录 View 设置。。”

之后,我被指示定义一个新 View :

@login_required
def dashboard(request):
return render(request,
'account/dashboard.html',
{'section': 'dashboard'})

以及此代码的解释:

“login_required 装饰器检查当前用户是否是已验证。如果用户通过身份验证,则执行装饰 View ; 如果用户未经过身份验证,它会将他重定向到带有他尝试访问的 URL 的登录 URL作为名为 next 的 GET 参数进行访问。通过这样做,登录 View 会重定向用户返回到他成功登录后尝试访问的 URL。记住为此,我们以登录模板的形式添加了隐藏输入。”

在 settings.py 文件中,我添加:

LOGIN_REDIRECT_URL = reverse_lazy('dashboard')

“LOGIN_REDIRECT_URL:告诉 Django 登录后重定向哪个 URL如果 contrib.auth.views.login View 没有下一个参数。”

我仍然不明白仪表板 View 如何知道将用户重定向到存储在 next 变量中的 URL。实际上,除了login.html 文件之外,next 变量在其他任何地方都没有定义或使用。这是如何工作的?

不应该有类似“redirect(self.request.GET.get('next'))”之类的代码吗?

最佳答案

@login_required 装饰器将在 dashboard 中的任何代码运行之前运行一些代码。当针对 /dashboard(或任何正确的 URL)发出请求时,@login_required 将首先检查该用户是否已登录。如果他们已登录,则dashboard 将运行并呈现 dashboard.html

但如果他们没有登录,@login_required 会立即阻止您并返回到 /login?next=%2Fdashboard 的重定向。它将 next 作为 GET 参数插入到 URL 中。

然后用户的浏览器将遵循重定向,向 /login?next=%2Fdashboard 发出 GET 请求。此请求呈现 login.html。当它呈现 login.html 时,它将从 URL 中获取 next 参数,并将其传递到模板中。

接下来,用户最终将提交登录表单并向 /login 发送 POST。这将发送隐藏的输入 next,它等于 /dashboard。服务器应通过登录用户并返回到此 next 值的重定向来进行响应。因此,一旦用户登录,他们就会被重定向到 /dashboard,这是他们首先想去的地方。

关于Python 3.5 - Django 1.8 - 登录后{{ next }},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42490968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com