Vue.jsとDjango REST FrameworkでSPA構築〜前半〜
Vue.jsとDjango REST FrameworkでSPA構築〜前半〜 Vue.jsとFlaskの連携に続き、今回はVue.jsとDjango(Django REST Framework)の連携を解説します。チュー […]
Filter by Category
Vue.jsとDjango REST FrameworkでSPA構築〜前半〜 Vue.jsとFlaskの連携に続き、今回はVue.jsとDjango(Django REST Framework)の連携を解説します。チュー […]
.gitignoreには書かずに自分の環境だけファイルを管理から外す Gitでは管理から外すファイルを指定するには、.gitignoreファイルを使用します。これは、Gitが無視するべきファイルやディレクトリのリストを書 […]
Flaskで開発サーバーを起動する時のTips Flaskで開発中にflask runコマンドでサーバーを起動した際に以下の表示が出る場合があります。この表示は.envもしくは.flaskenvがあってもpython-d […]
PyCharmで.envから環境変数を読み込む 環境変数を.envに書いて読み込ませる理由 Pythonの開発では、セキュリティや環境毎の設定、柔軟性などの理由から.envファイルに環境変数を書いて読み込ませる方法が推奨 […]
他人の作ったライブラリを効率的に扱うことができました。入力や出力の型が決まっているので定義ジャンプすればそれがどんな型なのか、どんな関数が用意されてるのか見ることができます。ソースコードも非常に読みやすいです。 trai […]
Vue.jsとFlaskでSPA(Single Page Application) 普段はフロント側を書く機会がほとんど無いのですが、プロジェクトをモダンなフレームワークに順次対応していきたいと思い、勉強を兼ねてVue. […]
コマンドラインからPyCharmを起動する Pythonで開発する時は必ず使っているJetBrains社のPyCharmですが、全部入りのIDEであるが故に仮想環境やフレームワークの自動設定などのサポートが手厚いことがか […]
tcp 0.0.0.0:5000: bind: address already in use FlaskやFastAPIで開発することも増えてきたので5000番のポートを使用する機会が増えました。Djangoで開発する時 […]
Flaskで発生するsignal only works in main threadの解決方法 Flaskで開発中のアプリケーションを起動すると以下のエラーが発生する場合があります。このエラーは、Flaskではmain関 […]
AWS Cloud9にPython3.9をインストール AWSのCloud9(Ubuntu)にはデフォルトでPython 3.6.9がインストールされています。 openaiに必要なpandasのインストール opena […]
PyCharmで.txtファイルで発生するRequirementsTokenTypeというエラー PyCharmで拡張子が.txtファイルを開くとエディタに以下のようなエラーが発生します。 PyCharmでは.txtはr […]
お名前.comからXserver Domainにドメイン移管 年末や年度末になるとサーバーやドメインの新規契約や更新の時期ですよね。その時々で費用や使いやすさを重視してサービスを選んだ結果、別々の会社で管理されているドメ […]
AWSのCloud9を使ってPythonのプログラミング研修を開催 2022年11月から2023年2月までの期間で、群馬県庁職員を対象にしたDXを促進するためのPythonによるプログラミング研修を開催しました。現在、群 […]
ConoHa WINGからロリポップにWordPressを引っ越し WordPressを運営していくと処理できるアクセス数やコストなど、様々な理由でサーバーの移行を考えるタイミングがあります。今までWordPressの移 […]
AttributeError: module ‘numpy’ has no attribute ‘float’ numpyを使ったライブラリをコマンド実行した際に以下のエラ […]
YouTube APIキーの取得方法 普段はログインフォームにIDとパスワードを入力してログインしていたサービスでもAPIが提供されていれば、Pythonなどのプログラムからコンテンツのアップロードや取得といった操作を行 […]
2022年に最も読まれた記事ランキング あけましておめでとうございます2023年もどうぞよろしくお願いします ファントムでは「情報技術で人々の暮らしを豊かにする」という企業理念で、2023年も皆様のお役に立てるよう精進し […]
Sentryのエラー検知をSlackに通知 前回に引き続き、今回はSentryとSlackの連携方法について説明します。 SentryとSlackの連携機能は導入する決め手となった理由の一つです。デフォルトではメールアド […]
コピペでOK! エラー検知・監視でSentryを導入 システムを運用していくうえで避けては通れないシステムの監視とエラーの検知ですが、ファントムではSentryというサービスを利用しています。SentryとSlackを連 […]
PythonからDeepLのAPIを使って翻訳 最先端のAI技術を使った世界最高レベルの機械翻訳のDeepLをAPIで操作します。deeplのライブラリを使うとPythonで書く通常のPOSTのコードよりも記述量を少なく […]
Vue.jsとFlaskの連携に続き、今回はVue.jsとDjango(Django REST Framework)の連携を解説します。チュートリアルやネット上の情報は1ページだけ連携する内容が多く、ルーティングを考慮した複数ページに対応したSPA(Single Page Application)の情報が無かったので、本記事ではそれぞれ違うURLで表示する2ページの構成にしました。views.pyの関数とルーティングを増やしていけば3ページ、4ページ…と構成を増やすことができます。ボリュームが大きいので前半(バックエンド)と後半(フロントエンド)に分けて解説していきます。
コードはGitHubリポジトリにあげています。
PC: MacBook Pro (14, 2021)
OS: macOS Monterey 12.0.1
Python: 3.10.0
Django: 4.1.7
Vue: 3.2.47
※vue createコマンドで生成されるfrontend/node_modulesは非表示にしています。
.
├── app
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── backend
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── dist
│ ├── favicon.ico
│ └── static
│ ├── css
│ │ └── app.ae28e334.css
│ └── js
│ ├── app.c134098e.js
│ ├── app.c134098e.js.map
│ ├── chunk-vendors.fd7cbdcf.js
│ └── chunk-vendors.fd7cbdcf.js.map
├── frontend
│ ├── README.md
│ ├── babel.config.js
│ ├── jsconfig.json
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ └── index.html
│ ├── router.js
│ ├── src
│ │ ├── App.vue
│ │ ├── assets
│ │ │ └── logo.png
│ │ ├── components
│ │ │ ├── OneView.vue
│ │ │ └── TwoVie.vue
│ │ └── main.js
│ └── vue.config.js
├── manage.py
├── requirements.txt
├── templates
│ └── index.html
└── venv
DjangoとDjango REST Framework、django-cors-headersをインストールします。
pip install Django djangorestframework django-cors-headers
Djangoプロジェクト(backend)を作成します。(.を付けずに実行すると1段階階層が深いところにディレクトリが生成されます。)
django-admin startproject backend .
開発サーバーを起動します
python manage.py runserver
http://127.0.0.1:8000/にアクセスしてブラウザで画像のように表示されていればDjangoが起動できています。
Djangoアプリケーション(app)を作成します
python manage.py startapp app
appディレクトリが生成されたらbackend/settings.pyに設定を追加します。
追加項目
・INSTALLED_APPS
・MIDDLEWARE
・CORS_ORIGIN_WHITELIST
backend/settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 追加
'app', # 追加
'corsheaders', # 追加
]
...
...
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 追加
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
...
...
# 追加
CORS_ORIGIN_WHITELIST = (
'http://127.0.0.1:8080',
'http://127.0.0.1:8000',
'http://localhost:8000',
'http://localhost:8080',
)
...
backend/urls.py
from django.contrib import admin
from django.urls import path, include, re_path
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include('app.urls')),
]
app/views.py
from django.views.generic.base import TemplateView
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
import datetime
class SampleAPIView(APIView):
def get(self, request):
return Response("OK", status=status.HTTP_200_OK)
class DateTimeView(APIView):
def get(self, request):
datetime_str = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
return Response(datetime_str, status=status.HTTP_200_OK)
class IndexView(TemplateView):
template_name = "index.html"
appにurls.pyを追加します。
touch app/urls.py
app/urls.py
from django.urls import path
from app.views import SampleAPIView, DateTimeView
urlpatterns = [
path("sample/", SampleAPIView.as_view(), name="sample"),
path("datetime/", DateTimeView.as_view(), name="datetime"),
]
http://127.0.0.1:8000/api/v1/sample/とhttp://127.0.0.1:8000/api/v1/datetime/の各ページにアクセスしてブラウザで画像のように表示されていればDjango REST frameworkでAPI連携の準備ができました。
Django REST frameworkでAPI連携の準備ができたので、一旦ここでバックエンド側は終了です。続いてフロントエンド側(Vue.js)の実装を進めていきます。
後半のフロントエンドの実装は以下のURLです。
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません