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 '<app_name>: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”的主要内容,如果未能解决你的问题,请参考以下文章