現在,djangoを使ったWEBサイトの制作を勉強しております.
https://tutorial.djangogirls.org/ja/
こちらのチュートリアルを参考に,WEBサイトを公開できるまでは進めることができました.
しかしながら,WEBサーバー上でpythonファイルを実行し,その結果に応じてサイトを操作できるような仕組みにする方法が分かりません.
具体的には,サイト上のボタンをクリックするとpythonで書いた音声認識が実行され,その認識結果に基づいてサイトを更新するといったものを作りたいです.
音声認識用のpythonファイルは,音声をwavファイルとして録音する機能と,そのwavファイルを某APIでテキスト化する仕組みになっており,自分で構築しました.
サイトとサイト上のボタンは,HTML,CSS,javascriptを使って記述しました.javascriptからpythonを呼び出すことができれば良いのですが,どうも難しく.
(サーバーに関しては,チュートリアルの案内とおり,python anywhereを使用)
・サーバー上でpythonを実行する方法
・録音したwavファイルをサーバーにアップロードし,pythonファイルに受け渡す方法
以上二点について,現在の知識では解決できそうにないため,ご教示いただけないでしょうか.
宜しくお願い致します.
アドバイスに基づき補足させていただきます.
実務での開発経験はありません.
WEBサーバーの開発経験もこれが初めてです.
言語に関しても独学でpython,javascript,java,c++に軽く触れた程度です.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/24 14:20
2018/11/24 15:48
2018/11/25 03:46
2018/11/25 15:33
回答1件
0
ベストアンサー
補足として追記いただいた情報を踏まえて回答させていただきます。ソフトウェアのバージョンに言及されていませんが、 Python 3.x 、 Django 2.1.x と仮定してご説明しますね。
・サーバー上でpythonを実行する方法
・録音したwavファイルをサーバーにアップロードし,pythonファイルに受け渡す方法
まずは「pythonを実行する方法」の方からコメントいたします。
・サーバー上でpythonを実行する方法
Django は Python のライブラリ(「パッケージ」)のひとつなので、 Django アプリケーションのデプロイが成功しそれがサーバー上で動いているのであれば、 Python が実行できている、ということになります。
「WEBサイトを公開できるまでは進めることができました」とのことですので、「サーバー上で Python を実行する」というのはすでに達成されていると思います。
ですので後は、「音声認識用のpythonファイル」を Django のリクエスト・レスポンスの処理の流れの中で呼び出す、ということができれば OK 、だと思います。「音声認識用のpythonファイル」が voice_recogition.py
という名前だと仮定して以下説明を進めます。
「 新しいアプリケーションの作成 」のところで python manage.py startapp blog
という風にコマンドを実行されると、次のように blog
というディレクトリが作られたものと思います( blog
は説明のために使っている app 名です。実際に作られた app 名に適宜読み替えてください)。
text
1djangogirls 2├── blog 3│ ├── __init__.py 4│ ├── admin.py 5│ ├── apps.py 6│ ├── migrations 7│ │ └── __init__.py 8│ ├── models.py 9│ ├── tests.py 10│ └── views.py
settings.py
内の INSTALLED_APPS
で blog
app を有効化したら(…の意味がわからなければ、チュートリアルに説明が載っているので確認してみてください)、ディレクトリ blog
の中に voice_recogition.py
ファイルを置きます:
text
1djangogirls 2├── blog 3│ ├── __init__.py 4│ ├── admin.py 5│ ├── apps.py 6│ ├── migrations 7│ │ └── __init__.py 8│ ├── models.py 9│ ├── tests.py 10│ ├── views.py 11│ └── voice_recogition.py ← これを追加
こうすると、例えば、 blog
ディレクトリ内の views.py
から voice_recogition.py
の中の関数を次のように呼び出し利用することができます。
python
1# blog/views.py: 2from . import voice_recogition 3 4def exec_voice_recognition(request): 5 file = ... 6 result = voice_recogition.recognize(file) 7 ...
他にもさまざまなアプローチがありますが、まずはこの「作った app の中に Python ファイルを置いてそれを呼び出す」ということの達成を目指されるとよいかと思います。
voice_recogition.py
ファイルを別の場所に置いたり、複数の app から呼び出せるようにしたりするには、 Python の import
の仕組みを理解する必要があります。そのあたりはここでは説明しきれないので、 Python 公式のドキュメントや書籍等を読んで学習してみてください(そのあたりは質問サイトでお聞きになるより書籍等で学ばれる方が近道です)。
・録音したwavファイルをサーバーにアップロードし,pythonファイルに受け渡す方法
いくつか方法がありますが、まずは、通常のフォームと「ファイルフィールド」を使った受け渡しを実現されるのがよいものと思います。この場合は JavaScript でのコーディングは必要ありません。
おおよその流れは次のとおりです。
- ファイルを受け取れるフォームクラスを作成する
- 1 のフォームクラスを使ってフォームを描画・データを受け取る view を作成する
- 1 と 2 に対応するフォームページのテンプレートファイルを作成する
- 結果表示のためのページの view とテンプレートファイルを作成する
これがひととおりできれば、「ユーザが該当ページを開く → ファイルのアップロードができるフォームが表示される → ユーザがファイルをアップロードする → サーバー側で音声認識が行われ結果ページが表示される」ということが実現できます。
1 のイメージは次のとおりです。
python
1# blog/forms.py: 2from django import forms 3 4class UploadFileForm(forms.Form): 5 title = forms.CharField(max_length=50) 6 file = forms.FileField()
2 のイメージは次のとおりです。
python
1# blog/views.py: 2from django.http import HttpResponseRedirect 3from django.shortcuts import render 4from .forms import UploadFileForm 5 6 7def upload_file(request): 8 if request.method == 'POST': 9 form = UploadFileForm(request.POST, request.FILES) 10 if form.is_valid(): 11 uploaded_file = request.FILES['file'] 12 # ここで `uploaded_file` に対して音声認識の処理を行う 13 # 音声認識が無事に成功すればリダイレクト先で音声認識の結果を表示する 14 return HttpResponseRedirect('/result/') 15 else: 16 form = UploadFileForm() 17 return render(request, 'upload.html', {'form': form})
3 のイメージは次のとおりです。
python
1<form action="/upload-file-url/" method="post"> 2 {% csrf_token %} 3 {{ form }} 4 <input type="submit" value="送信"> 5</form>
細かく見ていくと、アップロード可能なファイルを .wav
ファイルに制限したり、 Django のアップロードファイルサイズの制限を変更したり、ということが必要になってきますが、まずはこのあたりの大筋の部分の実装を試みられるのがよいかと思います。
コード内の変数名等はあくまでもサンプルなので、コピペはされずにあくまでも大まかなタスクとロジックの参考としてお読みください。
また、サイトを production として不特定多数の人に公開する場合には、追加で気をつけるべきポイントがもろもろあります。それはここでは説明しきれないので、公式のドキュメントを読んだり書籍を読んだりしてみていただければと思います。
尚、上のサンプルコードは公式のページのものを一部改変しただけのものです:
- https://docs.djangoproject.com/en/2.1/topics/http/file-uploads/
- https://docs.djangoproject.com/en/2.1/topics/forms/
ここですべてをご説明するのは大変なのでざっくりとした説明にはなってしまいましたが、ご参考になれば幸いです :)
(「単語の意味がわからない」といったシンプルな疑問点についてはググって解消していただきたいですが、チャレンジしてみたが行き詰まってどうにもならない、といった場合はコメントください)
投稿2018/11/25 03:30
総合スコア1407
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/26 01:13
2018/11/26 01:45
2018/11/26 01:51
2018/11/26 01:57
2018/11/27 08:51
2018/11/27 12:43
2018/11/28 01:44
2018/11/28 08:00
2018/11/30 03:27
2018/11/30 08:52
2018/12/02 04:47
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。