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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1475閲覧

Django + Vue.js(webpack使用)でView機能はVueのみを使う場合の環境設定について

KoukoMatsumoto

総合スコア41

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

3クリップ

投稿2018/06/02 01:06

編集2018/06/02 02:52

Django + Vue.jsでwebアプリケーションを作りたいと考えています。
Vue.jsのベースはvue-cliで作ります。
pythonなどはすべて最新版(3.6系)を使います。

  • webpackでbuildしたdistの中身でMVCにおけるviewの部分を描画したい
  • Djangoのviewの機能は使わない(DjangoはAPIサーバーおよび、開発時の一時的な表示確認用のwebサーバーとして利用します。APIのみの利用にするにはDjango REST Frameworkが必須なのかなどは調査中ですが、もしこちらもお詳しい方がいればご指摘いただければと思います)

この構成にしたいのですが、

この辺りの設定方法の鉄板の方法をお教えいただいてよろしいでしょうか?
Django + Vue のキーワードで検索しておりますが、package.jsonの設定がなかったり(webpackで固めず、djangoのview機能を使っていると考えられます)、このような構成で作っている方があまりいないようで、情報が見当たりません。
また、そもそもこの方法がまずいなどあればお教えいただけると幸いです。
URLでも構いません。

退会済みユーザー👍を押しています

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

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

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

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

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

euledge

2018/06/02 02:39

diangoのview機能を使わないと言うのは、diangoはAPIサーバーとしてのみ使いたいと言う意図でHTMLのレンダリングはvueでやりたいと言う意味でしょうか?
KoukoMatsumoto

2018/06/02 02:50

非常に知見のある方の少ない中で、諦めておりましたが、反応いただきましてありがとうございます。はい、enledgeさんのおっしゃる通りです。そもそもdjangoをAPIサーバーとして使う場合はDjango REST Frameworkなどのモジュールが必須なのかなど、そのあたりも含めて色々模索しております。
guest

回答1

0

ベストアンサー

1.Djangoでレンダリングを一切行わない場合

DjangoをAPIサーバーとしてのみ使用するということであれば viewのHTML部分をレンダリングするのは何なのか?ということを検討する必要があります。

Djangoで行わないのであればそれに代わるHTMLのレンダリングサーバーを別途立てる必要があるので
まず考えられるのはvueで用いているnodeを使用したものになるでしょう。

その場合は、HTMKLの表示はDjangoの管理外なのでnode+vueで全てエンドポイントのルーティングなどを行うことになります。そのうえでDjangoはAPIとしてvue内から呼び出すことになるかと思います。
したがってDjangoでvueの出力フォルダをどのように見せるということは関係なくなります。

2.Djangoのテンプレートエンジンを使用しない場合

もう一つ、HTMLの初期状態のレンダリングはDjangoで行って、テンプレート機能は使わずにデータの表示やUIに関してはvueで行うという方法もあるかと思います。
これが Django REST Frameworkということになります。

この場合はDjangoが空のHTMLを出力することになり、そのHTML内からvueで出力したapp.jsを呼び出すことになります。

極端に言うとDjangoで出力するHTMLの要素は以下のようなものだけでも良いということです。

html

1<body id="app"> 2 3<script src="dist/app.js"></script> 4</body>

この場合はDjangoがリクエストに応じたルーティングを行い、app.jsもDjangoが配信することになるので
webpackの出力先 dist/以下のapp.jsは ほかの cssやjsと同様に静的コンテンツとして表示可能なフォルダに出力することになるでしょう。

text

1static 2 +---js 3 +---css 4 +---dist 5 +---app.js

Djangoでの経験や理解があり nodeでサーバー立てる経験があまりないのであれば、2.Djangoのテンプレートエンジンを使用しない場合のほうがわかりやすいと思います。

私自身はDjangoの経験はないので以下の記事を紹介しておきます。

Qiita - Django REST framework with Vue.js

投稿2018/06/02 04:28

euledge

総合スコア2404

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

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

KoukoMatsumoto

2018/06/03 04:01

enledge様、とても詳しいご回答ありがとうございます。 なるほど・・・!確かにおっしゃる通りでした。djangoのテンプレートを使わない=nodeで表示と言う意味合いにもなってしまいますね。 その意味ですと、2.Djangoのテンプレートエンジンを使用しない場合 こちらになりそうです。 static以下にdistの中身を設置し、ルーティングを適切に設定、あとはDjango REST Framework にてAPI部分をになってもらうことでできるのですね。 Djangoのご経験がない中でありがとうございます・・・! やはり、VueとDjangoという組み合わせは記事が実験系の物が多いだけに、とても少ないのでしょうね(涙) 週明けに色々対応したいと思います。お忙しい中、本当にありがとうございました。
euledge

2018/06/03 04:09

私も今の開発ではJava Springboot+vue.jsという環境です。最近のwebフレームワークは言語を問わず大体似たような構成になるので、その経験を役立てる事ができて良かったです。
KoukoMatsumoto

2018/06/04 01:14

euledge様、python以外のフレームワークだったのですか・・・!自分もrailsなどは使っていたのですが、vueなど最新js系の知識がなさすぎて横に知識を広げられませんでした。 今回でちゃんと学んで理解したいと思います。本当にありがとうございます。
KoukoMatsumoto

2018/06/04 06:35

いただいたやり方で苦戦しつつも設置して見ました。 静的なhtmlを返却するような処理はされているようです。 問題は、npm buildしたdistの中身でのパスがdjangoで設置した時に読み込めない階層になっているようで、こちらの設定が必要のようです。 webpackの設定の問題になりそうですので、引き続きこちら調査したいと思います。 1つの壁は超えましたので、本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問