当我使用 Django 在后端处理某些内容时,如何制作加载页面?
How do I make a loading page while I am processing something in the backend with Django?
我的应用程序有一个主视图函数。成功登录后,将调用此主视图方法并预期呈现模板。
但我必须在此视图方法中执行一些计算[我正在通过发出 facebook 图 api 请求来检查有关用户的某些条件。]
因此加载需要2~4秒。
由于模板是由 return 语句呈现的,因此仅在过程完成时才执行,因此如何显示此加载场景。
我是否应该制作 2 个视图,一个用于显示加载,另一个用于计算,并继续向其他视图方法发出 AJAX
请求以检查过程是否完成?
您需要 运行 您的 Graph API 任务中的请求异步执行,允许您 return 一个 HttpResponse
而无需等待任务完成。
Celery 将允许您这样做。
然后您需要一种方法来通知您的客户端异步任务已完成。
我看到有两种方法可以做到这一点:
- 定期向视图发出 AJAX 请求,以检查任务是否已完成。
- 使用 WebSockets.
第一种方法最简单,但缺点是会发出很多无用的请求,而且反应性较差。
在另一端使用 WebSockets 需要更多配置,因为需要外部应用程序(例如:django-socketio or swampdragon)。
如果它是唯一需要从服务器到客户端的通知的地方,那么使用 WebSockets 似乎有点过分了。
您确实应该创建两个视图,一个仅用于 return 显示正在加载的页面 UI,另一个用于执行长任务。
将使用从 "loading" 页面发出的 AJAX 请求调用第二个视图。 AJAX 请求的响应将通知您的 "loading" 页面是时候继续了。
您需要确保 AJAX 请求的持续时间不会超过您服务器的超时时间(大约 10 秒,您应该没问题)。
我的应用程序有一个主视图函数。成功登录后,将调用此主视图方法并预期呈现模板。
但我必须在此视图方法中执行一些计算[我正在通过发出 facebook 图 api 请求来检查有关用户的某些条件。]
因此加载需要2~4秒。
由于模板是由 return 语句呈现的,因此仅在过程完成时才执行,因此如何显示此加载场景。
我是否应该制作 2 个视图,一个用于显示加载,另一个用于计算,并继续向其他视图方法发出 AJAX
请求以检查过程是否完成?
您需要 运行 您的 Graph API 任务中的请求异步执行,允许您 return 一个 HttpResponse
而无需等待任务完成。
Celery 将允许您这样做。
然后您需要一种方法来通知您的客户端异步任务已完成。 我看到有两种方法可以做到这一点:
- 定期向视图发出 AJAX 请求,以检查任务是否已完成。
- 使用 WebSockets.
第一种方法最简单,但缺点是会发出很多无用的请求,而且反应性较差。
在另一端使用 WebSockets 需要更多配置,因为需要外部应用程序(例如:django-socketio or swampdragon)。 如果它是唯一需要从服务器到客户端的通知的地方,那么使用 WebSockets 似乎有点过分了。
您确实应该创建两个视图,一个仅用于 return 显示正在加载的页面 UI,另一个用于执行长任务。
将使用从 "loading" 页面发出的 AJAX 请求调用第二个视图。 AJAX 请求的响应将通知您的 "loading" 页面是时候继续了。
您需要确保 AJAX 请求的持续时间不会超过您服务器的超时时间(大约 10 秒,您应该没问题)。