2017-05-14 7 views
0

Ich baue eine App, die mehrere Dateien als E-Mail-Anhänge sendet, mit jQuery und Django 1.9.Python 2.7 - Zugriff auf JavaScript-Dateiobjekt in Django

Ich speichere die Dateien in einem Puffer, der Benutzer hinzufügen und löschen von und sie über eine POST-Ajax-Anfrage als solche zu senden:

  //Build the message 
      message_buffer.forEach(function(entry){ 
       body += '\n' + entry; 
      }); 

      var files = $.merge(attachment_buffer.photos, attachment_buffer.documents); 

      var form = new FormData(); 

      form.append("csrfmiddlewaretoken", csrf_token); 
      form.append("client_id", client_id); 
      form.append("subject", subject); 
      form.append("body", body); 
      form.append("files", files); 

      $.ajax({ 
       url: window.location.origin + '/dashboard/ajax/send_message', 
       method: "post", 
       data: form, 
       processData: false, 
       contentType: false, 
       cache: false, 
       beforeSend: function(){ 
        //Block UI 
       }, 
       success: function(data){ 
        if(data.status == 'success'){ 
         console.log(data); 
         //Show success and clear all the data stores. 
        } else { 
         console.log(data.message); 
        } 
       }, 
       error: function(err){ 
        console.log(err.responseText); 
       } 
      }); 

Problem ist, wenn ich diesen Puffer erhalten (eine Liste von JS Dateiobjekte) in meiner Django-Ansicht, werden sie als Unicode bekommen und ich weiß nicht, wie man sie analysiert.

Ich muss in der Lage, die Dateien in den django Emailmessage-Instanz wie folgt zu befestigen:

 for attachment in attachments: 
      mail.attach(attachment.name, attachment.read(), attachment.content_type) 

Die Django-View-Code ist:

if request.method == "POST": 
    client_id = request.POST['client_id'] 
    subject = request.POST['subject'] 
    body = request.POST['body'] 
    attachments = [] 

    if 'files' in request.POST.keys() and request.POST['files'] != '': 
     attachments = request.POST['files'] 

    client = Client.get_client_by_id(request.user, client_id) 

    if client: 
     email_helper = EmailHelper() 

     email_sent = email_helper.send_email_with_attachments(request, client, subject, body, attachments) 

Und die E-Mail-Methode:

def send_email_with_attachments(self, request, client, subject, message, attachments, from_email=settings.EMAIL_HOST_USER): 
    """ 
    Sends a simple text mail with attachments 
    :param request: 
    :param client: 
    :param subject: 
    :param message: 
    :param from_email: 
    :param attachments: 
    :return: 
    """ 

    # print type(encoding.smart_bytes(attachments)) 
    # # for attachment in attachments: 
    # #  print json.loads(attachment) 
    # # 
    # return False 

    try: 
     mail = EmailMessage(
      self.clean_email_params(subject), 
      self.clean_email_params(message), 
      self.clean_email_params(from_email), 
      self.clean_email_params([client.email]), 
      reply_to=[from_email] 
     ) 

     for attachment in attachments: 
      mail.attach(attachment.name, attachment.read(), attachment.content_type) 

     mail.send() 

     try: 
      # Log the sent email 
      email_log = SentEmailsLog() 
      email_log.user = request.user 
      email_log.client = client 
      email_log.subject = self.clean_email_params(subject) 
      email_log.content = self.clean_email_params(message) 
      email_log.to_email = str(self.clean_email_params([client.email])) 
      email_log.from_email = self.clean_email_params(from_email) 
      email_log.host_email = settings.EMAIL_HOST_USER 
      email_log.attachments = 'No' 
      email_log.save() 

     except Exception, e: 
      ErrorLogHelper.log_error(error_message=e, calling_function="EmailHelper.send_email_with_attachments") 

     return True 

    except Exception, e: 
     ErrorLogHelper.log_error(error_message=e, calling_function="EmailHelper.send_email_with_attachments") 

     return False 

Bitte um Rat, danke.

+0

Welche Python-Version in Frage? – errata

+0

@errata Python 2.7. –

+0

Können Sie bitte den Code für die Django-Ansicht veröffentlichen, in dem Sie mit AJAX-Daten arbeiten und was zu einem Fehler führt? – errata

Antwort

0

Versuchen Sie ausdrücklich Ihre Anfrage Körper in view.py, kodieren etwa so:

body = request.POST['body'].encode('utf8')