Django含login_required视图的POST请求测试:如何传入登录凭证
解决Django测试客户端模拟登录的问题
嘿,这问题我熟!要让Django测试客户端模拟已登录状态,其实很简单,只需要用客户端的login()方法先完成登录,再发送POST请求就行。具体步骤如下:
1. 准备测试用户
首先你需要一个存在的用户账号,要么用数据库里已有的,要么在shell里临时创建一个:
from django.contrib.auth.models import User # 创建测试用户(如果还没有的话) test_user = User.objects.create_user(username="test_user", password="test_pass123")
2. 使用客户端登录
接下来用Client实例调用login()方法,传入用户的登录凭证:
from django.test import Client client = Client() # 执行登录,返回True表示登录成功 is_logged_in = client.login(username="test_user", password="test_pass123") # 可以打印确认一下登录状态 print(is_logged_in) # 输出True就没问题
3. 发送POST请求
现在再发送你的POST请求,客户端就会带着登录状态发起请求,不会再被重定向到登录页了:
response = client.post( '/recipes/', {'name' : 'Matar Cauliflower ', 'mass_unit' : '', 'mass_quantity' : '', 'volume_unit' : '1', 'volume_quantity' : '50', 'pieces_unit' : '', 'pieces_quantity' : ''}, follow=True ) print(response.status_code) # 应该返回200或者你期望的状态码
额外说明
- 如果你的项目用了自定义用户模型,登录时可能需要用对应的认证字段(比如email)代替username,具体看你
AUTH_USER_MODEL的配置。 client.login()方法会处理会话和认证cookie,后续这个client实例的所有请求都会保持登录状态。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

