Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django登录未重定向到索引_Python_Django_Authentication - Fatal编程技术网

Python django登录未重定向到索引

Python django登录未重定向到索引,python,django,authentication,Python,Django,Authentication,我有一个登录屏幕,在成功的身份验证后,它会在同一个基本URL上显示用户详细信息,过去它一直工作得很好,突然它抛出302响应代码HTTP POST/login/302[0.60127.0.0.1:53864]当输入正确的用户名和密码时,不会启动重定向,它一直在加载。 更奇怪的是,当我重新加载同一个选项卡或打开新选项卡时,它已正确登录并显示相应的详细信息。没有对登录功能进行任何更改,我最近唯一做的更改是添加了与此无关的重置密码功能 用户登录 url.py 目标:在同一基本URL(127.0.0.1:

我有一个登录屏幕,在成功的身份验证后,它会在同一个基本URL上显示用户详细信息,过去它一直工作得很好,突然它抛出302响应代码
HTTP POST/login/302[0.60127.0.0.1:53864]
当输入正确的用户名和密码时,不会启动重定向,它一直在加载。 更奇怪的是,当我重新加载同一个选项卡或打开新选项卡时,它已正确登录并显示相应的详细信息。没有对登录功能进行任何更改,我最近唯一做的更改是添加了与此无关的重置密码功能

用户登录

url.py

目标:在同一基本URL(127.0.0.1:8000)上显示登录和用户详细信息(登录视图),即如果用户登录,则显示用户详细信息,否则显示登录表单
索引视图

index.html

{%extends'app/base.html%}
{%block title%}
标题
{%endblock%}
{%block body%}
{%if user.u经过身份验证%}
{%include'app/header.html%}
欢迎{{user.username}
{%else%}
{%endif%}
{%endblock%}
这几天它一直在正常工作,不知道是什么原因造成的。请建议解决此问题的方法。
谢谢。

好吧,这是一个奇怪的问题,但我在我的一个应用程序的生产中看到了它,我认为这与浏览器的缓存有关。确实很难可靠地复制,但自从我进行了以下修复(对于一些实际上不相关的东西),问题似乎已经解决了

尝试为响应设置缓存控制:

response=HttpResponseRedirect(反向('index'))
响应['cache-control']='private,max age=0,无缓存,无存储'
返回响应
请告诉我这是否有效,这一直困扰着我,我还没有发现我的修复是否真的有效

要添加中间件,请执行以下操作:

中间件.py

类CacheControlMiddleware(SimpleMiddleware):
定义呼叫(自我,请求):
#之前为每个请求执行的代码
#该视图(以及更高版本的中间件)被称为。
响应=自我获取响应(请求)
响应['cache-control']='private,max age=0,无缓存,无存储'
返回响应
然后在settings.py中添加:

中间件=[
'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.xFrameOptions中间件',
“我的应用程序middeware.CacheControlMiddleware”,
]

尝试后,问题仍然存在。也尝试了匿名模式,但同样的问题。更奇怪的是,当我输入正确的凭证后重新加载时,它会登录,在注销和再次登录后,我仍然会收到302响应代码,但它会重定向到所需的屏幕,而无需重新加载。这很烦人,恐怕我当时不知道。我还看到了请求和302响应,但浏览器挂起。你每次都看到这个吗?你试过不同的浏览器吗?我只试过chrome(普通模式和隐姓埋名模式)。当我第一次打开浏览器时发生(在随后的登录和注销时,它会以某种方式重定向,但仍会出现302响应代码)。请尝试在中间件中设置
缓存控制
标头,我可以确认,因为我更改了它,我和我的同事都没有这个问题。这需要我安装任何第三方软件包吗?您能指导我将其添加到中间件吗?已启动重定向。登录后,您使用
HttpResponseRedirect
将用户重定向到reverse('index'),该类返回302响应。不过,这个观点没有什么问题。您需要检查IndexView正在执行的操作,因为在加载数秒后,您正在重定向用户。浏览器会出现“重定向次数过多”错误?但是,当我手动重新加载(ctrl+R)时,不会显示此类错误,它呈现了适当的详细信息。当我在关闭浏览器后第一次打开浏览器时(在随后的登录和注销时,它会以某种方式重定向,但仍然会出现302响应代码)就会发生此问题。我只是注意到,此问题不仅在登录时发生,而且在注销时也会发生。由于这与身份验证和重定向有关,这是常见问题还是有任何修复?
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',{})
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$',views.IndexView.as_view(),name='index'),
    url(r'login/',views.user_login,name='login'),]
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  
{% 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 %}