
ãé åžãPython Flask WEBãµãŒããŒãã³ãã¬ãŒãäœã£ã ïœDB/ãã°ã€ã³/Googleãã°ã€ã³/æš©é/Vue3/ã¢ããããŒãçïœ
ããã«ã¡ã¯Rcatã§ãã
ä»åã¯ãPython Flaskã®WEBãµãŒããŒãã³ãã¬ãŒããäœããŸããã®ã§ç޹ä»ããŸãã
ãã®ãã³ãã¬ãæžãæããããšã§ãäœåãå¹çããäœæããããšãã§ããŸãã
å®ã¯è¶
倧æã«äœã£ããã³ãã¬ããã£ããã§ãããæè¿ã®èªåã®ååã«åããåæ§ç¯ããããšã«ããæãã§ãã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ããã
åã£ãŠããªãã³ã¡ã³ãã¯åé€ããŸãã
æŠèŠ
WEBãµãŒããŒãã³ãã¬ãŒãã£ãŠäœ?
ãã®åã®éãWebãµãŒããŒãäœãããã®ãã³ãã¬ãŒãã«ãªããŸãã
WebãµãŒããŒãæ¡çšããããšã§ã以äžã®ãããªããšãã§ããããã«ãªããŸãã
ãã©ãŠã¶ã§ã¢ã¯ã»ã¹ã§ãã
ããœã³ã³ããã§ãã¹ããããã§ãæäœã§ããJavaScriptã䜿ãã
åçãªæäœç»é¢ãäœãããšãã§ããŸãããã¯ã°ã©ãŠã³ãã§ãã€ã§ããã¹ã
ããœã³ã³ããç«ã¡äžããŠããã°ããã€ã§ãã©ãã§ã䜿ããããŒã«ã«ãªããŸãã
䜿ãé
åºæ¬çã«å°èŠæš¡ãªããŒã«ã«WEBæäœç»é¢ãå²ãåœãŠãããšãç®çãšããŠããŸãã
WebãµãŒããŒã䜿ã£ãŠããäŸãšããŠã¯ã以äžã®ãããªèšäºãæããããŸãã
Rcatãµã€ã
äžå¿ã¬ãã§äœ¿ã£ãŠã¿ãäŸãããçšåºŠæ¥µããã°ããããã®ãå¯èœãããã¯ã€ã³ãã©åããããããªããšã ãâŠã
ããã¯JavaScriptã®ãã¬ãŒã ã¯ãŒã¯ã掻çšããŠPythonã§ã¯èŠæãªéšåã¯JavaScriptã«äžžæãããäŸã§ããã
Pythonã¯AIã«åŒ·ãèšèªã§ããããã«ããã§WebãµãŒããŒãšçµã¿åãããããšã§ãèªåå°çšã®ãã£ãããµãŒããŒãç«ãŠãããšãã§ããŸãã
WebãµãŒããŒãOSã®ã³ãã³ãã代è¡ããŠå©ãããšã§ãããœã³ã³ã24æé鳿¥œãã¬ã€ã€ãŒã«ãããšãããã®ã§ãã
ã¹ããããã¢ã¯ã»ã¹ããŠæäœã§ããã®ãé
å
ã¡ãã£ãšæã®åç»ã§ãããWebãµãŒããŒã£ãŠäœã©ãããä»çµã¿ãªã®ãšããæ¹ã¯ãã¡ããåèã«ãªããŸããç§ã®ã§ããã
ãšããããã§çµè«ã§ããããããã£ãWebãµãŒããŒãããŒã¹ãšããããŒã«ãäœãéã«ãæ¯åãµãŒããŒãäœã£ãŠãããšé¢åãªã®ã§ããã³ãã¬ãŒããšããŠä¿æããŠããããã§ãããã¡ãã£ãšå 容ãå€ããªã£ãŠããŸããã®ã§ãæŽæ°ããŸãããšããã®ãä»åã®èšäºã«ãªããŸãã
ãã³ãã¬ãŒã玹ä»
ã§ã¯ããŸãä»åã®ãã³ãã¬ãŒãã¯ã©ã®ãããªãã®ãªã®ã玹ä»ããŠããããšæããŸãã
ã·ã³ãã«ãªãœãŒã¹
WebãµãŒããŒãšããŠãã¡ã€ã«ãé
ä¿¡ããããAPIãäœãæã®ãã³ãã¬ãŒããšããŠæ¢ã«ã³ãŒããå
¥ã£ãŠããŸãã
APIã®ãã³ãã¬ãŒã颿°ãã³ããã§å¢ããã ãã§ç°¡åã«æ§ç¯ã§ããŸãã
ãã°ã€ã³
APIã®ãã³ãã¬ãŒãã³ãŒãã¯2ã€ããã1ã€ã¯ãã€ã§ã䜿ãããã®ã
ãã1ã€ã¯ãã°ã€ã³ããŠããªããšäœ¿ããªããã®ãšããŠããŸãã
ãã®ããã®ãã°ã€ã³çšã®APIãèšå®ãå®åããŠããŸãã
ãã¡ãããããªã®ç¥ãã!䜿ããªã!ãOKã
Googleã§ãã°ã€ã³
ãã¡ãã®èšäºã§ç޹ä»ããŠããã¢ããããŒãã§è¿œå ãããæ©èœã§ãã
æè¿ããèŠãããGoogleã¢ã«ãŠã³ãã䜿ã£ãŠã»ãã®ãµã€ãã«æ¥œã
ãã°ã€ã³ã§ããæ©èœãç¹ã蟌ã¿ãŸããã
æºåããã§ããã°ãèªèº«ã®ãµã€ããGoogleãã°ã€ã³åã§ããŸãã
ããŒã¿ããŒã¹é£æº
SQLiteã䜿çšãããµãŒããŒã«äŸåããªãããŒã¿ããŒã¹ãå©çšã
ãã³ãã¬ãŒãã§ã¯ãŠãŒã¶ãŒèªèšŒã«ãã䜿ããªãã®ã§ããèªç±ã«æ¡åŒµããããšãã§ããŸãã
ããŒã¿ããŒã¹ã§ãããŒã¿ãèªã¿æžãããããã®ã³ãŒããå
¥ã£ãŠããã®ã§æ¥œã
ã§ãã
ãã¡ãããããªã®ç¥ãã!䜿ããªã!ãOKã
æš©é
ãŠãŒã¶ãŒã«å皮暩éãå²ãæ¯ããããã«ããã¢ã¯ã»ã¹ãAPIã®å®è¡å¯åŠã決å®ããããšãã§ããŸãã
å
容ã¯èªç±ã«æ¡åŒµå¯èœã§ãã
ãã¡ãããããªã®ç¥ãã!䜿ããªã!ãOKã
APIããŒã䜿çšããAPI
ããããŒã«ä»äžããã¿ã€ãã®APIããŒãçæããŠãå€éšããã°ã©ã ãªã©ããèªèšŒããAPIãžã®ã¢ã¯ã»ã¹ã管çã§ããŸãã
ãã¡ãããããªã®ç¥ãã!䜿ããªã!ãOKã
vue3ãã³ãã¬ãŒã
ããã©ã«ãã§vue3ã䜿ã£ãããã³ããšã³ããäœæããããã®ã³ãŒããå
¥ã£ãŠããŸãã
掻ãããæ¹ã¯ãã¡ãã䜿ãããšã§ãããæ¬æ Œçã§æè»ãªããã³ããšã³ããäœæããããšãã§ããŸãã
ãã¡ãããããªã®ç¥ãã!䜿ããªã!ãOKã
å°å ¥æ¹æ³
åºæ¬çãªèãæ¹
æ¬äœã¯ããã¹ãŠã®HTMLããŒãžãèªèšŒãªãã§è¿åŽãããã衚瀺ããããã®APIã«èªèšŒãèšããããšã§ãããŒã¿ã衚瀺ãããªãæ¹æ³ããšã£ãŠããŸãã
ãã®ãããHTMLçææ®µéã§ããŒã¿ãåã蟌ãããæ¹ã«ã¯åããŸããã
ããŠã³ããŒããšå±é
æäžéšããããŠã³ããŒããããã¡ã€ã«ã奜ããªãšããã«é
眮ããŸãã
äžèº«ã¯ãããªæãã§ãã

