Я немного смущен о том, как продолжить работу с моей программой. У меня есть представление django, в котором пользователю предлагается ввести имя и фамилию, а затем перейти к задаче celery, которая обрабатывает данные и сохраняет их в базе данных. Теперь, когда задача обрабатывается, я хочу, чтобы анимированный gif отображался, чтобы пользователь знал, что что-то происходит. (Я где-то читал здесь, в SO, что анимированный gif лучше), тогда, если задача будет выполнена, она будет перенаправлена на страницу, которая сообщает пользователю, что процесс завершен. Я сделал свое исследование и выяснил, что должен получить task_id
и отправить его на запрос ajax.Использование Ajax с задачей сельдерея
Моя проблема заключается в использовании ajax. Как я могу получить task_id из ajax? Или передайте task_id в запрос ajax.
EDIT: ** Я знаю, что это неполно. ОЧЕНЬ НЕПОСРЕДСТВЕННО **
Вот некоторые из моих кодов. Это не делает многого, потому что я все еще должен понять концепцию использования ajax. Но я хочу, когда я отправлю форму, появится spinner gif, и в то же время сельдерей будет обрабатывать мои задачи. Когда сельдерей будет обрабатывать задание, он перенаправляется на страницу, где говорится «Успех» или что-то еще.
views.py:
def addUser(request):
if request.method == 'POST':
addUser = userform(request.POST)
if addUser.is_valid():
task = create_user.apply_async((addUser.cleaned_data,), countdown=20)
return render_to_response('loading.html', {'task_id': task.task_id})
else:
addUser = userform()
return render(request, 'addUser.html', {'addUser':addUser})
addUser.html
<form method="POST">
{% csrf_token %}
{{ addUser }}
<input type="submit" value="Submit">
</form>
loading.html
<html>
<script>
<head>
<script src="{{ STATIC_URL }}js/jquery-ui.min.js"></script>
<script type="text/javascript">
var formData = task_id; // task id of my celery task
$.ajax({
url : "templates/success.html", //from what I know, this URL is where the AJAX will go after processing
type: "POST",
data : formData,
success: function(data, textStatus, jqXHR)
{
alert("Success")
},
error: function (jqXHR, textStatus, errorThrown)
{
alert("Failed")
}
});
</script>
</head>
<body><center>
{% load static %}
<img src="{% static 'images/ripple.gif' %}" alt="Hi!" height="150" width="150" />
</center>
</body>
</html>
tasks.py
@task(ignore_result=True)
def create_user(data):
user = UserInfo(fname=data['fname'], lname=data['lname'])
user.save()
return None
Я не уверен, где AJAX будет идти, если это в form(addUser.html)
или в loading.html
Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо вам за помощь!
Благодарим за отзыв! Эта часть - это то, что я хочу знать. «Клиентская сторона (javascript) могла бы сделать запрос GET, например,/check_status/и передать« task_id »на сервер.« Я видел примеры, но ни один из них не показал мне, как это сделать на стороне клиента. Я проверил ссылку, которую вы предоставили, и я увидел, что она известна только для работы с django 1.3-1.5. Возможно ли это работать с 1.8? – predator
Нет проблем :). Этот проект нацелен на использование этого [link] (https://github.com/PolicyStat/jquery-celery/blob/master/src/celery.js#L54) для Javascript. Я думаю, что они должны работать с django1.8 havent, используемым с этой версией. Однако вы можете взглянуть на эту ссылку, которую я только что написал, и посмотреть, как работает javascript, для серверной стороны у вас уже есть идея (с учетом «task_id» вы можете получить информацию о сельдерее, связанную с этой задачей = D). Таким образом, вы можете сделать это сами или попробовать эти библиотеки вместе. Дайте мне знать, как все идет, спасибо! –
О, мой. Я думаю, что это то, что я ищу. Я попробую и вернусь к вам, если все будет хорошо. – predator