2017-01-23 2 views
0

У меня возникла новая небольшая проблема с API-интерфейсом Python между Django и LogicalDOC. Я создаю папку внутри LogicalDOC, тогда я хотел бы сохранить файл pdf в этой новой папке с folderId.Вставить номер как folderID

Но, если это похоже на работу, потому что синтаксис хорош с моей точки зрения: ни один файл PDF не отображается.

создать папку, я поднимаю свой идентификационный номер: 348930, например, с помощью команды data["id"] и вставить str(data["id"]) в FolderId, когда я хочу, чтобы сохранить свой файл в формате PDF в новой папке.

Новая папка создана и работает хорошо, но файл pdf не сохраняется внутри. Что-то не так ?

Это мой сценарий:

@login_required 
def BirthCertificate_PDF(request, id) : 

    birthcertificate = get_object_or_404(BirthCertificate, pk=id) 

    data = {"birthcertificate" : birthcertificate} 

    template = get_template('BC_raw.html') 
    html = template.render(Context(data)) 


    filename_directory = str(BirthCertificate.objects.get(pk=id).lastname.encode('utf-8')) + "_" + str(BirthCertificate.objects.get(pk=id).firstname.encode('utf-8')) + "_" + str(BirthCertificate.objects.get(pk=id).birthday) 
    filename = 'Acte_Naissance_' + filename_directory + '.pdf' 
    path = '/Users/valentinjungbluth/Desktop/Django/Individus/' + filename 

    file = open(path, "w+b") 
    pisaStatus = pisa.CreatePDF(html.encode('utf-8'), dest=file, encoding='utf-8') 

    file.seek(0) 
    pdf = file.read() 
    if pdf : 

     payload = '{{ "name":"{0}", "parentId":3309569 }}'.format(filename_directory) #Fix parent folder 

     url = 'http://localhost:8080/services/rest/folder/create' 
     headers = {'Content-Type': 'application/json', 'Accept': 'application/json'} 
     resp = requests.post(url, data=payload, headers=headers, auth=('admin', 'admin')) 
     rbody = resp.content 
     data = json.loads(rbody) 

     print data["id"] #Get ID from the new folder 

     payload = '{{ "language":"fr","fileName":"{0}","FolderId":'+str(data["id"]) +'}}'.format(filename) #save pdf file inside the new folder thanks to his ID 
     upfile = path 
     files = { 
     'document': (None, payload, 'application/json'), 
     'content': (os.path.basename(upfile), open(upfile, 'rb'), 'application/octet-stream') 
     } 
     url = 'http://localhost:8080/services/rest/document/create' 
     headers = {'Content-Type': 'multipart/form-data'} 
     r = requests.post(url, files=files, headers=headers, auth=('admin', 'admin')) 

     context = {"birthcertificate":birthcertificate, 
        "path":path} 

     return render(request, 'BC_PDF.html', context) 
    file.close() 

    return HttpResponse(pdf, 'application/pdf') 

Это захват экрана, который показывает, что folderID должно быть: 3538970 Это число также определяется по формуле: data["id"]

enter image description here

+0

Попробуйте указать folderid как второй аргумент формата, например: 'payload = '{{" language ":" fr "," fileName ":" {0} "," FolderId ":" {1} "}} '. format (filename, str (data [" id "]))' – neverwalkaloner

+0

@neverwalkaloner По-прежнему такая же ошибка, мой файл PDF не сохраняется в моей новой папке, которая была только что создана. Я ищу документацию по формату. Я принял ваше изменение до того, как вы его написали;) – Deadpool

+0

Хорошо, это была синтаксическая ошибка: это 'folderId', а не' FolderId' ... Ваш ответ хорошо работает! Как и раньше: сделайте ответ, и я проверю его? – Deadpool

ответ

1

Как я уже сказал в моем комментарии вам не нужно использовать конкатенацию строк для передачи FolderId в качестве полезной нагрузки, просто используйте второй аргумент метода format:

d = '{{ "language":"fr","fileName":"{0}","FolderId":"{1}"}}'.format(‌​filename, str(data["id"])) 
+0

Я не знал, как работает формат. Так что спасибо вам за помощь. – Deadpool

Смежные вопросы