ãŸãæåã«å®è¡ç°å¢ãäœããŸããcareate.batãããã«ã¯ãªãã¯ããŸãã
â»äœè
ã®ç°å¢ã¯Python3.11ãš3.12ã§ãã
venvã®äœæãšã©ã€ãã©ãªã€ã³ã¹ããŒã«ãè¡ãããŠèœã¡ãŸãã

å ±éèšå®
.envã®èšå®ã
ããã§ããŒãçªå·ãããã¥ã¡ã³ãã«ãŒããèšå®ã§ããŸãã

DOCUMENT_ROOT
å ¬éããHTMLã®æ ŒçŽãã©ã«ãã§ã
vueã䜿ãå Žåã¯ãã®ãŸãŸã§OKPORT
ããŒãçªå·ã§ãã奜ãã«èšå®ããŸããããPASS_PEPPER
ãŠãŒã¶ãŒå/ãã¹ã¯ãŒãæ¹åŒã§ãã°ã€ã³ããéã«äœ¿ãããããŒãä»»æã®æååãUPLOAD_FOLDER
ã¢ããããŒããŒã䜿ãå Žåã§ãã©ã«ãåãå€ãããšãã«äœ¿çšAPIKEY_EXPIRATION_DATE
APIããŒçºè¡æ©èœã®æå¹æéã§ãã0ã§ç¡æéã®ããŒãäœããŸããGoogleãã°ã€ã³é¢é£
äžèšã¯GCPã§èªèšŒç»é¢ãäœã£ãéã«ååŸã§ããã¯ã©ã€ã¢ã³ãæ å ±ãèšè¿°ããå Žæã§ãããã®æ©èœã䜿ããªãå Žåã¯æªå ¥åãGOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
ãã°ã€ã³æ©èœã䜿ãããå Žå
dbinit.pyãç·šéããŸãã
äžçªäžã«ãŠãŒã¶ãŒãå®çŸ©ãããšããããããŸãã®ã§ããŠãŒã¶ãŒåãšãã¹ã¯ãŒããèšå®ããŸãã
ãã®æ¬¡ãæš©éã§ããåãŠãŒã¶ãŒã«å¯ŸããŠæš©éçªå·ã§æå®ããŸããè€æ°ã®è¿œå ãå¯èœã§ãã
ãã®äžã¯æš©éçªå·ã«å¯Ÿå¿ããæš©éåã§ãããªããŠãããã§ããå¿ãããšæ²æšã§ãã
æš©é0-2ã¯ãã§ã«äœ¿ã£ãŠããŸãããã以å€ãªãèªç±ã«è¿œå ããããšãã§ããŸãã
GOOGLE_USERSã¯Googleã§ãã°ã€ã³ã䜿ãå Žåã®èšå®ã§ããããã«ããã¡ã¢ãã ããã°ã€ã³ã§ããŸãããã以å€ã¯è¹Žãä»çµã¿ã§ãã

