[英]django login not redirecting to index
我有一個登錄屏幕,成功驗證后應該在同一個基本 URL 上顯示用戶詳細信息,它過去一直工作得很好,突然間它拋出 302 響應代碼HTTP POST /login/ 302 [0.60, 127.0.0.1:53864]
當輸入正確的用戶名和密碼時,不會啟動重定向,它永遠保持加載。 更奇怪的是,當我重新加載同一個選項卡或打開一個新選項卡時,它會正確登錄並顯示相應的詳細信息。 沒有進行與登錄功能相關的更改,我最近所做的唯一更改是添加了與此無關的重置密碼功能。
用戶登錄
def user_login(request):
field = None
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username,password=password)
try:
field = UserModel.objects.get(user__username=username)
if user:
if user.is_active:
login(request,user)
return HttpResponseRedirect(reverse('index'))
else:
messages.error(request,'username or password not correct')
return HttpResponseRedirect('../')
else:
print("Error logging in{}".format(password))
messages.error(request,'Invalid username/password combination')
return HttpResponseRedirect('../')
except Exception:
#return HttpResponse("ACCOUNT NOT ACTIVE!!!")
messages.error(request,'Entered username does not belong to any account')
return HttpResponseRedirect('../')
else:
return render(request,'app/login.html',{})
網址.py
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^$',views.IndexView.as_view(),name='index'),
url(r'login/',views.user_login,name='login'),]
目的:在相同的基本 URL(127.0.0.1:8000) 上顯示登錄和用戶詳細信息(登錄視圖),即如果用戶已登錄,則顯示用戶詳細信息,否則顯示登錄表單
索引視圖
class IndexView(TemplateView):
template_name = 'app/index.html'
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
if self.request.user.is_authenticated:
today = date.today()
print(today)
context['products'] =ProductModel.objects.filter(usr=self.request.user)
print("LOGGED IN")
return context
索引.html
{% extends 'app/base.html' %}
{%block title %}
<title>TITLE</title>
{% endblock %}
{%block body %}
{% if user.is_authenticated %}
{% include 'app/header.html' %}
<div class="container">
<h1>Welcome {{user.username}}</h1>
{% else %}
<!--LOGIN FORM HERE-->
{% endif %}
{% endblock %}
這些天它一直在工作,沒有任何問題,不確定是什么原因造成的。 請建議修復此問題。 謝謝。
好的,所以這是一個奇怪的,但我在我的一個應用程序的生產中看到它,我認為這與瀏覽器的緩存有關。 確實很難可靠地重現,但是自從我發布了以下修復程序(對於實際上不相關的東西)之后,問題似乎已經解決了。
嘗試為響應設置cache-control
:
response = HttpResponseRedirect(reverse('index'))
response['cache-control'] = 'private, max-age=0, no-cache, no-store'
return response
請告訴我這是否有效,我一直困擾着我還沒有發現我的修復是否真的有效!
要添加中間件, 根據 Django 的文檔:
中間件.py
class CacheControlMiddleware(SimpleMiddleware):
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
response['cache-control'] = 'private, max-age=0, no-cache, no-store'
return response
然后在settings.py中添加:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'my_app.middeware.CacheControlMiddleware',
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.