我正试图建立一个简单的网站登录功能非常类似于这里,所以. 用户应该能够以匿名用户的身份浏览网站,每个页面上都会有一个登录链接.单击登录链接时,用户将被带到登录表单.成功登录后,应该将用户带回他最初单击登录链接的页面. 我猜我必须以某种方式将当前页面的url传递给处理登录表单的视图,但是我不能让它真正工作.

编辑: 我想通了.我通过将当前页面作为GET参数传递来链接到登录表单,然后使用‘Next’重定向到该页面.谢谢!

编辑2: 我的解释似乎不清楚,因此按照要求,下面是我的代码: 假设我们在一个页面foo.html上,并且我们没有登录.现在,我们希望在foo.html上有一个链接到login.html的链接.在那里我们可以登录,然后被重定向回foo.html. foo.html上的链接如下所示:

      <a href='/login/?next={{ request.path }}'>Login</a> 

现在,我编写了一个自定义登录视图,看起来有点像这样:

def login_view(request):
   redirect_to = request.REQUEST.get('next', '')
   if request.method=='POST':
      #create login form...
      if valid login credentials have been entered:
         return HttpResponseRedirect(redirect_to)  
   #...
   return render_to_response('login.html', locals())

以及login.html中的重要一行:

<form method="post" action="./?next={{ redirect_to }}">

所以是的,差不多就是这样,希望这能说明问题.

推荐答案

您不需要为此创建额外的视图,该功能已经内置.

首先,每个带有登录链接的页面都需要知道当前路径,最简单的方法是将请求上下文预处理器添加到settings.py(前4个是缺省的),然后每个请求中都有Request对象:

settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    "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="{% url django.contrib.auth.views.login %}?next={{request.path}}">Login</a>

这将向指向当前页面的登录页面添加一个GET参数.

然后,登录模板可以如此简单:

registration/login.html:

{% block content %}
<form method="post" action="">
  {{form.as_p}}
<input type="submit" value="Login">
</form>
{% endblock %}

Django相关问答推荐

通过父模型查询子对象-Django

按下按钮刷新在html文件中显示的变量

DJANGO 获得模型中发现的第一、第二和第三大价值

dj_rest_auth 中的 PyTest 警告- RemovedInDjango40Warning: django.conf.urls.url() 已弃用,取而代之的是 django.urls.re_path()

Django 关系嵌套related_name

如何在 Django 中将下一个 8 月 1 日添加为 DateTimeField 默认值

使用 Python/Django 上传大文件

使用 south 重构具有继承的 Django 模型

Django rest框架覆盖ViewSet中的page_size

django 管理员登录突然要求 csrf 令牌

在 Django 过滤器语句中,__exact 和等号 (=) 有什么区别?

(fields.E300) 字段定义与模型的关系,该模型要么未安装,要么是抽象的

Django App 配置不当 - 应用程序模块有多个文件系统位置

Django:使用 ModelForm 编辑现有数据库条目

使用 Gunicorn 运行 Django - 最佳实践

如何使用 django-nose 运行单个测试或单个 TestCase?

如何找到两个 Django 查询集的交集?

Django 1.7 - 如何 suppress (1_6.W001)某些元素单元测试可能无法按预期执行.?

django 如何知道已经运行了哪些迁移?

Jinja2中的多级模板继承?