群馬県でPythonを使ったAIやシステムを開発しているファントム

Navigation
群馬県でPythonを使ったAIやシステムを開発しているファントム

群馬県でPythonを使ったAIやシステムを開発しているファントムです。企業の経営課題を最適なテクノロジーで解決します。テックブログではPythonを中心にプログラミングに役立つ情報を発信しています。

投稿を検索する


  • 株式会社ファントム コーポレートサイト

カテゴリー



  • AWS 16
  • Django 45
  • FastAPI 4
  • Flask 8
  • GCP 1
  • Information 37
  • Other 32
  • PHP 2
  • Python 93
  • Pythonista 3
  • Rust 1

タグ


Alembic API argparse Beautiful Soup black Channels charset CodeCommit datetime Django REST framework Docker enumerate f-string git GitHub glob Google Colaboratory i18n IAM Internship Jupyter Lambda Matplotlib Nginx OpenCV pandas PIL Pillow PostgreSQL PyCharm PyCon pyenv PyTorch Redis Rembg ReportLab requests S3 Sentry slack tqdm uWSGI venv Vue.js youtube
このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシーと利用規約が適用されます。

© 2022 Fantom, Inc.

Hydra WordPress Theme by EckoThemes.

Published with WordPress.

Related Articles

Filter by Category

  • Python(93)
  • Django(45)
  • Information(37)
  • Other(32)
  • AWS(16)
  • Flask(8)
  • FastAPI(4)
  • Pythonista(3)
  • PHP(2)
  • GCP(1)
  • Rust(1)

Filter by Author

  • EIGHT (14)
  • hayai017 (2)
  • press (196)
Back to Latest Articles
Flask

Vue.jsとFlaskでSPA(Single Page Application)

Vue.jsとFlaskでSPA(Single Page Application) 普段はフロント側を書く機会がほとんど無いのですが、プロジェクトをモダンなフレームワークに順次対応していきたいと思い、勉強を兼ねてVue. […]

Posted on 26th 2月 2023 by press

Other

コマンドラインからPyCharmを起動する

コマンドラインからPyCharmを起動する Pythonで開発する時は必ず使っているJetBrains社のPyCharmですが、全部入りのIDEであるが故に仮想環境やフレームワークの自動設定などのサポートが手厚いことがか […]

Posted on 23rd 2月 2023 by press

FastAPI

tcp 0.0.0.0:5000: bind: address already in use

tcp 0.0.0.0:5000: bind: address already in use FlaskやFastAPIで開発することも増えてきたので5000番のポートを使用する機会が増えました。Djangoで開発する時 […]

Posted on 22nd 2月 2023 by press

Flask

Flaskで発生するsignal only works in main threadの解決方法

Flaskで発生するsignal only works in main threadの解決方法 Flaskで開発中のアプリケーションを起動すると以下のエラーが発生する場合があります。このエラーは、Flaskではmain関 […]

Posted on 16th 2月 2023 by press

AWS

AWS Cloud9にPython3.9をインストール

AWS Cloud9にPython3.9をインストール AWSのCloud9(Ubuntu)にはデフォルトでPython 3.6.9がインストールされています。 openaiに必要なpandasのインストール opena […]

Posted on 15th 2月 2023 by press

Other

PyCharmで.txtファイルで発生するRequirementsTokenTypeというエラー

PyCharmで.txtファイルで発生するRequirementsTokenTypeというエラー PyCharmで拡張子が.txtファイルを開くとエディタに以下のようなエラーが発生します。 PyCharmでは.txtはr […]

Posted on 15th 2月 2023 by press

Other

お名前.comからXserver Domainにドメイン移管

お名前.comからXserver Domainにドメイン移管 年末や年度末になるとサーバーやドメインの新規契約や更新の時期ですよね。その時々で費用や使いやすさを重視してサービスを選んだ結果、別々の会社で管理されているドメ […]

Posted on 8th 2月 2023 by press

