可以在 views 中重载 django 么?

2020-11-08 10:43:14 +08:00
 Eyon
有个需求,需要在 view 中完成某个事情后,重新加载 django,能实现吗?
1014 次点击
所在节点    问与答
8 条回复
rogwan
2020-11-08 10:47:11 +08:00
这个需求是为了什么?
Eyon
2020-11-08 10:50:27 +08:00
哈哈,需求看起来很怪异,直接说问题吧:

需求是:用户每上传一张图片,就将这张图片作为附件发送给某个邮箱。

但现在的问题是?发送邮件时附件会将之前上传的图片都作为附件发送(而不是只发送最近上传的一张),不知道问题出在哪里。。。

if request.method == 'POST':
obj = UploadFile(request.POST,request.FILES)
fl = request.FILES.get('f1')
if not fl:
return HttpResponse('please select file')
with open('uploads/'+fl.name,'wb+') as f:
f.write(fl.read())
with open('uploads/'+fl.name,'rb') as ff:
msg.attach_file(ff.name)
msg.send()
os.remove(ff.name)
return HttpResponse('success')
Eyon
2020-11-08 10:51:37 +08:00
@rogwan 但是重载 django 就没有问题
qdzzyb
2020-11-08 11:21:42 +08:00
msg 是不是一直都是同一个对象
nonduality
2020-11-08 11:23:02 +08:00
你需要做的是改变上传处理的逻辑,而不是重新加载 Django,没有哪个网络服务可以这么反复重启的( uwsgi 等可以在若干 request 后重启后端是另一回事)。

如果上传的文件值得做个记录,建议加一个数据表,包含一个 FileField 数据段。然后按照 Django 标准方法保存文件及相关数据,再发送文件。而发送邮件及附件最好丢到任务队列里,有个相关的数据表更方便提交给 celery 之类。
linnchord
2020-11-08 11:27:21 +08:00
…神逻辑…有种黑色幽默
Eyon
2020-11-08 11:29:22 +08:00
@qdzzyb 一语惊醒梦中人哈哈哈,新手就是这样脑壳转不过弯
rogwan
2020-11-08 14:27:45 +08:00
一个 request 就重载整个应用,你考虑下这个服务器能支持几个并发呀,是要准备跑路了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/722846

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX