Slide 1

Slide 1 text

炭酸飲料が飲めない学校で 炭酸飲料を飲めるようにした話

Slide 2

Slide 2 text

⾃⼰紹介 ダニエル(⾼⽥勝悟) ⼋王⼦桑志⾼校システム情報分野 Python が好き

Slide 3

Slide 3 text

炭酸飲料が好きな⼈?

Slide 4

Slide 4 text

学校で炭酸飲料が買えない

Slide 5

Slide 5 text

炭酸飲料を売っている ⾃動販売機を作ってしまおう

Slide 6

Slide 6 text

その頃... Django ⾯⽩いな〜。 何か作ってみたいな〜。

Slide 7

Slide 7 text

⾃動販売機を管理するための Web アプリを作ろう

Slide 8

Slide 8 text

作ったもの 炭酸飲料を保管する箱 管理⽤Web アプリ

Slide 9

Slide 9 text

Django

Slide 10

Slide 10 text

データベース from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)

Slide 11

Slide 11 text

データベース CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );

Slide 12

Slide 12 text

from ... import Person p1 = Person(first_name="Shogo", last_name="Takata") p1.save() p2 = Person() p2.first_name = "Shogo" p2.last_name = "Takata" p2.save()

Slide 13

Slide 13 text

Django データベース HTML テンプレート ルータ ユーザー認証

Slide 14

Slide 14 text

⾃動販売機 ユーザー認証 商品 残⾼

Slide 15

Slide 15 text

商品 class Item(models.Model): product_name = models.CharField(max_length=200) product_price = models.IntegerField() product_price_with_fee = models.IntegerField() added_date = models.DateTimeField(null=True) seller = models.ForeignKey(User, on_delete=models.SET_NULL,

Slide 16

Slide 16 text

売る

Slide 17

Slide 17 text

買う

Slide 18

Slide 18 text

class Log(models.Model): product_name = models.CharField(max_length=200) product_price = models.IntegerField() product_price_with_fee = models.IntegerField() added_date = models.DateTimeField(null=True) deleted_date = models.DateTimeField(null=True) seller = models.ForeignKey( User, on_delete=models.SET_NULL, null=True, related_name buyer = models.ForeignKey( User, on_delete=models.SET_NULL, null=True, related_name

Slide 19

Slide 19 text

残⾼ 1. ユーザーDB につける 問題が起きたときに⾯倒 2. ログを遡って残⾼を⾒る 問題の起きたログだけ消せばいい ⼊⾦出⾦ができない 3. ⼊⾦出⾦もログに⼊れよう 商品名をIn , Out にしてシステムに買わせる

Slide 20

Slide 20 text

起きた問題

Slide 21

Slide 21 text

2 度売られてしまう問題 売ったあとページの再読込をすると、もう⼀度売った 判定が出る

Slide 22

Slide 22 text

解決 ⼀度しか使えないトークンを⽤意する ↓ 同時アクセスに対応できない

Slide 23

Slide 23 text

⼊⾦

Slide 24

Slide 24 text

⼊⾦

Slide 25

Slide 25 text

⼊⾦額が合わない

Slide 26

Slide 26 text

集めた税から出す しっかり確認する(未実装)

Slide 27

Slide 27 text

学校が炭酸飲料を⼊れた

Slide 28

Slide 28 text

学校「炭酸飲料は⼊荷しません」 クラス「仕⽅ない、⾃分たちで作ろう」 3 ヶ⽉後... 学校「炭酸飲料⼊荷します」 クラス「?!?!」

Slide 29

Slide 29 text

実績

Slide 30

Slide 30 text

まとめ Django を使えばデータベースを使ったWeb アプリ を簡単に実装できる お⾦が絡むシステムで信頼ベースはきつい 都⽴⾼校って案外ちょろい