ãã®åŸdbinit.batãå®è¡ãããšããŒã¿ããŒã¹ãäœæãããŸãã

ããŒã¿ã¯ãdbãã©ã«ãã®server.dbã®äžã«å
¥ã£ãŠããŸãã
ç¥èã®ããæ¹ã¯çŽã«æžãæããŠããã£ãŠãOKãSQLiteã§ãã
ãã¹ã¯ãŒãã¯äžå¿ããã·ã¥åããŠããŸãããå
¬éãåæãšããŠããªãã®ã§ãéµå°åºãŸã§ã¯ããŠãŸããã

ããã³ããšã³ã ïœèªåã§æžããHTMLã眮ãå Žåïœ
æ§ç¯
奜ããªãã©ã«ãã«ããã¥ã¡ã³ãã«ãŒããåœãŠãŠãã ããã
æ¢å®ã®.envã®èšå®ã§ã¯wwwãã©ã«ãã䜿ãããã«ããŠããŸããã³ã¡ã³ãè§£é€ããŠãããŠããã°é
ä¿¡ãããã¯ãã
ããã³ããšã³ã ïœVue3ã䜿ãå Žåïœ
æ§ç¯
webãã©ã«ããvueã®ãããžã§ã¯ãã§ãã
ãã§ã«ãã³ãã¬ãŒãã¯æ§ç¯æžã¿ãšãªã£ãŠããŸãã

