Вопрос по python – Как вы делаете что-то после рендеринга представления? (Джанго)

10

Я хочу сделать что-то после того, как я сделал вид, используя

return render_to_response()

Являются ли сигналы единственным способом сделать это? Мне нужно написать собственный сигнал, или request_finished дает мне достаточно информации? По сути, мне нужно знать, какая страница была обработана, а затем выполнить действие в ответ на это.

Благодарю.

ОБНОВЛЕНИЕ ОТ КОММЕНТАРИЙ. Я не хочу задерживать рендеринг страницы, поэтому сначала я хочу отрендерить страницу, а затем выполнить действие.

я не & хочу задержать рендеринг страницы, поэтому я хочу сначала отрендерить страницу, а затем выполнить действие rick
Это кажется отсталым. Вы знаете, какую страницу вы собираетесь показывать. Просто сделай действие. Почему вы не можете просто вставить дополнительное действие в функцию просмотра? Пожалуйста, дайте намек на то, что вы пытаетесь сделать. S.Lott
@rick: Пожалуйста, не комментируйте свой вопрос, обновите ваш вопрос дополнительными фактами. S.Lott

Ваш Ответ

7   ответов
11

t = threading.Thread(target=do_my_action, args=[my_argument])
# We want the program to wait on this thread before shutting down.
t.setDaemon(False)
t.start()

Это приведет к & quot; do_my_action (my_argument) & apos; будет выполняться во втором потоке, который будет продолжать работать даже после того, как вы отправите ответ Django и завершите исходный поток. Например, он может отправить электронное письмо, не задерживая ответ.

Error: User Rate Limit Exceeded
4

http://docs.djangoproject.com/en/dev/ref/request-response/#passing-iterators

Таким образом, вы могли бы сделать что-то вроде:

def myiter():
    yield "my content"
    enqueue_some_task()
    return

def myview(request):
    return HttpResponse(myiter())

Обычное использование итератора - отправлять большие данные, не считывая их все в память. Например, читайте куски из файла и получайте соответственно. Я никогда не использовал его таким образом, но, похоже, он должен работать.

Error: User Rate Limit Exceeded
5

Spawn a subprocess prior to sending the response page.

Create a "background service daemon" and pass work requests to it.

Это все за пределами Джанго. Ты используешьподпроцесс или какой-то другой метод IPC для связи с другим процессом.

Error: User Rate Limit Exceeded
4

ете сообщение в очередь, а рабочие потоки (или процессы и т. Д.) Используют очередь и выполняют работу после завершения просмотра.

У Google App Engine есть очередь задач apihttp://code.google.com/appengine/docs/python/taskqueue/У Amazon есть сервис Simple Queuehttp://aws.amazon.com/sqs/.

Быстрый поиск не обнаружил никаких подключаемых модулей django, которые выглядят как принятые стандарты.

Быстрый и грязный способ эмулировать функциональность заключается в размещении «сообщения»; в таблице базы данных, и cron задание периодически проверять таблицу для выполнения работы.

Error: User Rate Limit Exceededcode.google.com/p/django-queue-service
Error: User Rate Limit Exceeded
2

отдельный процесс, который обрабатывает фоновые задачи, как правило, такие как индексация и отправка уведомлений и т. Д. А затем, во время рендеринга представления, вы отправляете событие в систему обработки событий (я не знаю, построил ли он в Django одно событие). в, но он всегда нужен, так что у вас должен быть один), а четная система затем помещает сообщение в очередь сообщений (что является тривиальной записью, если у вас нет нескольких машин или нескольких фоновых процессов), которое выполняет соответствующую задачу.

-1

которую хотите отобразить. Эта другая страница должна отправить сообщение (через Javascript или что-то еще), которое вызывает правильную функцию в ваших представлениях, тогда это представление вызывает правильную следующую страницу, которая будет показана.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded rick
-1

я не понимаю вашего вопроса. Но почему бы не что-то простое, как:

try:
    return render_to_response()
finally:
    do_what_needs_to_be_done()
Error: User Rate Limit ExceededafterError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded rick
Error: User Rate Limit Exceeded rick

Похожие вопросы