LoginSignup
4
6

More than 3 years have passed since last update.

【Python】0からWebアプリ!ハンズオン(3)~API実装編~

Last updated at Posted at 2020-08-19

概要

Pythonで0からWebアプリを作る機会があったので、そのまとめとして!
この記事ではAPIの実装について書いています。

これまでの記事
【Python】0からWebアプリ!ハンズオン(0)~環境構築編~ - Qiita
【Python】0からWebアプリ!ハンズオン(1)~設計、DB構築編~ - Qiita
【Python】0からWebアプリ!ハンズオン(2)~ハローワールド編~ - Qiita

こんな方に読んでほしい

  • プログラミング未経験だけどアプリ作ってみたい方
  • 新人Webプログラマの方
  • 経験者だけどPythonでWebアプリ書いたことない方

ゴール

HTML, CSS, JavaScript, Python, SQLを使ってCURD機能を持ったWebアプリを作成するのが目標です。

必要なもの

  • PC(Windows OS)
  • インターネット回線
  • わくわくした気持ち

1. データベースにデータを用意する

まずはAPIからデータベースに接続し、データを取得してみようと思います。
そのために、pgAdminでテストデータを用意しましょう。
pgAdmin4を起動し、TodoDatabase > Schemas > public > Tables > todoを右クリックし、View/Edit Data > All Rowsを選択します。
2020-07-31_18h33_10.png

title: テスト
created: 2020-07-31 18:39:00
is_deleted: false
を入力し、Save Data Changesボタンを押してください。
※idは自動採番になっているので、入力しなくてOKです。
2020-07-31_18h37_32.png

2. APIからデータベースに接続してみる

データベースの接続にはPostgreSQL用のドライバを使用します。
これもいくつかありますが、一番メジャーな(インストール数が多い)「psycopg2」というものを使用します。

コマンドプロンプトから以下のコマンドでインストールします。
pip install psycopg2

そしてindex.pyを次のように書き換えます。

index.py
# -*- coding:utf-8 -*-

# 外部のパッケージを読み込む
from bottle import route, run
import psycopg2

# データベースへの接続を取得する
def get_connection():
  return psycopg2.connect("host=localhost port=5432 dbname=TodoDatabase user=postgres password=postgres")

# ハローワールドを取得
@route('/hello')
def hello():
  # Hello World!という文字列を返却
  return "Hello World!"

# Todoデータを取得
# @route('/todos')とすることで、http://localhost:8080/todosというURLでアクセスできます
# with get_connection() as conn:はスコープ終了時に自動的にconnをcloseしてくれます
@route('/todos')
def get_todos():
  with get_connection() as conn:
    with conn.cursor() as cur:
      # SQLを実行
      cur.execute('SELECT * FROM todo')
      # データベースへの問い合わせ結果を1件取得
      data = cur.fetchone()
      # DBから取得したデータを文字列に変換して返却
      return str(data)

# Webサーバーの実行構成
# URLの "http://[host]:[port]/[route]" の構成となる
run(host='localhost', port=8080, debug=True)

とりあえず何も考えずに動かしてみましょう!
ハローワールド時と同様にF5キーを押して、「Python File」を選択し、サーバーを起動します。
その後ブラウザで http://localhost:8080/todos にアクセスしてください。
image.png
データベースから取得したデータが表示されました!

まとめ

データベースのデータを表示してくれるAPIの実装を行いました!

次回は・・・

今のままだと、APIからどんな形でデータが返ってくるか、わかりにくいものです・・・よね?(おしつけ)
データベースのデータをjson形式に変換して、使いやすくしてみます!
【Python】0からWebアプリ!ハンズオン(4)~データ成形編~ - Qiita

4
6
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
4
6