æåã«vueã®ã©ã€ãã©ãªãå
¥ããŸãã
node.jsãå
¥ã£ãŠããããšã確èªã®äžãnpn installãå®è¡

ããã«ãnpm run devãå®è¡ããã°ãããã³ããšã³ãã ãã®æ€èšŒãµãŒããŒãèµ·åã§ããŸãã
â»Flaskã®APIã«ã¢ã¯ã»ã¹ã§ããªãã®ã§åºæ¬äœ¿ããŸããã

ããŒãžã®äœæ
åæã§ã¯ããããããŒãžãšãã°ã€ã³ãAPIããŒçºè¡ãã¢ããããŒããããã·ã¥ããŒãããã¹ã¯ãŒã倿Žãå©çšèŠçŽç»é¢ãå
¥ã£ãŠããŸãã
ããããã³ããããŠå¥œããªããŒãžãå¢ãããŠãã ããã

äŸãã°ãã¢ããããŒãã®äžèº«ã¯ãã¡ãã§ããäœããªãã®ã§ã³ããã«ããã¿ãªã
ãªããããã§ã¯vueã®æ§æã«ã¯è§Šããªãããæžãæ¹ã®è§£èª¬ã¯ãããŸããã

å¢ãããããã«ãŒã¿ã®èšå®ãããŸããsrc/router/index.jsã§ãã
æ¢åã®ããŒãžããŸãããŠè¿œå ããŸãã
äŸãã°ãã°ã€ã³ãšAPIããŒçºè¡ããããªæãããã°ã€ã³æžã¿ã§ãªããšå
¥ããªãããŒãžã¯metaã®è¡ãå
¥ããŠãããšãåæã«ãã°ã€ã³ã«ãªãã€ã¬ã¯ãããŸãã

åºæ¥äžãã£ãããnpm run buildã§ãã«ãããŸãã
ããã§çæãããdistãã©ã«ããFlaskãåç
§ããä»çµã¿ã§ãã

componentsã«ã¯ãã°ã€ã³ã®æ¬äœãããã¿ãŒãªã©ã®éšåãå
¥ã£ãŠããŸãã
ç¹ã«ããã¿ãŒã¯Rcat999ã®ãŸãŸãªã®ã§ãæžãæããªããšç§ã®ãµã€ãã£ãŠããšã«ãªã£ã¡ãããŸãw

ãµãŒããŒåŽ
察象ããŒã¿
ãµãŒããŒåŽã¯main.pyã§ãã
ãããç·šéããŠäœ¿ããŸãã

æžãæã察象ã¯130è¡ç®çšåºŠã®InternalFlaskServerã¯ã©ã¹ã§ãã
ãã®äžã«ã¡ãœãããå®çŸ©ããŠããããšã§ã«ã¹ã¿ãã€ãºããŸãã

APIã®è¿œå
APIã¯ããã«ãã2ã€ã®é¢æ°ãè€è£œããŠå¢ãããŸãã

ProtectedPOST_APIã®æ¹ã¯ããã°ã€ã³å€å®ä»ãã®ãã³ãã¬ãŒãã§ãPOST_APIã¯åçŽãªAPIã§ãã
çšéã«å¿ããŠè€è£œããŠäžããã
äŸãã°ãã¡ãã§ç޹ä»ããŠããããŒã«ããã®ãã³ãã¬ãŒãã䜿ã£ãŠããããã®ãããªå®è£
ã«ãªã£ãŠããŸãã
ãã°ã€ã³ããŠãããšãã ãäžèº«ã®ããjsonBodyãè¿ãæãã§ããã

APIããŒèªèšŒAPI
protected_key_apiãã³ããããŠäœ¿ããŸãã
APIããŒãæ£èŠã®ãã®ã§ããã°ãããŒæ
å ±ãè¿ãããŸãã
æ
å ±ã«ã¯ãŠãŒã¶ãŒåãšããŒã¿ã€ããå«ãŸããŸãã

ãã®APIãžã®ã¢ã¯ã»ã¹æ¹æ³ã¯ãæ«å°Ÿã«ã³ãŒãããŸãšããŠãããŸãã®ã§åèã«ããŠãã ããã

