django 登录重定向到“/undefined”

Posted

技术标签:

【中文标题】django 登录重定向到“/undefined”【英文标题】:django login redirects to "/undefined" 【发布时间】:2019-07-19 13:26:25 【问题描述】:

使用 django,我有一个简单的登录表单:

登录.html

<form id="" method="post" action="% url 'login' %" class="form" role="form">
    % csrf_token %
    % bootstrap_form form %
    <div class="pull-right">
        <button class="btn btn-default pull-right" type="submit"></button>
    </div>
</form>

urls.py:

urlpatterns = [
    path('', MainView.as_view(), name='main'),
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')),
]

settings.py中,有以下参数:

LOGIN_REDIRECT_URL = 'main'

当我以用户身份登录时,我被多次重定向并最终到达“/未定义”网址,但登录确实有效:

[19/Jul/2019 13:09:53] "GET /accounts/login/ HTTP/1.1" 200 956
# CLICK ON THE SUBMIT BUTTON
[19/Jul/2019 13:09:54] "POST /accounts/login/ HTTP/1.1" 302 0
[19/Jul/2019 13:09:54] "GET / HTTP/1.1" 200 2496
Not Found: /undefined
[19/Jul/2019 13:09:54] "GET /undefined HTTP/1.1" 404 2189

什么可能导致最后一次重定向? '/' 应该是结束 url。

编辑: 如果我使用直接的http://localhost:8000/accounts/login/ URL 登录,我不会被重定向到/undefined

[19/Jul/2019 13:57:51] "GET /accounts/login/ HTTP/1.1" 200 953
[19/Jul/2019 13:57:55] "POST /accounts/login/ HTTP/1.1" 302 0
[19/Jul/2019 13:57:55] "GET / HTTP/1.1" 200 2496

【问题讨论】:

提交表单后会出现这种情况吗? 是的,当我按下提交按钮时会发生这种情况,登录也有效,只是重定向失败。 日志显示您被重定向到/:[19/Jul/2019 13:09:54] "GET / HTTP/1.1" 200 2496。所以我会查看MainView,看看它为什么会将你重定向到/undefined 【参考方案1】:

试试

LOGIN_REDIRECT_URL = '/main/'

而不是

LOGIN_REDIRECT_URL = 'main'

在 settings.py 中告诉我

【讨论】:

我收到错误 Not Found: /main/ [19/Jul/2019 13:34:01] "GET /main/ HTTP/1.1" 404 2177,我也尝试过 juste LOGIN_REDIRECT_URL = '/' LOGIN_URL = '/login/' 试试这个 LOGIN_URL 参数似乎没有任何改变 转到此路径:your_venv\Lib\site-packages\django\contrib\auth\views.py 在该文件中转到第 69 行并更改 redirect_to = 'url_you_want_to_redirect_after_login'【参考方案2】:

我有一个login_user 视图:

def login_user(request):
    form = AuthenticationForm(request.POST or None)
    context = 
        "form": form,
    
    if form.is_valid():
        if not request.user.is_authenticated:
            return render(request, 'login.html', context)
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('base')
        else:
            return render(request,
                          'login.html',
                          'error_message': 'Invalid login'
                          )
    else:
        return render(request, 'login.html', context)

login.html 中有action="% url '&lt;app_name&gt;:login_user'%"

base 是主模板。

然后在urls:

url(r'^login_user/$', views.login_user, name='login_user'),

【讨论】:

我在跳跃我不需要创建视图,特别是因为登录确实有效但重定向错误。但如果我不能成功,那可能就是我会做的事 我认为创建视图实际上是正确的做法,因为之后您将对用户日志有更大的控制权。【参考方案3】:

我最终创建了自己的登录类,虽然我不知道首先哪个机制有问题

class MyLoginView(LoginView):
    def form_valid(self, form):
        login(self.request, form.get_user())
        messages.add_message(self.request, messages.SUCCESS,
                                    'Welcome.')
        data = 
        'success_url': self.get_success_url()
        
        return JsonResponse(data)

【讨论】:

以上是关于django 登录重定向到“/undefined”的主要内容,如果未能解决你的问题,请参考以下文章

登录后 Django 重定向到仪表板

django 403 禁止 - 重定向到登录

登录 Django 后重定向到 Next

Django -- 条件登录重定向

Django 登录检查-自动重定向到登录页

Django - 登录后,将用户重定向到他/她所在的页面