前面一篇写了上传到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'] 这样来获得的。