zoukankan      html  css  js  c++  java
  • 捣鼓TinyMCE 粘贴图片并上传+Django后台

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

  • 相关阅读:
    vue之v-on
    垂直居中下
    垂直居中上
    vue之v-for
    vue之v-if和v-show
    vue之v-model
    vue之v-bind
    数学---目录
    【数学】证明题
    【计算机网络】应用层
  • 原文地址:https://www.cnblogs.com/moogle/p/8094220.html
Copyright © 2011-2022 走看看