AWS

AWSのCloud9を使ってPythonのプログラミング研修を開催

AWSのCloud9を使ってPythonのプログラミング研修を開催 2022年11月から2023年2月までの期間で、群馬県庁職員を対象にしたDXを促進するためのPythonによるプログラミング研修を開催しました。現在、群 […]

Posted on 4th 2月 2023 by press

PHP

ConoHa WINGからロリポップにWordPressを引っ越し

ConoHa WINGからロリポップにWordPressを引っ越し WordPressを運営していくと処理できるアクセス数やコストなど、様々な理由でサーバーの移行を考えるタイミングがあります。今までWordPressの移 […]

Posted on 20th 1月 2023 by press

Python

AttributeError: module ‘numpy’ has no attribute ‘float’

AttributeError: module ‘numpy’ has no attribute ‘float’ numpyを使ったライブラリをコマンド実行した際に以下のエラ […]

Posted on 16th 1月 2023 by press

GCP

YouTube APIキーの取得方法

YouTube APIキーの取得方法 普段はログインフォームにIDとパスワードを入力してログインしていたサービスでもAPIが提供されていれば、Pythonなどのプログラムからコンテンツのアップロードや取得といった操作を行 […]

Posted on 12th 1月 2023 by press

Other

2022年に最も読まれた記事ランキング

2022年に最も読まれた記事ランキング あけましておめでとうございます2023年もどうぞよろしくお願いします ファントムでは「情報技術で人々の暮らしを豊かにする」という企業理念で、2023年も皆様のお役に立てるよう精進し […]

Posted on 6th 1月 2023 by press

Other

Sentryのエラー検知をSlackに通知

Sentryのエラー検知をSlackに通知 前回に引き続き、今回はSentryとSlackの連携方法について説明します。 SentryとSlackの連携機能は導入する決め手となった理由の一つです。デフォルトではメールアド […]

Posted on 24th 11月 2022 by press

FastAPI

コピペでOK! エラー検知・監視でSentryを導入

コピペでOK! エラー検知・監視でSentryを導入 システムを運用していくうえで避けては通れないシステムの監視とエラーの検知ですが、ファントムではSentryというサービスを利用しています。SentryとSlackを連 […]

Posted on 19th 11月 2022 by press

Python

PythonからDeepLのAPIを使って翻訳

PythonからDeepLのAPIを使って翻訳 最先端のAI技術を使った世界最高レベルの機械翻訳のDeepLをAPIで操作します。deeplのライブラリを使うとPythonで書く通常のPOSTのコードよりも記述量を少なく […]

Posted on 11th 11月 2022 by press

Python

rembgで背景を削除した画像を編集して元の画像と再合成

rembgで背景を削除した画像を編集して元の画像と再合成 YouTubeにアップロードしたrembgで背景を削除する説明動画にコメントをいただいたので、rembgを使った画像処理の続編です。rembgで背景を削除した画像 […]

Posted on 1st 11月 2022 by press

Python

Rembgで画像から背景を削除

Rembgで画像から背景を削除 先日、SNSで見た画像の背景を削除して切り抜くPythonのライブラリを見つけたので早速試してみました。普段業務で画像の背景を処理することも多くソフトを使って背景を削除していたので、Pyt […]

Posted on 23rd 10月 2022 by press

Other

競艇で試したこと

競艇で実装した戦略を紹介します。 1着率を正規化 まず試したのはそれぞれの選手の1着率を全試合から計算してそれをその試合ごとに正規化する方法です。 期待値はオッズと確率の積で表せるので、確率を計算することで相対的にどの券 […]

Posted on 3rd 10月 2022 by EIGHT

Python

MacにGoProをウェブカメラとして認識させてOpenCVで使う

MacにGoProをウェブカメラとして認識させてOpenCVで使う MacとGoProを繋ぎ、GoProをウェブカメラとして認識させてOpenCVに映像を入力します。今回は映像を取り込んで画面に表示するだけですが、Pyt […]

