【问题标题】:Runtime error when trying to logout django尝试注销 django 时出现运行时错误
【发布时间】:2015-10-25 02:01:41
【问题描述】:

当我尝试从我的 django 项目中注销时,我收到以下错误:

“调用 Python 对象时超出最大递归深度”

这是注销按钮的网址:

url(r'^logout', 'users.views.logout', name='logout'),

这是视图:

from django.shortcuts import render
from deck1.models import Card
from django.template import RequestContext 
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.decorators import login_required
from users.forms import RegisterForm

@login_required
def logout(request):
    logout(request)
    return  HttpResponseRedirect('/deck')

【问题讨论】:

    标签: python django recursion runtime logout


    【解决方案1】:

    您的视图 logout 正在覆盖内置 logout 函数的命名空间。使用 as 关键字为 django.contrib.auth.login 函数定义别名。

    from django.contrib.auth import logout as django_logout
    
    @login_required
    def logout(request):
        django_logout(request)
        return  HttpResponseRedirect('/deck')
    

    【讨论】:

      【解决方案2】:

      使用这个:

      @login_required
      def user_logout(request):
          logout(request)
          return  HttpResponseRedirect('/deck')
      

      并据此更改您的网址

      【讨论】:

      • 您能否正确格式化您的代码
      【解决方案3】:

      我也遇到过同样的问题。请将您的视图函数名称从 logout 更改为任何其他名称或使用其他名称导入 logout。

      def logout(request):
          django_logout(request)
          return  HttpResponseRedirect('/deck')
      

      您也可以简单地在代码中更改它来解决此问题。

      from django.contrib.auth import login, authenticate, logout as logoutUser
      

      只需更改此行,您的代码就会正常运行。谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        • 2017-04-04
        相关资源
        最近更新 更多