Djangoの新機能、そしてReactJSの新機能。私はAngular JSとReactJSを検討してきましたが、ReactJSに決めました。 AngularJSの方が市場シェアが高いにもかかわらず、AngularJSは人気の点では限界があり、ReactJSの方が早く入手できると言われています。
それだけではありませんが、Udemyのコースを受講し始めました。いくつかのビデオを見て、Djangoとどの程度うまく統合されているかを確認することが重要と思われました。それは私がどうしてもそれを立ち上げて実行するだけの壁にぶつかったとき、私は数時間と夜の間私の車輪を回さないようにどんな種類のドキュメンテーションがそこにあるかということです。
私が遭遇した、包括的なチュートリアルやpip
パッケージは本当にありません。私が遭遇した数少ないものはうまく動かなかったか日付が付きませんでした、例えばpyreact
。
ReactJSコンポーネントをレンダリングするクラスとIDを考慮しながら、ReactJSを完全に別々に扱うことだけを考えていました。別々のReactJSコンポーネントを単一のES5ファイルにコンパイルしたら、その単一ファイルをDjangoにインポートします。テンプレート。
Django Rest Frameworkは関係しているように思えますが、Djangoモデルからレンダリングするとすぐにうまくいくと思います。 Reduxがこれらすべてにどのような影響を与えるかを見るにはそれほど遠くありません。
とにかく、誰もが彼らが共有したいDjangoとReactJSを使っているという明確な方法を持っていますか?
いずれにしても、ドキュメントとチュートリアルはAngularJSとDjangoのために豊富にあるので、フロントエンドフレームワークを始めるためにその道を進むのは魅力的です...最良の理由ではありません。
私はDjangoの経験がありませんが、フロントエンドからバックエンド、そしてフロントエンドフレームワークからフレームワークまでの概念は同じです。
これが私がウェブ上で見つけたいくつかのことです すべきです (簡単なGoogle検索に基づいて)助けになる:
これが正しい方向に進むことを願っています!がんばろう!うまくいけば、Djangoを専門とする人が私の回答に追加できることを願います。
私もDjangoとReact.jsを連携させようとしているので、私はあなたの痛みを感じます。 Djangoプロジェクトをいくつかやった、と私は思う、React.jsはDjangoにぴったりだ。しかし、始めるのは恐ろしいことです。私たちはここで巨人の肩の上に立っています;)
これが私が考える方法です、それはすべて一緒に働きます(全体像、私が間違っているならば誰かが私を直してください)。
Djangoと 'フロントエンド'の間の通信はRestフレームワークを介して行われます。 Restフレームワークに対する権限と許可が適切に設定されていることを確認してください。
私はまさにこのシナリオのための良いボイラーテンプレートを見つけました、そしてそれは箱から出してうまくいきます。 readme https://github.com/scottwoodall/Django-react-template に従ってください。そして、作業が終わったら、かなり素晴らしいDjango Reactjプロジェクトが実行されています。これは本番用ではありませんが、むしろあなたが掘り下げて物事がどのように関連して機能しているかを見るための手段としてのものです。
2つ目のステップにたどり着く前に、セットアップの指示に従ってください(Django here https://github.com/scottwoodall/Django-react-template/blob)。 /master/backend/README.md )、セットアップ用の要件ファイルを変更します。
プロジェクト内の/backend/requirements/common.pipにファイルがあります。その内容をこれで置き換えてください。
appdirs==1.4.0
Django==1.10.5
Django-autofixture==0.12.0
Django-extensions==1.6.1
Django-filter==1.0.1
djangorestframework==3.5.3
psycopg2==2.6.1
これでDjangoとそのRestフレームワークの最新の安定版が手に入ります。
それが役立つことを願っています。
他の人があなたに答えたように、もしあなたが新しいプロジェクトを作成しているなら、あなたはフロントエンドとバックエンドを分離し、あなたのフロントエンドアプリケーションのためのrest apiを作成するためにDjangoレストプラグインを使用できます。これは理想的な世界です。
Djangoテンプレートが既に配置されているプロジェクトがある場合は、アプリケーションをロードしたいページに反応DOMレンダリングをロードする必要があります。私の場合、すでに Django-pipeline を持っていて、browserify拡張を追加しました。 ( https://github.com/j0hnsmith/Django-pipeline-browserify )
例のように、Django-pipelineを使ってアプリをロードしました。
PIPELINE = {
# ...
'javascript':{
'browserify': {
'source_filenames' : (
'js/entry-point.browserify.js',
),
'output_filename': 'js/entry-point.js',
},
}
}
あなたの " entry-point.browserify.js "はあなたの反応アプリケーションをテンプレートにロードするES6ファイルにすることができます。
import React from 'react';
import ReactDOM from 'react-dom';
import App from './components/app.js';
import "babel-polyfill";
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import promise from 'redux-promise';
import reducers from './reducers/index.js';
const createStoreWithMiddleware = applyMiddleware(
promise
)(createStore);
ReactDOM.render(
<Provider store={createStoreWithMiddleware(reducers)}>
<App/>
</Provider>
, document.getElementById('my-react-app')
);
Djangoテンプレートでは、アプリを簡単に読み込むことができます。
{% load pipeline %}
{% comment %}
`browserify` is a PIPELINE key setup in the settings for Django
pipeline. See the example above
{% endcomment %}
{% javascript 'browserify' %}
{% comment %}
the app will be loaded here thanks to the entry point you created
in PIPELINE settings. The key is the `entry-point.browserify.js`
responsable to inject with ReactDOM.render() you react app in the div
below
{% endcomment %}
<div id="my-react-app"></div>
Django-pipelineを使う利点は、静的変数がcollectstatic
の間に処理されることです。
最初のアプローチは、個別のDjangoアプリとReactアプリを構築することです。 Djangoは、Django RESTフレームワークを使用して構築されたAPIを提供し、Reactは、AxiosクライアントまたはブラウザのAPIを取得します。 開発用と本番用の2つのサーバーが必要です。1つはDjango(REST API)用で、もう1つはReact用です(静的ファイルを提供するため)。
2番目のアプローチは異なります、フロントエンドアプリとバックエンドアプリは結合されます。基本的に、Djangoを使用してReactフロントエンドを提供し、REST APIを公開します。したがって、ReactとWebpackをDjangoと統合する必要があります。これらは、それを行うために実行できる手順です。
最初にDjangoプロジェクトを生成し、次にこのプロジェクトディレクトリ内でReact CLIを使用してReactアプリケーションを生成します
Django project installDjango-webpack-loaderwith pip:
pip install Django-webpack-loader
次に、インストールしたアプリにアプリを追加し、次のオブジェクトを追加してsettings.py
で設定します
WEBPACK_LOADER = {
'DEFAULT': {
'BUNDLE_DIR_NAME': '',
'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats.json'),
}
}
次に、Djangoアプリケーションのマウントに使用され、Djangoによって提供されるReactテンプレートを追加します
{ % load render_bundle from webpack_loader % }
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>Django + React </title>
</head>
<body>
<div id="root">
This is where React will be mounted
</div>
{ % render_bundle 'main' % }
</body>
</html>
次に、このテンプレートを提供するurls.py
にURLを追加します
from Django.conf.urls import url
from Django.contrib import admin
from Django.views.generic import TemplateView
urlpatterns = [
url(r'^', TemplateView.as_view(template_name="main.html")),
]
この時点でDjangoサーバーとReactサーバーの両方を起動すると、webpack-stats.json
が存在しないというDjangoエラーが発生します。そのため、次にReactアプリケーションで統計ファイルを生成できるようにする必要があります。
先に進み、Reactアプリ内を移動してからwebpack-bundle-tracker
をインストールします
npm install webpack-bundle-tracker --save
次に、Webpack構成をイジェクトし、config/webpack.config.dev.js
に移動してから追加します
var BundleTracker = require('webpack-bundle-tracker');
//...
module.exports = {
plugins: [
new BundleTracker({path: "../", filename: 'webpack-stats.json'}),
]
}
これにより、WebpackにBundleTrackerプラグインが追加され、親フォルダーにwebpack-stats.json
を生成するよう指示されます。
本番用のconfig/webpack.config.prod.js
でも同じことを確認してください。
Reactサーバーを再実行すると、webpack-stats.json
が生成され、Djangoがそれを消費して、React devサーバー。
他にもいくつかあります。詳細については、この tutorial を参照してください。
バックエンドやDjangoベースのロールから来て、ReactJSで作業しようとしている人へのメモ:最初の試みでReactJS環境をうまく設定することに成功した人はいません。
http://owaislone.org/blog/webpack-plus-reactjs-and-Django/ から入手可能なOwais Loneからのブログがあります。しかしWebpack設定の構文は時代遅れです。
ブログに記載されている手順に従って、Webpack設定ファイルを以下の内容に置き換えてください。ただし、DjangoとReactの両方に慣れていない場合は、学習曲線のために一度に1つずつ噛んでください。
var path = require('path');
var webpack = require('webpack');
var BundleTracker = require('webpack-bundle-tracker');
module.exports = {
context: __dirname,
entry: './static/assets/js/index',
output: {
path: path.resolve('./static/assets/bundles/'),
filename: '[name]-[hash].js'
},
plugins: [
new BundleTracker({filename: './webpack-stats.json'})
],
module: {
loaders: [
{
test: /\.jsx?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
}
]
},
resolve: {
modules: ['node_modules', 'bower_components'],
extensions: ['.js', '.jsx']
}
};
次のチュートリアルを試すことができます。前進するのに役立ちます。
受け入れられた答えは、DjangoバックエンドとReactフロントエンドを分離することが、何があっても正しい方法であると信じるようになりました。実際、ReactとDjangoを組み合わせたアプローチがあり、特定の状況により適しています。
このチュートリアル これについてよく説明しています。特に:
次のパターンが見られます(ほとんどすべてのWebフレームワークに共通です)。
-独自の「フロントエンド」で反応するDjangoアプリ:単一のHTMLテンプレートをロードし、Reactでフロントエンドを管理します(難易度:中)
-Django RESTスタンドアロンAPI + ReactスタンドアロンSPA(難易度:ハード、認証にJWTが必要)
-Mix and match:mini Reactアプリ内のDjangoテンプレート(難易度:シンプル)