django - 如何在登录后重定向django.contrib.auth.views.login?

jua*_*ith 5 python authentication django redirect

我加django.contrib.auth.views.login 在我的网页随处可见,对于我不得不加载templatetag我base.html文件(即返回AuthenticationForm).此模板标签包含registration/login.html模板.

登录工作正常但我希望它在登录前将用户重定向到他们所在的页面.现在,它将我重定向到/ wherever_i_am/login,显示registration/login.html"登录ok"或"登录失败"消息,但没有base.html的其余部分.

我已经关注了django文档和一些像这样的 SO问题,但我无法正确重定向.我修改了next变量,但它似乎不起作用(next={{ request.get_full_path }}重定向到/ wherever_i_am/login ...再次)

你尝试过类似的东西吗?有任何想法吗?

UPDATE1 现在,问题可能是这样的:如果我想在我的网页中包含登录表单,我是否必须声明自己的登录视图?

谢谢.

Jie*_*ang 14

找到答案:

在settings.py中更改settings.LOGIN_REDIRECT_URL,

下面的代码是来自django的副本:

   if request.method == "POST":
    form = authentication_form(data=request.POST)
    if form.is_valid():
        # Ensure the user-originating redirection url is safe.
        if not is_safe_url(url=redirect_to, host=request.get_host()):
            redirect_to = settings.LOGIN_REDIRECT_URL
   ...
Run Code Online (Sandbox Code Playgroud)


sea*_*ean 6

下面允许用户将用户重定向到他们登录后尝试访问的页面,但无需编写自定义视图.它包含您需要添加的所有代码以使其工作.(另外,并不是所有的TEMPLATE_CONTEXT_PROCESSORS都需要,但是如果你明确地设置了一个值,你就会覆盖默认值,所以需要重新添加它们.)

settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.request",
    "django.core.context_processors.static",
)
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.contrib.auth.views import login, logout
...the other imports for your app ...

urlpatterns = patterns('',
    (r'^login/$', login, {'template_name':'login.html'} ),
    (r'^logout/$', logout,{'template_name':'logout.html'}),
    ...the other urls for your app...
)
Run Code Online (Sandbox Code Playgroud)

的login.html

<html>
    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">
        {% csrf_token %}
        {{form}}<br/>
       <input type="submit" value="login" />
       <input type="hidden" name="next" value="{{ next }}" />
   </form>
</html>
Run Code Online (Sandbox Code Playgroud)

logout.html

<html>
<p>You are logged out. To log in again, click <a href="/login/">here</a>.</p> 
</html>
Run Code Online (Sandbox Code Playgroud)

views.py

@login_required(login_url="/login/")
def view1(request):
    ....this is a view you want to protect with security...

@login_required(login_url="/login/")
def view1(request):
    ....this is a view you want to protect with security...
Run Code Online (Sandbox Code Playgroud)