2017-01-23 2 views
0

Резюме моего веб-сайта: Пользователь заполняет некоторую информацию, которая после нажатия «отправить» информацию передается на бэкэнд через AJAX. Получив информацию на задней стороне, он генерирует DOCX, используя эту информацию, и возвращает этот файл DOCX пользователю.PythonAnywhere Как обрабатывать несколько «веб-работников» или процессы

Вот мой AJAX код в моем HTML файл

$.ajax({ 
     type:'POST', 
     url:'/submit/', 
     data:{ 
      data that I submit 
     }, 
     dateType: 'json', 
     success:function() { 
      document.location = "/submit"; 

     } 
    }) 

Мои взгляды Функция для/отправить /, который использует send_file вернуть файлу

def submit(request): 

    #Receive Data 
    #Create a File with the Data and save it to the server 

    return send_file(request) 

def send_file(request): 

    lastName = get_last_name() +'.docx' 
    filename = get_full_path() # Select your file here.         
    wrapper = FileWrapper(open(filename , 'rb')) 
    response = HttpResponse(wrapper, content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document') 
    response['Content-Disposition'] = 'attachment; filename=' + lastName 
    response['Content-Length'] = os.path.getsize(filename) 

    return response 

Это работало безупречно когда-то теперь. Однако у меня возникли проблемы, когда я увеличил количество «веб-работников»/процессов от 1 до 4 в моей учетной записи хостинга. Случается, что другой веб-рабочий используется для отправки файла, который создает новый экземпляр сайта для этого. Проблема в том, что новый экземпляр не содержит путь к файлу, который создается с веб-рабочим, который создает файл.

Как я уже сказал, это работало безупречно, когда у моего webApp был только один «веб-рабочий» или один процесс. Теперь у меня есть примерно 50% успеха.

Его почти как процесс пытается отправить файл до его создания. Или процесс не имеет доступа к имени файла, которое создал процесс.

Любая помощь будет высоко оценена. Благодаря!

Код Пытается отправить имя пути через запрос, а затем обратно на сервер.

Отправить Посмотреть информацию о возвращаемом файле обратно в ajax.

def submit(request): 
    # Receive DATA 
    # Generate file with data 

    lastName = get_last_name() +'.docx' 
    filename = get_full_path() # Select your file here. 


    return HttpResponse(json.dumps({'lastname': lastName,'filename':filename}), content_type="application/json") 

Успех Функция AJAX

success:function(fileInfo) { 
     name_last = fileInfo['lastname'] 
     filepath= fileInfo['filepath'] 
     document.location = "/send"; 
    } 

Так я могу получить FILEINFO отправить с "/ отправить"?

+0

Пожалуйста, добавьте get_full_path(), это необходимо для отладки. – Fian

ответ

1

Каждый веб-рабочий - это отдельный процесс. У них нет доступа к переменным, установленным другим рабочим. Каждый запрос может обратиться к любому работнику, поэтому нет гарантии, что вы будете использовать имя файла, установленное для определенного пользователя. Если вам нужно передать информацию между запросами, вам нужно сохранить ее за пределами рабочей памяти - вы можете сделать это в файле cookie или в базе данных или в файле.

+0

Хорошо, как мне это сделать? Я попытался отправить файл_файл через возвращаемый результат отправки. Но я не мог понять, как получить функцию успеха, чтобы отправить путь к файлу. Имеет ли это смысл? Я добавил код, который я пробовал в нижней части выше. Спасибо за вашу помощь! –

+0

Ничего, я заработал! Я использовал файлы cookie для хранения пути к файлу. Спасибо за вашу помощь –

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