Django如何调用models.py自定义函数并在命令行传入request参数测试
解决方案
报错原因
request是Django框架接收HTTP请求时自动生成的上下文对象,直接本地运行脚本时没有自动生成该实例,因此会报未定义错误。同时你当前的data_pull函数没有返回逻辑,调用后也无法查看输出结果。
方案1:使用Django内置工具模拟请求(适合测试完整接口逻辑)
- 首先补全Django环境初始化、请求模拟、结果打印的逻辑,修改你的
models.py的if __name__ == "__main__"块代码如下:
import os import django from django.test import RequestFactory # 初始化Django环境,把下文的「你的项目名」替换成你实际的Django项目名称 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "你的项目名.settings") django.setup() if __name__ == "__main__": # 构造模拟POST请求 factory = RequestFactory() # 第二个参数就是你要传入的POST参数,可根据测试需求修改 test_request = factory.post('/test-path/', {'Hello': '测试参数值'}) # 调用函数并打印返回结果 response = data_pull(test_request) print(response.content.decode())
- 补全
data_pull函数的返回逻辑,把你从MongoDB拉取数据的逻辑写完后,返回JsonResponse即可。
方案2:拆分业务逻辑(更适合本地调试数据拉取逻辑)
把和请求无关的MongoDB数据拉取逻辑单独拆分,不需要构造request对象就能直接测试:
# 单独封装MongoDB数据拉取逻辑 def get_mongo_data(hello_param): # 这里写你的MongoDB连接、查询逻辑 client = MongoClient() db = client.你的数据库名 collection = db.你的集合名 query_result = list(collection.find({"匹配字段": hello_param})) # 转换BSON格式为可序列化的Python对象 return json.loads(dumps(query_result)) def data_pull(request): request_data = request.POST.get('Hello', None) result = get_mongo_data(request_data) return JsonResponse(result, safe=False) if __name__ == "__main__": # 直接传入测试参数就能拿到结果,不需要构造request test_result = get_mongo_data("测试参数值") print(test_result)
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

