質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

並列処理

複数の計算が同時に実行される手法

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

780閲覧

ユーザーが投稿をしたら、ユーザーを直ちに開放し、その後の処理はバックエンドで進めたい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

並列処理

複数の計算が同時に実行される手法

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/03/28 13:42

編集2020/03/28 20:59

前提・実現したいこと

DjangoでWebサイトを作成しています。

ユーザーが投稿をした後、すぐにユーザーを開放してあげて、その後バックエンドで処理をしたいと考えています。
例えば、ユーザーが日本語で文章を投稿したら、それを3か国語(英語、ドイツ語、フランス語)に翻訳して保存するという場合、
①ユーザーが日本語で投稿

②バリデーション

③日本語の投稿文を保存

④英語に翻訳して保存

⑤ドイツ語に翻訳して保存

⑥フランス語に翻訳して保存

⑦ユーザーにhtmlを返す
という順番だと、だいぶユーザーを待たせてしまいます。
そこで、③日本語の投稿文を保存したら、⑦ユーザーにhtmlを返し、ユーザーを開放した上で、バックエンドで④以降をやれれば良いと思います。

何か、良い方法はあるでしょうか。

ソースコード

ユーザー投稿時の処理を下記のようなCreateViewで記述しています。
投稿されると、ユーザーはsuccess_urlに飛んで一連の流れは終わってしまいます。
ユーザーがsuccess_urlに飛んだ後、バックエンドで処理する方法が分かればありがたいです。

python

1# views.py 2class QuestionCreateView(CreateView): 3 model = Question 4 form_class = QuestionForm 5 lang = get_language() 6 7 def form_valid(self, form): 8 form.instance.user = self.request.user 9 return super().form_valid(form) 10 11 template_name = 'question/question_create_bootstrapform.html' 12 13 success_url = "/"

以上、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

__Celey__と__RabbitMQ__を利用して、4から6を__Celery__のタスクで非同期に処理すれば良いと思います。
タスク終了後、どのようにユーザーに通知するかを、検討する必要がありますが・・・。

Celery - First steps with Django

投稿2020/03/30 07:22

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/04 21:30

お礼が遅くなり申し訳ありません。CeleryとRabbitMQを利用して実装しようとしておりますが、理解に時間がかかってまだ完了しておりません。取り急ぎ、お礼のご連絡です。
guest

0

1,2,7をcreateViewで行い、7が終わった後にjsのfetch等で3,4,5,6を投げるか、
2~6をjsで行い、7をやらずにアラートを表示するかという選択になると思います。
django3にて非同期がサポートされたようですが、現在はまだview等での非同期は出来ないようです。

投稿2020/03/30 02:22

netsuy

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/04 21:30

ご回答頂き、ありがとうございました。
guest

0

であれば、②の後に⑦を実行すればよいと思いますがそれではだめな理由は何ですか?

投稿2020/03/28 14:54

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/28 20:51

大事なところを書いてませんでした。 投稿に関する部分をCreateViewで描いております。 CreateViewにどう追記して行けばよいか分からないです。 その旨、質問本文に記載致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問