我正在尝试建立一个简单的网站,它的登录功能与上面的非常相似。
用户应该能够以匿名用户的身份浏览该网站,并且每个页面上都会有一个登录链接。单击登录链接时,用户将进入登录表单。成功登录后,应将用户带回他首先单击登录链接的页面。
我猜我必须以某种方式将当前页面的url传递给处理登录表单的视图,但我无法真正让它工作
编辑:
我想出来了。我通过将当前页面作为GET参数传递来链接到登录表单,然后使用“next”重定向到该页面。谢谢
编辑2:
我的解释似乎不清楚,因此根据要求,以下是我的代码:
假设我们在一个foo.html页面上,并且没有登录。现在我们想在foo.html上有一个链接,链接到login.html。在那里我们可以登录,然后重定向回foo.html。
foo.html上的链接如下所示:
<;a href='https://stackoverflow.com/questions/806835/10〕https://stackoverflow.com/login/?next={{request.path}}}'>;登录</a>;
现在,我编写了一个自定义登录视图,看起来有点像这样:
def登录视图(请求):
重定向到=request.request.get('next','')
if request.method==“POST”:
#创建登录表单。。。
如果输入了有效的登录凭据:
返回HttpResponseRedirect(重定向到)
#...
返回render\u to\u响应('login.html',locals())
以及login.html中的重要一行:
<;form method=“post”action=“../?next={{redirect_to}}}”>;
是的,差不多就是这样,希望这能说明问题
您不需要为此创建额外的视图,该功能已经内置
首先,每个带有登录链接的页面都需要知道当前路径,最简单的方法是将请求上下文预处理程序添加到settings.py(第一个4个是默认值),然后请求对象将在每个请求中可用:
设置。py:
模板\u上下文\u处理器=(
“django.core.context_processors.auth”,
“django.core.context_processors.debug”,
“django.core.context_processors.i18n”,
“django.core.context_processors.media”,
“django.core.context_processors.request”,
)
然后添加您想要的登录链接模板:
base.html:
<;a href=”https://stackoverflow.com/questions/806835/{%url django.contrib.auth.views.login%}?下一步={{request.path}}};登录</a>;
这将向登录页面添加一个GET参数,该参数指向当前页面
登录模板可以如此简单:
注册/login.html:
{%block content%}
<;form method=“post”action=”“>;
{{form.as_p}}
<;输入type=“submit”value=“Login”>;
</表格>;
{%endblock%}