Django重写UpdateView的form_valid方法时报视图未返回HttpResponse错误
问题原因
- 你在重写
UpdateView的form_valid方法时,没有按照Django类视图的规范返回HttpResponse对象。父类原生的form_valid方法默认会返回重定向响应,你覆盖方法后移除了原有返回逻辑,导致方法执行完返回None,触发报错。
解决方案
你只需要在form_valid方法的末尾补充返回逻辑即可,有两种常用实现方式:
方式1:调用父类原生方法(推荐)
你已经自行完成了self.object = form.save()的保存逻辑,直接调用父类方法返回默认的重定向响应即可,修改后的form_valid代码如下:
def form_valid(self, form): self.object = form.save() client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(ADDR) def send(msg): message = msg.encode(FORMAT) msg_length = len(message) send_length = str(msg_length).encode(FORMAT) send_length += b' ' * (HEADER - len(send_length)) client.send(send_length) client.send(message) send("Hello World!") send("Hello Andrew") send("Hello") send(DISCONNECT_MESSAGE) # 新增以下这行即可 return super().form_valid(form)
方式2:手动返回重定向
如果你需要自定义跳转地址,也可以手动返回重定向响应:
from django.shortcuts import redirect # 在form_valid末尾加 return redirect('你要跳转的路由名')
额外注意事项
- 你当前的socket通信逻辑是同步阻塞的,如果目标端口服务未启动、连接超时或者网络异常,会直接导致请求卡住甚至报错,建议给socket操作加
try-except异常捕获 - 若socket通信耗时较长,建议放到异步任务队列中执行,不要阻塞正常的请求响应流程
内容的提问来源于stack exchange,提问作者Garberchov
相关产品推荐
相关产品推荐