Posted on 1st 10月 2022 by press

Python

Raspberry PiにInsightFaceをインストールできなかった

Raspberry PiにInsightFaceをインストールできなかった 顔検出や顔認証、属性判定ができるInsightFaceというライブラリを使ってRaspberry Piで属性判定に挑戦しましたが、結果的にRas […]

Posted on 21st 9月 2022 by press

View Latest Posts
Flask

Vue.jsとFlaskでSPA(Single Page Application)


press
Vue.jsとFlaskでSPA(Single Page Application)
Posted on 26th 2月 2023 by press
2024年度 インターンシップ 募集開始

Vue.jsとFlaskでSPA(Single Page Application)

普段はフロント側を書く機会がほとんど無いのですが、プロジェクトをモダンなフレームワークに順次対応していきたいと思い、勉強を兼ねてVue.jsとFlaskでSPAに初挑戦しました。ネット上にある記事はVue2で書かれていることが多く、router周りの設定でエラーが発生してそのままでは起動できなかったので、Vue3に対応したコードで書き換えています。

開発環境

PC: MacBook Pro (14, 2021)
OS: macOS Monterey 12.0.1
Python: 3.9.1
Flask: 2.2.3
Vue: 3.2.47

完成時のディレクトリ構造

※vue createコマンドで生成されるnode_modulesと仮想環境のvenvは非表示にしています。

.
├── backend
│   └── app.py
└── frontend
    ├── README.md
    ├── babel.config.js
    ├── config
    │   └── index.js
    ├── dist
    │   ├── favicon.ico
    │   ├── index.html
    │   └── static
    │       ├── css
    │       │   └── app.c5557091.css
    │       └── js
    │           ├── app.81ccbf27.js
    │           ├── app.81ccbf27.js.map
    │           ├── chunk-vendors.4f456998.js
    │           └── chunk-vendors.4f456998.js.map
    ├── jsconfig.json
    ├── package-lock.json
    ├── package.json
    ├── public
    │   ├── favicon.ico
    │   └── index.html
    ├── src
    │   ├── App.vue
    │   ├── assets
    │   │   └── logo.png
    │   ├── components
    │   │   ├── AvoutView.vue
    │   │   └── HomeView.vue
    │   ├── main.js
    │   └── router
    │       └── index.js
    └── vue.config.js

フロントエンド(Vue)でアプリを起動

初めに@vue/cliをインストールします。既にインストールされていれば飛ばします。

npm install -g @vue/cli

vue -Vで以下のように表示されればインストールできています。

@vue/cli 5.0.8

vueのアプリケーションを作成します。(frontendの部分は任意の名前でOKです)

vue create frontend

Vue3で開発していくのでVue 3を選択してエンターを押して実行します。(デフォルトで選択されているので、そのままエンターでOK)コマンドを実行するとfrontendディレクトリが追加されます。

以下の画像のようにそれぞれコマンドを実行して開発サーバーを起動します。

vue create
vue create
cd frontend
npm run serve
開発サーバー起動
開発サーバー起動

画像のように表示されたら、http://localhost:8080/にアクセスして開発サーバーが起動できているか確認します。起動に成功すると以下の画像のように表示されます。

開発サーバー起動画面
開発サーバー起動画面

表示するページ(コンポーネント)の追加

別タブなどで新規のターミナルを開いて.vueファイルの追加を行います。.vueファイルがあるcomponentsディレクトリに移動して編集を行います。

cd frontend/src/components

最初からあるHelloWorld.vueは使わないので削除します。続けてHomeView.vueとAboutView.vueを作成します。

rm -r HelloWorld.vue
touch HomeView.vue AboutView.vue

src/components/HomeView.vue

<template>
  <div>
    <p>Home</p>
  </div>
</template>

src/components/AboutView.vue

<template>
  <div>
    <p>About</p>
  </div>
