Python 用户登录不在其他视图django上工作

Python 用户登录不在其他视图django上工作,python,python-3.x,django,authentication,django-views,Python,Python 3.x,Django,Authentication,Django Views,说明: 我使用Django的身份验证系统登录用户 当我像这样登录用户时: views.py: 从django.contrib.auth导入身份验证、登录 类登录(APIView): def post(自我,请求): 用户名=request.data.get(“用户名”) password=request.data.get(“密码”) 用户=验证(用户名=用户名,密码=密码) 如果用户为无: 返回响应() 其他: 登录(请求、用户) #输出为真 打印(请求.用户.是否经过身份验证) #输出为真 打

说明:

我使用Django的身份验证系统登录用户

当我像这样登录用户时:

views.py:

从django.contrib.auth导入身份验证、登录
类登录(APIView):
def post(自我,请求):
用户名=request.data.get(“用户名”)
password=request.data.get(“密码”)
用户=验证(用户名=用户名,密码=密码)
如果用户为无:
返回响应()
其他:
登录(请求、用户)
#输出为真
打印(请求.用户.是否经过身份验证)
#输出为真
打印(“正在活动:”,请求。用户。正在活动)
返回响应()
我无法在其他视图中验证用户,例如:

views.py

类文件(APIView):
def get(自我,请求):
#输出错误
打印(“已通过身份验证”,request.user.is\u已通过身份验证)
返回响应()
在my settings.py中,我包括:

已安装的应用程序=[
...
“django.contrib.auth”,
“django.contrib.contenttypes”,
...
]
中间件=[
...
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
]
可能的问题:

  • 问题可能是因为我使用了django
  • 这可能是因为我对每个视图都提出了独立请求

有什么想法吗?

据我所知,在使用
rest\u framework.views.APIView
时,必须指定要使用的
身份验证类。为此,您有两种解决方案:

1.配置样式方法 在
settings.py
文件中设置身份验证方法:

REST\u框架={
“默认\u身份验证\u类”:(
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
“默认权限\u类”:(
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.IsAdminUser',
),
}
解决方案可能重复:

2.课堂教学法 设置
authentication\u class
class属性:

从rest\u framework.views导入APIView
从rest_框架导入身份验证、权限
类文件(APIView):
身份验证\u类=[authentication.BasicAuthentication,authentication.SessionAuthentication]#选择您喜欢的方法
权限_类=[permissions.IsAuthenticated,permissions.isadmin]#如果要使用权限
def get(自我,请求):
#应该是django.contrib.auth.User的实例
打印(“用户”,请求。用户)
#应该是真的
打印(“已通过身份验证”,request.user.is\u已通过身份验证)
返回响应()

文档中有更多详细信息:

我尝试了这两种方法,但仍然得到相同的输出。我已经在问题中添加了登录和身份验证的导入。有没有可能我不能在APIView中使用django.contrib.auth?我想我太简单了。我用更多的身份验证/权限类扩展了我的答案。我设法在一个老项目中使用了一个非常类似的配置。告诉我它是否有效。如果没有,您是否需要使用
rest\u framework
而不是普通的Django?现在,我得到了一个401未经授权的错误(由于权限。IsAuthenticated)。我猜身份验证是错误的?我可以使用普通的Django,但是由于项目现在相当大,重写它需要很多工作。是的,身份验证似乎是错误的。我为您提供了最基本的身份验证方案。确保它对应于您正在使用的(也可以是token、jwt、oauth等)。否则,我不明白,你的项目可能有一些特定的东西/我不知道的东西。这和你之前的问题不一样吗?(您可以简单地编辑该问题而不是发布新问题)正如您自己在可能出现的问题中所指出的“这可能是因为我对每个视图都提出了独立请求造成的”,那么您为什么不调查该问题呢?您的Django代码似乎没有问题,您需要解决这个客户端问题。@AbdulAzizBarkat我用Django授权框架重写了代码。从用户授权的角度来看,提供的解决方案似乎只是服务器端的。我在这里发布了一个新问题,因为我使用了一种与前一种截然不同的方法。但我想我要结束前一个问题。