Django访问/student/报TypeError: HTTP状态码必须为整数 排查多表视图逻辑问题
异常问题排查与修复
直接触发当前TypeError: HTTP status code must be an integer的根因
render()函数参数传值不符合Django接口定义:Django内置render()方法的模板上下文参数仅支持传入单个字典对象,当前代码拆分传入了3个独立字典作为位置参数:
原错误代码段:return render(request, "student.html", {"messages":data},{"topic":title},{"user1":myuser})render()的参数顺序固定为:request、模板路径、上下文对象、content_type、HTTP响应状态码、数据库连接别名。代码中多余传入的两个字典会被依次识别为content_type、status入参,其中status要求必须传入整数类型的HTTP状态码,实际收到字典类型值,直接触发类型校验报错。
修正方式为将所有模板变量合并到同一个字典中传入:context = { "messages": data, "topic": title, "user1": myuser } return render(request, "student.html", context)
修复当前报错后仍会触发运行错误的代码缺陷
- 模型定义冗余无效:三个模型类中单独定义的
User = settings.AUTH_USER_MODEL类属性没有实际业务作用,与下方的User_id外键字段无关联,属于冗余代码。 - 答案提交逻辑存在多处操作错误:
- 外键赋值方式错误:ORM规则下,数据库层面存储的
User_id字段对应整数值,代码中给response.User_id = request.user赋值用户对象的写法不符合ORM机制,正确写法是给不带_id后缀的关联属性赋值模型对象。 - 请求属性访问错误:代码中读取
request.quiztitle、request.question的逻辑无法执行,Django默认的request对象不会携带这类自定义关联数据,会直接触发AttributeError。 - 保存操作对象名错误:实例化的答案模型对象名为
response,但代码中调用Answer.save(),其中Answer是从POST请求中获取的字符串值,字符串不存在save()方法,会直接触发属性错误。
- 外键赋值方式错误:ORM规则下,数据库层面存储的
- 重复逻辑校验:视图已经通过
@login_required装饰器完成了用户登录态校验,内部重复判断request.user.is_authenticated属于冗余逻辑。
内容的提问来源于stack exchange,提问作者aishwarya yadav
相关产品推荐
相关产品推荐

