1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

給与明細WEBアプリ開発アプリ編

Posted at

挨拶:このWEBアプリの開発は私がエンジンニアになって初めて携わった開発です。
以前はインフラ編を紹介しました。今回はアプリケーション本体を紹介します。
まだまだ勉強不足なところがありますので気になったところがあればお気軽にご指摘頂けたら幸いです。

作成経緯:会社の友人に頼まれて開発したアプリケーションです。
初めてアプリケーションを開発するため最初はflaskとjinja2で画面だけ作成しました。
しかし本番ではよくバックエンドとフロントエンドを分けて開発、運用することが多いと聞き
私も自分のアプリケーションをフロントエンドとバックエンドを分けました。
こっちのほうがセキュリティ面も改善できると思います。

構成:
フロントエンド:Vue.js+nginx
バックエンド:Flask+Gunicron+nginx
データペース:MySQL

このようにそれぞれのサーバーの間はjsonを使って通信しています。

from flask import jsonify

例えばこのようにフロント側からバック側にjsonデータを送信します。

const response = await this.$axios.post(get,delete)('http://localhost:8000/api/path

処理したデータを逆に今度バック側がこのようにjsonを使ってフロント側に送信します。

return jsonify(employee_pay_slips=employee_pay_slips, months=months, email=email)

実装した機能は
1.ログイン、ログアウト
これを実現するためにはFlaskのライブラリFlask-JWTを使用しています。

from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity

Flask-JWTを使用することにより認証トークンが作成され、こちらの認証トークンを使って
ユーザーの認証を行います。

2.csvファイルのデータをデータペースに保存
こちらを実現するにはFlaskのライブラリpandasを使用しています。

import pandas as pd

3.ステートレスの観点からファイルの保存はローカルではなくs3に保存しています。
こちらを実現するにはFlaskのライブラリboto3を使用しています。

import boto3

 client = boto3.client(
         's3',
         aws_access_key_id = os.getenv("AWS_ACCESS_KEY_ID"),
         aws_secret_access_key = os.getenv("AWS_SECRET_ACCESS_KEY"),
         region_name = os.getenv("AWS_DEFAULT_REGION"),
 )
key = 'test/test.csv'
bucket_name = 'bucket_name'
client.upload_file(filepath, bucket_name, key)

file_url = f's3://{ bucket_name }/{ key }'
df = pd.read_csv(file_url)

4.データペースの一連の操作はSQLAlchemyを使用しています。

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine, text

5.api通信を行うためにflask-corsを使用しています。

from flask_cors import CORS, cross_origin

例えばcross_originを使用して指定のドメインにapiを送信するなど使用しています。

6.そのたの機能
パスワードの暗号化、トークンの使用期限設定、環境変数の使用など

from werkzeug.security import generate_password_hash, check_password_hash
from datetime import timedelta
from dotenv import load_dotenv
import os

ページは7つのページを作成しました。

│   App.vue
│   main.js
│   router.js
└───components
        AdminLogin.vue
        MasterPage.vue
        MyPage.vue
        ReplacePass.vue
        TopPage.vue
        UserLogin.vue
        UserSignup.vue

このように以下のページがあります。

・トップ画面
・一般ユーザログイン画面
・一般ユーザ画面、
・マスターログイン画面、
・マスターページ画面、
・パスワード更新画面、
・csvファイルをアップする画面

一般ユーザーとマスターユーザーを完全に切り分けてます。

総括:このアプリケーションの作成は勉強の時間を入れてトータルで4か月かかりました。
いろいろ修正もありましたが作って楽しかったです。実際の現場はもっと複雑なものを
作っていると思いますがこれからもたくさん勉強していち早く一人前のエンジンニアになりたいです。
これからも自分が勉強したことをシェアしていきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?