前面一篇写了上传到Flask后台,但是我不熟悉Flask,原先想学习一下,据说是轻量级。
但是我发现,学习会浪费我大量的时间,因为我并不是以这个为生的,我的目标只是要完成功能,让我自己能尽早使用起来,而且用户只有我一个,因此还是回到Django吧。
相对来说,我更熟悉Django,而且Django的文档真的很齐全,查什么东西都很方便,很快就可以把功能完成。
前台的JS代码基本上差不多,唯一需要考虑的是注意Django的MEDIA_URL, MEDIA_ROOT,我搞懂这些花了点时间。
代码片段如下:
在JS中,我把图片数据post到pasteupload/这个地址
1 x.open('POST', '/ss9/pasteupload/'); 2 x.send(BlobFile);
在Django的app中的 url.py中表明用paste_upload方法处理。
1 urlpatterns = patterns('ss9.views', 2 url(r'^$', 'index'), 3 url(r'^examples/(?P<ex_name>w+)/$', 'show_example' ), 4 url(r'^pasteupload/$', 'paste_upload'), 5 url(r'^addmodifynode/$', 'add_modify_node'), 6 )
在view中,代码还没有做出错处理。因为还没有想好如何处理,是返回一个错误的状态给client端呢,还是返回一个失败的图像地址给client端? 暂时还是以完成功能为主,专业的程序员可不要学我这种业余人士的做法哈。
1 from django.http import HttpRequest, HttpResponse, Http404 2 from django.shortcuts import render_to_response, get_object_or_404 3 from ss9.models import * 4 from tinynote.settings import MEDIA_ROOT 5 import datetime 6 7 8 def paste_upload(request): 9 if request.body: 10 print len(request.body) 11 imgdata = request.read() 12 13 now = datetime.datetime.now() 14 fname = "pasted_image_" + now.strftime("%Y%m%d%H%M%S") + ".png" 15 16 file = open( MEDIA_ROOT + "/image/paste_image/" + fname, 'wb') 17 file.write(imgdata) 18 file.close() 19 20 imgsrc = "/media/image/paste_image/" + fname 21 return HttpResponse( imgsrc, content_type='application/text')
Django处理raw data的方式是通过request.body 和 request.read() 。而正常的form是通过request.POST['name'] 这样来获得的。