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.
Welche Python-Version in Frage? – errata
@errata Python 2.7. –
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