- 11◆jG/Re6aTC.23/04/27(木) 19:24:36
- 21◆jG/Re6aTC.23/04/27(木) 19:25:23
- 31◆jG/Re6aTC.23/04/27(木) 19:28:20
- 41◆jG/Re6aTC.23/04/27(木) 19:29:18
あ、質問ご意見アドバイス大歓迎です
「○○」てどういう意味?
から
「この構成イケてないんじゃない?」
まで遠慮なくどうぞ - 51◆jG/Re6aTC.23/04/27(木) 19:54:47
- 61◆jG/Re6aTC.23/04/27(木) 20:00:39
- 71◆jG/Re6aTC.23/04/27(木) 21:26:08
飯食ってました
続きいきます - 81◆jG/Re6aTC.23/04/27(木) 21:28:21
- 9二次元好きの匿名さん23/04/27(木) 21:28:51
おぉ!がんばれー!
- 101◆jG/Re6aTC.23/04/27(木) 21:38:37
- 111◆jG/Re6aTC.23/04/27(木) 21:40:20
- 121◆jG/Re6aTC.23/04/27(木) 21:46:42
これにはfastapi側とリバプロ側の2個所の設定変更が必要
まずはfatapi側
fastapiを起動するときに --root-path オプションで設定できるらしい
公式イメージは DockerfileのCMDで起動時のオプションを指定しているようなので公式が事前に設定している
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
を
["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--root-path", "/api" ]
のように追記すれば良いはず
docker-composeではこのようにするとイメージのCMDを上書きできる - 131◆jG/Re6aTC.23/04/27(木) 21:47:56
- 141◆jG/Re6aTC.23/04/27(木) 21:53:40
commandの上書きは
["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80", "--root-path", "/api" ]
のようにmain:app でないといけなかったっぽいので修正 - 151◆jG/Re6aTC.23/04/27(木) 21:59:35
あれ、上手くいかんな
このへんややこしいっぽい - 161◆jG/Re6aTC.23/04/27(木) 22:01:47
- 171◆jG/Re6aTC.23/04/27(木) 22:03:36
- 181◆jG/Re6aTC.23/04/27(木) 22:06:08
これで fridge apiも戻ったうえFastAPIの便利な機能も使えるようになった
localhostにアクセスするとプログラム内で定義した機能を確認できるWeb画面に遷移する
これはFastAPIがソースコードから自動生成してくれる
ソースコードをコメント含めちゃんと書いていれば仕様書として使えるレベルのものを自動生成してくれるのだ
- 191◆jG/Re6aTC.23/04/27(木) 22:06:50
いかんURLが変換されてしまったな
localhost/api/docs
にアクセスするとプログラム内で定義した機能を確認できるWeb画面に遷移する
と書いてあった - 201◆jG/Re6aTC.23/04/27(木) 22:09:04
- 211◆jG/Re6aTC.23/04/27(木) 22:10:45
- 221◆jG/Re6aTC.23/04/27(木) 22:53:24
- 231◆jG/Re6aTC.23/04/27(木) 23:00:51
ここの値を
叡智ttp://localhost/api/fridge
に置き換えればいいのだがここでワンポイント
そうではなくて
`${location.protocol}//${location.host}/api/fridge`
のように書く
なぜかというと localhost... はローカル環境限定のURLなので最終的にインターネットに公開すると使えなくなってしまう
`${location.protocol}//${location.host}`
と書くと「今ブラウザで開いているプロトコル//ホスト名」(=今ブラウザで開いているURL)になるため、ローカルでもインターネット上でも共通して使える記述になる - 241◆jG/Re6aTC.23/04/27(木) 23:03:54
- 251◆jG/Re6aTC.23/04/27(木) 23:06:03
- 261◆jG/Re6aTC.23/04/27(木) 23:11:34
- 271◆jG/Re6aTC.23/04/27(木) 23:14:04
- 281◆jG/Re6aTC.23/04/27(木) 23:20:34
- 291◆jG/Re6aTC.23/04/28(金) 09:57:02
GWに入るともう少しがっつり進められるかなぁ
- 301◆jG/Re6aTC.23/04/28(金) 18:27:52
続きやっていきまーす
- 311◆jG/Re6aTC.23/04/28(金) 18:30:53
DBにOracleCloudを選定した理由は前スレでも説明したけど大きく3つ
- 無料
- 20GBも使える
- 非アクティブ7日までOK(データ自体は3カ月まで) - 321◆jG/Re6aTC.23/04/28(金) 18:36:17
- 331◆jG/Re6aTC.23/04/28(金) 18:39:45
- 341◆jG/Re6aTC.23/04/28(金) 18:42:39
- 351◆jG/Re6aTC.23/04/28(金) 18:48:07
- 361◆jG/Re6aTC.23/04/28(金) 18:50:37
- 371◆jG/Re6aTC.23/04/28(金) 18:55:32
- 381◆jG/Re6aTC.23/04/28(金) 18:57:47
- 39二次元好きの匿名さん23/04/28(金) 18:58:47
このレスは削除されています
- 401◆jG/Re6aTC.23/04/28(金) 19:00:47
- 411◆jG/Re6aTC.23/04/28(金) 19:01:55
- 421◆jG/Re6aTC.23/04/28(金) 19:05:24
- 43二次元好きの匿名さん23/04/28(金) 19:06:50
証明書とdnsはどうするんだ?
- 441◆jG/Re6aTC.23/04/28(金) 19:06:52
- 451◆jG/Re6aTC.23/04/28(金) 19:09:14
- 461◆jG/Re6aTC.23/04/28(金) 19:11:50
- 47二次元好きの匿名さん23/04/28(金) 19:11:58
- 481◆jG/Re6aTC.23/04/28(金) 19:14:20
- 491◆jG/Re6aTC.23/04/28(金) 19:15:15
ちなみに接続先が3つあるのは接続先によって処理の優先順位をコントロールするためらしい
とりあえずmediumでいいのかな
https://blogs.oracle.com/oracle4engineer/post/adb-services-shares-201905
- 50二次元好きの匿名さん23/04/28(金) 19:17:28
このレスは削除されています
- 511◆jG/Re6aTC.23/04/28(金) 19:39:04
なんかインターネット接続の調子悪いな
PC再起動がてら飯食ってきます - 521◆jG/Re6aTC.23/04/28(金) 20:35:47
再開しまーす
- 531◆jG/Re6aTC.23/04/28(金) 20:38:24
- 541◆jG/Re6aTC.23/04/28(金) 20:42:56
- 551◆jG/Re6aTC.23/04/28(金) 20:45:28
- 561◆jG/Re6aTC.23/04/28(金) 20:49:36
- 571◆jG/Re6aTC.23/04/28(金) 20:51:42
- 581◆jG/Re6aTC.23/04/28(金) 20:52:36
- 591◆jG/Re6aTC.23/04/28(金) 20:58:03
- 601◆jG/Re6aTC.23/04/28(金) 21:00:40
- 611◆jG/Re6aTC.23/04/28(金) 21:06:02
- 621◆jG/Re6aTC.23/04/28(金) 21:07:48
- 631◆jG/Re6aTC.23/04/28(金) 21:11:44
- 641◆jG/Re6aTC.23/04/28(金) 21:19:06
- 651◆jG/Re6aTC.23/04/28(金) 21:21:01
- 661◆jG/Re6aTC.23/04/28(金) 21:21:52
- 671◆jG/Re6aTC.23/04/28(金) 21:23:34
- 681◆jG/Re6aTC.23/04/28(金) 21:28:52
- 691◆jG/Re6aTC.23/04/28(金) 21:33:28
ここまでいったらDB設計などに入りたいですがここでひと手間かけます
ORマッパーを使いたい なぜかというと...
SQLを書いてDBは操作できるようになったのですがDBにはSQLの「方言」的要素があります
OracleDBでは使えてPostgresでは使えないSQL構文があったりするわけですね
今回のコンセプトが無料であることを掲げている以上、サービスが急に無料をやめる可能性がありDBの種類を変えざるを得ないケースが発生するかもしれません
そうなったときにコード内のSQL記述を変更するのは大変! - 701◆jG/Re6aTC.23/04/28(金) 21:36:13
そこで役立つのがORM
ORMを使うと共通の記述で異なるDBにも同じ操作を実行することができるようになります
またSQLを使わないのでより「Pythonコード的」に書くことができる
Pythonコード内に別の言語形態の記述が入って可読性を下げてしまうのを回避します - 711◆jG/Re6aTC.23/04/28(金) 21:46:17
Pythonで有名なORMに「SQLAlchemy」があるのでこれを使う
(本当はfastapiと連携がしやすいらしい「sqlmodel」なるものを使いたかったがoracledbモジュールに対応していないっぽいので断念)
SQLAlchemy - The Database Toolkit for Pythonwww.sqlalchemy.org - 721◆jG/Re6aTC.23/04/28(金) 21:46:30
下のコマンドでsqlalchemyをインストール
python -m pip install sqlalchemy - 731◆jG/Re6aTC.23/04/28(金) 21:47:24
- 741◆jG/Re6aTC.23/04/28(金) 21:48:35
- 751◆jG/Re6aTC.23/04/28(金) 21:49:23
- 761◆jG/Re6aTC.23/04/28(金) 21:52:39
- 771◆jG/Re6aTC.23/04/28(金) 21:54:31
- 781◆jG/Re6aTC.23/04/28(金) 21:55:42
- 79二次元好きの匿名さん23/04/28(金) 21:56:47
コードやってて困るもの
「エラーを吐かないエラー」
いっそエラーを吐いてくれ…吐け!! - 80二次元好きの匿名さん23/04/28(金) 21:57:50
こんなのあるんだなぁ
- 811◆jG/Re6aTC.23/04/28(金) 21:58:28
- 82二次元好きの匿名さん23/04/28(金) 21:59:55
pythonの開発環境は何を使ってるんです?
spyder? - 831◆jG/Re6aTC.23/04/28(金) 22:03:55
- 841◆jG/Re6aTC.23/04/28(金) 22:07:07
- 851◆jG/Re6aTC.23/04/28(金) 22:10:28
- 86二次元好きの匿名さん23/04/28(金) 22:10:56
このレスは削除されています
- 871◆jG/Re6aTC.23/04/28(金) 22:12:11
- 88二次元好きの匿名さん23/04/28(金) 22:12:20
- 891◆jG/Re6aTC.23/04/28(金) 22:14:10
- 90二次元好きの匿名さん23/04/28(金) 22:14:43
結構着々とやれてるのが見ていて気持ちいい
- 911◆jG/Re6aTC.23/04/28(金) 22:44:32
- 921◆jG/Re6aTC.23/04/28(金) 22:55:10
- 931◆jG/Re6aTC.23/04/28(金) 23:00:09
- 941◆jG/Re6aTC.23/04/28(金) 23:03:26
- 951◆jG/Re6aTC.23/04/28(金) 23:09:58
- 961◆jG/Re6aTC.23/04/28(金) 23:10:16
- 971◆jG/Re6aTC.23/04/28(金) 23:13:19
キリがいいので今日はここまで
明日はDBにテーブルを作成してデモデータ挿入、Python側で取得まで行ければいいな
引き続きご意見ご感想質問アドバイスお待ちしております
この時期だと就活生もいるかもだから「IT業界で働くってどう?」みたいなことも(守秘義務に違反しない範囲で)応えられたらと思います - 981◆jG/Re6aTC.23/04/28(金) 23:39:30
- 991◆jG/Re6aTC.23/04/29(土) 04:59:35
寝過ごす可能性があるので保守しとく
- 100二次元好きの匿名さん23/04/29(土) 11:12:44
import ~ as ~
from ~ import ~ as ~
asは「インポートしたもんを略称として~にする」という意味だよ、というクソ長いライブラリ名に対して便利なやつという豆知識。保守 - 101二次元好きの匿名さん23/04/29(土) 13:42:18
組み込み系で働いててWeb系の技術全然知らないので新鮮ですわぁ
- 1021◆jG/Re6aTC.23/04/29(土) 14:50:11
- 1031◆jG/Re6aTC.23/04/29(土) 15:12:01
- 1041◆jG/Re6aTC.23/04/29(土) 15:13:09
- 1051◆jG/Re6aTC.23/04/29(土) 19:06:19
外出から戻ってきたので続きをば
- 1061◆jG/Re6aTC.23/04/29(土) 19:32:16
むう、SQLAlchemy2.0でずいぶん記述方法が変わってるな
ドキュメント読み込むまで時間かかるかも - 107二次元好きの匿名さん23/04/29(土) 19:57:49
ORMあるからDB変わっても大丈夫理論…うっ…過去のトラウマが…
いや、規模によるんだけどね、個人開発なら大丈夫だと思うんだけどね
リポジトリパターンとかもそうだけど、本気で挿げ替え可能でしょって言ってくる人結構数いて辛い…DBとか一番依存関係の根っこにあるんだから無理だよ… - 10810123/04/29(土) 20:23:03
- 1091◆jG/Re6aTC.23/04/29(土) 20:54:00
- 1101◆jG/Re6aTC.23/04/29(土) 21:06:20
- 1111◆jG/Re6aTC.23/04/29(土) 21:09:28
__tablename__ は作成されるテーブル名
id, name, fullname はそれぞれカラム定義
idは数値でオートインクリメント(データ挿入時に自動的にカウントアップ)かつ主キーを設定している
SQLAlcemyではテーブルに必ず1つは主キーが必要になる
name, fullnameはそれぞれ文字列で定義
これがテーブルの構成になりひいてはデータを取得した際の入れ物の型にもなる - 1121◆jG/Re6aTC.23/04/29(土) 21:12:28
- 1131◆jG/Re6aTC.23/04/29(土) 21:14:34
- 1141◆jG/Re6aTC.23/04/29(土) 21:16:15
- 1151◆jG/Re6aTC.23/04/29(土) 21:17:33
エラー文を見ると
str(文字列)であるuserにはBaseなんてないよ
言われてるわけだが...
userが文字列? - 1161◆jG/Re6aTC.23/04/29(土) 21:18:44
- 1171◆jG/Re6aTC.23/04/29(土) 21:20:36
- 1181◆jG/Re6aTC.23/04/29(土) 21:21:51
- 1191◆jG/Re6aTC.23/04/29(土) 21:23:49
- 1201◆jG/Re6aTC.23/04/29(土) 21:25:23
ちなみにこのcreate_all処理は作ろうとしているテーブルがすでに存在していた場合はスルーされるらしい
なのでそのまま書いてても安心 - 1211◆jG/Re6aTC.23/04/29(土) 21:27:15
- 1221◆jG/Re6aTC.23/04/29(土) 21:31:47
- 1231◆jG/Re6aTC.23/04/29(土) 21:36:55
- 1241◆jG/Re6aTC.23/04/29(土) 21:39:20
- 1251◆jG/Re6aTC.23/04/29(土) 21:41:47
うーん...
挿入しようとした情報が足りてないのかな
しかしidはautoincrementなので要らんと思うのだが - 1261◆jG/Re6aTC.23/04/29(土) 21:43:34
- 1271◆jG/Re6aTC.23/04/29(土) 21:45:26
うーん駄目みたい
- 1281◆jG/Re6aTC.23/04/29(土) 21:46:57
- 1291◆jG/Re6aTC.23/04/29(土) 21:53:55
- 1301◆jG/Re6aTC.23/04/29(土) 21:55:48
- 1311◆jG/Re6aTC.23/04/29(土) 21:58:03
- 1321◆jG/Re6aTC.23/04/29(土) 23:47:30
- 1331◆jG/Re6aTC.23/04/29(土) 23:55:18
- 1341◆jG/Re6aTC.23/04/29(土) 23:56:41
- 1351◆jG/Re6aTC.23/04/30(日) 00:02:32
- 1361◆jG/Re6aTC.23/04/30(日) 00:03:13
- 1371◆jG/Re6aTC.23/04/30(日) 00:04:47
キリが良いので今日はここまでにします
明日はアプリ用のDBを作ってそこにデモデータを準備
さらにAPIと連携してDBのデータをアプリ画面に出すとこまで行きたいですね
引き続きご意見ご感想ご要望アドバイスお待ちしております - 138二次元好きの匿名さん23/04/30(日) 00:11:22
IT系に就職考えてるのでかなりありがたいスレ もっと早く気付きたかった
- 1391◆jG/Re6aTC.23/04/30(日) 00:27:06
- 1401◆jG/Re6aTC.23/04/30(日) 10:02:14
保守
- 141二次元好きの匿名さん23/04/30(日) 19:17:02
- 1421◆jG/Re6aTC.23/04/30(日) 19:33:31
見てくれてありがとう!
そして残念だったね…
個人的な意見だと基本情報とアプリ作成は結構畑が違うと思う(基本情報は情報世界のルール中心、アプリ作成はそのルール前提で動くもの中心)
ただこれからちょっと先でやるつもりのアプリコンテナを動かす基盤…所謂インフラ構築は結構参考になるかも
IPアドレスやhttps、ゾーニングなどののセキュリティとか実際に手で構築すると結構腑に落ちる
何か答えられることがあれば力になりたいから質問は遠慮なくね
- 1431◆jG/Re6aTC.23/04/30(日) 20:37:16
出先から戻ったので続きやりまーす
テーブルが作れることが分かったので次はデモデータに準じたテーブルを作るところからですね - 1441◆jG/Re6aTC.23/04/30(日) 21:13:43
- 1451◆jG/Re6aTC.23/04/30(日) 21:14:49
- 1461◆jG/Re6aTC.23/04/30(日) 21:19:00
- 1471◆jG/Re6aTC.23/04/30(日) 21:19:56
- 1481◆jG/Re6aTC.23/04/30(日) 21:21:35
- 1491◆jG/Re6aTC.23/04/30(日) 21:23:22
- 1501◆jG/Re6aTC.23/04/30(日) 21:24:39
- 1511◆jG/Re6aTC.23/04/30(日) 21:27:11
- 1521◆jG/Re6aTC.23/04/30(日) 21:32:26
- 1531◆jG/Re6aTC.23/04/30(日) 21:36:09
- 1541◆jG/Re6aTC.23/04/30(日) 21:38:40
- 1551◆jG/Re6aTC.23/04/30(日) 21:47:41
よく考えたら賞味期限はDateTime(時分秒つき)じゃなくてDate(年月日のみ)でも良い気がしてきたな
うーんでも午前中までとかいう指定もたまに見るな
変えようと思ったけどそのままにしとこう - 1561◆jG/Re6aTC.23/04/30(日) 21:56:56
- 1571◆jG/Re6aTC.23/04/30(日) 22:01:09
- 1581◆jG/Re6aTC.23/04/30(日) 22:03:38
- 1591◆jG/Re6aTC.23/04/30(日) 22:04:56
ホントは名称とかも外部キー参照にして正規化するのが一番いいんだろうけどとりあえずこのままでいいかな...
パフォーマンスに課題が出た時に考えよう - 1601◆jG/Re6aTC.23/04/30(日) 23:10:21
- 1611◆jG/Re6aTC.23/04/30(日) 23:10:58
- 1621◆jG/Re6aTC.23/04/30(日) 23:41:12
あとはこの処理をWebAPI(fastapi)側に持っていくだけですね
しかしこれを既存構成にもっていこうとすると幾つかの解決しないといけない課題がありますね
順に解決していきましょう - 1631◆jG/Re6aTC.23/04/30(日) 23:43:45
まずは「もともとのFastAPIコンテナイメージにはoracledbやsqlalchemyモジュールは存在しない」という点
さっきは手動でインストールしましたがFastAPIコンテナは本来自動起動なのでインストールする間もなく起動し、そしてモジュールがないのでエラーになってしまいます
これを解決する方法はズバリ「必要なモジュールが既に入ったオリジナルコンテナイメージを作る」です - 1641◆jG/Re6aTC.23/04/30(日) 23:46:21
- 1651◆jG/Re6aTC.23/04/30(日) 23:48:20
- 1661◆jG/Re6aTC.23/04/30(日) 23:51:26
- 1671◆jG/Re6aTC.23/04/30(日) 23:54:40
- 1681◆jG/Re6aTC.23/04/30(日) 23:57:21
- 1691◆jG/Re6aTC.23/05/01(月) 00:00:55
よく見たらファイルのスペルミスっとる!
英語苦手なのばれちゃう!!!!
正しくは「requirements.txt」ですね... - 1701◆jG/Re6aTC.23/05/01(月) 00:03:08
- 1711◆jG/Re6aTC.23/05/01(月) 00:04:44
- 1721◆jG/Re6aTC.23/05/01(月) 00:06:48
- 1731◆jG/Re6aTC.23/05/01(月) 00:09:59
- 1741◆jG/Re6aTC.23/05/01(月) 00:17:22
- 1751◆jG/Re6aTC.23/05/01(月) 00:20:32
- 1761◆jG/Re6aTC.23/05/01(月) 00:22:37
- 1771◆jG/Re6aTC.23/05/01(月) 00:24:41
- 1781◆jG/Re6aTC.23/05/01(月) 00:26:36
- 1791◆jG/Re6aTC.23/05/01(月) 00:27:21
キリがいいので今日はここまで
最安値や最高値など欠けている部分を処理するのはまた次ですね
お疲れ様でしたー
引き続きご意見ご感想ご質問アドバイスお待ちしております - 1801◆jG/Re6aTC.23/05/01(月) 12:18:00
保守
- 1811◆jG/Re6aTC.23/05/01(月) 19:06:41
無料でWebアプリを作るRTA(リアル 楽しく あにまんプログラミング)はぁじまぁるよー
早速再開です - 1821◆jG/Re6aTC.23/05/01(月) 21:12:58
最安値とかを出したいのだけどその前に昨日書いた処理がもっといい感じに書ける気がしたので手を入れてみる
- 1831◆jG/Re6aTC.23/05/01(月) 21:23:25
- 1841◆jG/Re6aTC.23/05/01(月) 21:25:17
- 1851◆jG/Re6aTC.23/05/01(月) 21:28:04
- 1861◆jG/Re6aTC.23/05/01(月) 21:30:48
- 187二次元好きの匿名さん23/05/01(月) 21:30:52
実際、pandasは中身を理解していたら、データの取扱い周りの面倒なアルゴリズムをショートカット出来るから強いんですよね。良く解析でお世話になります。
- 188二次元好きの匿名さん23/05/01(月) 21:33:13
基本情報
午前:情報関連の基礎知識や計算知識、トレンドの問題
午後:基本的なアルゴリズムを読み解く問題
午前は基本的な知識を何度も反復。
午後はアルゴリズム中心に今年度から変更になったのでアルゴリズムの流れ理解が必要。
そんな具合だから基礎的なアルゴリズムを練習するのは良い勉強だよ。
- 1891◆jG/Re6aTC.23/05/01(月) 21:35:12
- 1901◆jG/Re6aTC.23/05/01(月) 21:39:28
- 1911◆jG/Re6aTC.23/05/01(月) 21:42:25
- 1921◆jG/Re6aTC.23/05/01(月) 22:35:59
- 1931◆jG/Re6aTC.23/05/01(月) 22:38:00
- 1941◆jG/Re6aTC.23/05/01(月) 22:42:39
- 1951◆jG/Re6aTC.23/05/01(月) 22:43:01
キリがいいのでこのスレはここまでにしようと思います
次スレを立ててきますね - 1961◆jG/Re6aTC.23/05/01(月) 22:47:56
次スレを立てました
無料でWebアプリを作ろう_003.py|あにまん掲示板## 概要タイトルの通りWebアプリを作ろうと四苦八苦するスレ主の様子を観察し意見やアドバイスまたは茶々をいれてくれると嬉しいスレです一人でやってるとサボったりエタったりしそうなのでスレ立ててみました…bbs.animanch.comここまでお付き合いいただきありがとうございました
次スレもよろしくお願いします
- 197二次元好きの匿名さん23/05/01(月) 22:49:39
おつかれー!完走がんばれ!!
I watch you! - 1981◆jG/Re6aTC.23/05/02(火) 03:26:51