APIããŒã®ååŸ
ããã©ã«ãã®çºè¡ç»é¢ããçºè¡å¯èœã§ãã
æ å
ã¯ã³ã³ããŒãã³ããªã®ã§ããèªç±ã«ç§»æ€ããŠãã ããã
çºè¡ã«ã¯ç®¡çè
ãçºè¡æš©éãå¿
èŠã§ãã

çºè¡æžã¿ããŒã¯ããŒã¿ããŒã¹ã§ç®¡çãããŸãã

ã¢ããããŒã
ãã¡ã€ã«ã®ã¢ããããŒãã®ãšã³ããã€ã³ããå®çŸ©æžã¿ã§ãã
ããã©ã«ãã§ã¯ç®¡çè
ãã¢ããããŒãæš©éããªããšè¹Žãä»çµã¿ã§ãã

ã¢ããããŒããŒã®ããã³ããã³ã³ããŒãã³ãã§ãæ ã®éšåãå®å
šã«ç¬ç«ããŠããŸãã
奜ããªãšããã«ç§»æ€ããŠäœ¿ããŸãã

DBãžã®ã¢ã¯ã»ã¹æ¹æ³
DBãžã®ã¢ã¯ã»ã¹ã¯ãå°çšã®ã¯ã©ã¹ãçšããŠããã®ã§éåžžã«ç°¡åã«è¡ãããšãã§ããŸãã
ã°ããŒãã«ã§ã€ã³ã¹ã¿ã³ã¹æžã¿ãªã®ã§ããã€ã§ã䜿ããŸãã
æ¬äœã¯db/dbmanager.py

exec_query_param
第äžåŒæ°ãSQLã第äºåŒæ°ããã©ã¡ãŒã¿ã®èŸæžã第äžåŒæ°ãèªã¿åããã©ã°ã第ååŒæ°ãã³ãã¯ã¿ã§ãã
SELECTç³»SQLã®å Žåã¯fetchallãTrueã«ãããšãèŸæžã®ãªã¹ãã§ããŒãã«ãåŸãããŸããrecords[0]["username"]ã®ãããªæãã
ãã©ã¡ãŒã¿ã¯SQLå
ã«ãããã¬ãŒã¹ãã«ãã眮æããŸãã
äžèšã¯ãŠãŒã¶ãŒæ
å ±ååŸSQLã®äŸã§ãã

ãã©ã³ã¶ã¯ã·ã§ã³ã䜿ãå Žåã¯ãäºåã«ã³ãã¯ã·ã§ã³ãååŸã®äžã第ååŒæ°ã«æž¡ããšãã®é¢æ°ã䜿ãããšãã§ããŸãã
ãã¡ããèªåã§å
šéšæžããŠãOKã§ããã
DBãçŽæ¥ç·šéãã
çŽæ¥ç·šéããå Žåã¯ãA5:SQL Mk2ãªã©ãããããã§ãã
SQLiteã«ã察å¿ããŠããã®ã§ãGUIã§ç°¡åã«æäœã§ããŸãã


E-Rå³
åæã®æ§æããã¡ãã
ãŠãŒã¶ãŒãšæš©é管çåšããšãã°ã ãã§ãã

ãŸãšã
ä»åã¯Flaskã䜿ã£ãWEBãµãŒããŒããŒã«ã®ãã³ãã¬ãŒããäœæããŸããã
è¶³ããªãæ©èœã¯éæè¿œå ããŠäœ¿ããããããŠãããŸããã!
ãšããããã§ãã£ããæ¬¡å䜿ãäºå®ã
ããã§ã¯ãŸããäŒãããŸããã
é åžæ å ±
é åžURL
以äžã®URLããé
åžããŠããŸãã
å©çšèŠçŽã«åæã®äžãå©çšãã ããã
é åžæ å ±
远å ã®ããŒã¯ãŒãã«ã€ããŠã¯äžèšãã確èªå¯èœã§ã
ãªã³ã¯é
ææ³æçš¿ãã©ãŒã
ã³ã¡ã³ãã¯å ¬éã§æ¥ãããã!! Rcatã ãã«éããã人åã