</template>

src/App.vue

src内にあるApp.vueを以下のように差し替えます。

<template>
  <div id="app">
    <h1>Vue with Flask</h1>
    <router-view />
  </div>
</template>

<script>
export default {
  name: 'App',
}
</script>

<style>
#app {
  text-align: center;
}
</style>

http://localhost:8080/にアクセスして以下のように表示されていれば成功です。

親ページ
親ページ

Vue Routeを使用してSPAのルーティング

各URLに合わせて表示するページを切り替える設定を行います。srcディレクトリに戻り、vue-routerのインストールとrouterディレクトリを作成します。routerディレクトリを作成したらルーティング用のindex.jsを作成します。

cd ../
npm install vue-router
mkdir router
touch router/index.js

src/router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import HomeView from '../components/HomeView';
import AboutView from '../components/AboutView.vue';

const router = createRouter({
  history: createWebHistory(),
  routes: [
    {name: 'Home',  path: '/',  component: HomeView},
    {name: 'About', path: '/about', component: AboutView},
  ],
});

export default router;

src/main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'

createApp(App)
    .use(router)
    .mount('#app')

http://localhost:8080/とhttp://localhost:8080/aboutにアクセスしてそれぞれ表示されているか確認します。

homeページ
homeページ
aboutページ
aboutページ

バックエンド(Flask)でアプリを起動

次はFlaskの設定を行ないます。ターミナル等の別タブで新規ディレクトリとpyファイルを追加します。

mkdir backend
touch backend/app.py

pipでFlaskをインストールします。

pip install flask

backend/app.py

from flask import Flask, render_template

app = Flask(__name__,
            static_folder="../frontend/dist/static",
            template_folder="../frontend/dist"
            )


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
    return render_template("index.html")

Vue.jsとFlaskの接続

Flaskはapp.pyのstatic_folderとtemplate_folderに指定したdist/staticからファイルを読み込みますが、そのままnpm run buildコマンドでビルドするとstaticが生成されないので、以下のようにビルドしたファイルを保存するディレクトリ(dist/static)を指定します。assetsDir: “static”を追記することでビルドしたファイルがdist/staticに保存されます。

frontend/vue.config.js

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  assetsDir: "static",
})

ビルドコマンドを実行します。ビルドが完了するとfrontendディレクトリにdistディレクトリが追加されます。このディレクトリにVue側で作成したファイルが生成されています。

npm run build

Flaskサーバーの起動

flask runコマンドでFlaskサーバーを起動します。

FLASK_APP=backend/app.py flask run

http://127.0.0.1:5000/とhttp://127.0.0.1:5000/aboutでそれぞれ表示が変わっている確認します。npm run serveで起動していたフロント側の開発サーバーはCtrl+Cで停止します。

homeページ
homeページ
aboutページ
aboutページ

Vue.jsはコンポーネントと呼ばれる要素を他のページから呼びせる仕組みがとても便利です。例えばヘッダーやフッターなどの共通の要素をコンポーネント化しておけば必要なところで読み込むことができます。変更が必要なときも元のファイルを変更すれば、使用している全てのページにも反映されるので保守性にも優れています。

ファントムYouTubeチャンネル

株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    press
    • Vue.js
    • Share Article:
    • Twitter
    • Facebook
    • Pinterest
    • LinkedIn
    • Reddit

    Related Articles

    Django

    Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜2〜

    Vue.jsとDjango REST Frameworkで画面が真っ白になる原因〜2〜 Django REST Frameworkと組み合わせたVue.jsで、ビルド後にバックエンドの開発サーバー(8000ポートなど)で […]

    Posted on 3rd 4月 2023 by press
    Flask

    Failed to find Flask application or factory in module ‘NAME’.

    Failed to find Flask application or factory in module ‘NAME’. DockerでFlaskアプリケーションを起動する際にFailed to […]

    Posted on 29th 12月 2021 by press