ã¯ããã«
æ®æ®µã¯ç©æµãã©ãã¯ãã©ã€ããŒãããªããPythonåŠç¿ãããŠããtosane932ã§ãã
å°ãåã«äœèª¿ã厩ããããœã³ã³ã䜿ã£ãéçºäœæ¥ãäžæçã«äŒãã§ããææããããŸããã
ãã®ãšãã
ããã£ããç«ã¡æ¢ãŸããªãããããŸã§ååã«åãçµããŠããªãã£ãPythonã®åºç€ç¥èãåŠã³çŽããŠã¿ããã
ãšæã£ãããšãããã®ã·ãªãŒãºãå§ãããã£ããã§ãã
çŸåšã¯äœèª¿ãæ»ããéçºäœæ¥ãåéããŠããŸãããåºç€ãèªåã®èšèã§èª¬æã§ããããã«ããããšã¯åŒãç¶ã倧åã«ããŠããŸãã
ä»åãææã«ããã®ã¯ãåãPythonåŠç¿ãå§ããåæããçŸåšé²è¡åœ¢ã§éçºãç¶ããŠããããŒã«ãªãŒåã売äžç®¡çã¢ããªã
ð sales_data_app ð¥
ã§ãã
ð¹ ãããŸã§ã®åŠã³æ¹
ãããŸã§åã¯ã
ãäœããããã®ãäœãã
â
ãåãããªãããšãåºãŠããã
â
ããã®éœåºŠèª¿ã¹ãã
ãšãã ãã¢ã°ã©åŒåŠç¿æ³ð¹ã ã§åŠãã§ããŸããã
ã¢ã°ã©åŒåŠç¿æ³ã«ã€ããŠã¯ããã¡ãã®èšäºã«ãŸãšããŠããŸãã
æç§æžãæåããé çªã«é²ãããšããããã
äœããããã®ãžåãã£ãŠé²ã¿ãéäžã§èŠã€ãããåãããªãããããã®éœåºŠæã£ãŠããã
ãããªåœ¢ã§ãããŸã§éçºããŠããŸããã
ãã®çµæãFlaskãPostgreSQLãDockerãpytestãGitHub Actionsãªã©ãå¿
èŠã«ãªã£ãæè¡ãå°ããã€è§Šããªãã sales_data_app ãè²ãŠãŠããŸããã
äžæ¹ã§ãã²ãšã€æ°ã«ãªã£ãŠããããšããããŸãã
ããã¯ã
å®éã«äœ¿ã£ãããšã®ããã³ãŒãã§ããããªãããæžãã®ïŒããšèããããšããèªåã®èšèã§ååã«èª¬æã§ããªãéšåãããããšã
ã§ãã
ð° ãã®ã·ãªãŒãºã§ããããš
ðsales_data_app ã®å®éã®ã³ãŒããææã«ããŠã
- ãã®ã³ãŒãã¯äœãããŠããïŒ
- ããã§äœ¿ãããŠããPythonã®åºç€ç¥èã¯äœïŒ
- ãªããã®æžãæ¹ã«ãªã£ãŠããïŒ
- å€ãæ¡ä»¶ãå€ãããšãã©ãåãïŒ
- Pythonãã®ãã®ã®æ©èœãšãFlaskãªã©ã®ã©ã€ãã©ãªã®æ©èœã¯ã©ããéãïŒ
ãšãã£ãããšããäžã€ãã€ç¢ºèªããŠãããŸãã
宿ã³ãŒããæèšããã®ã§ã¯ãªããã³ãŒããèŠããšãã«åŠçã®æµããèªåã§è¿œããããã«ãªãããšãç®æããŸãã
ð» ãã®ã·ãªãŒãºã§ã¯ãæžãããããèªãã
ãã®ã·ãªãŒãºãå§ããåœæã¯ãããœã³ã³ã䜿ã£ãæ°ããæ©èœã®å®è£ ããã£ããäŒã¿ã
ã³ãŒããèªãã§ãçè§£ããŠãèªåã®èšèã§èª¬æã§ããããã«ãªãããš
ãåªå ããŠããŸããã
çŸåšã¯éçºäœæ¥ãåéããŠããŸããããã®ã·ãªãŒãºã§ã¯åŒãç¶ãã
ãå®éã«äœ¿ã£ãŠããã³ãŒããèªãã§ãPythonã®åºç€ãžæ»ãã
ããšã倧åã«ããŠãããŸãã
幞ããsales_data_app ã«ã¯ãããŸã§èªåãå®éã«éçºããŠããã³ãŒãããããŸãã
ã€ãŸããæ°ããç·Žç¿åé¡ãçšæããªããŠãã
ããã®ã³ãŒããèªåã¯æ¬åœã«èª¬æã§ããïŒã
ãšããææããã§ã«ç®ã®åã«ãããŸãã
ð 1åèšäºã«ããããçè§£ãããã§ã¯ãããŸãã
ãã®ã·ãªãŒãºã§ã¯ãèšäºãæžãããããšãã£ãŠã
ãã¯ãããã®å 容ã¯å®å šã«çè§£ããŸããïŒã
ãšã¯èããŸããã
äžåºŠèª¬æã§ããŠããæéãçµãŠã°å¿ãããããããŸããã
åãä»çµã¿ãå¥ã®ã³ãŒãã«åºãŠãããšããæ°ã¥ããªããããããŸããã
å°ã圢ãå€ãã£ãã ãã§åãããªããªãå¯èœæ§ããããŸãã
ã ããããã
ã³ãŒããèŠã
â
èªåã§èãã
â
åºç€ãžæ»ã
â
èªåã®èšèã§èª¬æãã
â
ããäžåºŠã³ãŒããèŠã
ãç¹°ãè¿ããŠãããŸãã
ð¯ ãã®ã·ãªãŒãºã®ãŽãŒã«
ãã®ã·ãªãŒãºã§ç®æãããã®ã¯ã
ã³ãŒããèŠãã ãã§ããããã¯ããããä»çµã¿ã ãªããšèªç¶ã«åŠçã远ããããã«ãªãããšã
ã§ãã
ãã¹ãŠã®æ§æã颿°ãæèšããããšãç®çã§ã¯ãããŸããã
åãããªãã³ãŒãã«åºäŒã£ããšãã«ãã
ãããã¯æ¡ä»¶åå²ã ãªã
ããã®å€ã¯é¢æ°ã®åŒæ°ãšããŠå ¥ã£ãŠããŠãããªã
ãããã§ãªã¹ããç¹°ãè¿ãåŠçããŠãããªã
ãããã¯Pythonãã®ãã®ã§ã¯ãªãFlaskã®æ©èœã ãªã
ãšãå°ããã€èªåã§æŽçã§ããç¶æ ãç®æããŸãã
ð¥ åå¿è ã®æ¹ãäžç·ã«
ä»å㯠ð°Pythonåºç€ ãšããããšã§ãåãšåãããã«ããã°ã©ãã³ã°ã®å匷ãå§ããŠæ°ãæã»ã©ã®åå¿è ã®æ¹ã«ãã
ãèªåããããã¡ãããšèª¬æã§ããããªïŒã
ãšäžç·ã«ã³ãŒããèŠãŠããããããšæããŸãã
åèªèº«ããæããåŽããšããŠæžããšãããããåŠã³çŽãåŽã®äžäººã§ãã
åãããªããšãããäžã€ãã€ç¢ºèªããªãããäžç·ã«çè§£ãæ·±ããŠãããããšæããŸãã
çµéšè ã®æ¹ã«ã¯ãããããªåºç€ããåŠã³çŽããŠããã®ãããšãåå¿è ã®åŸ©ç¿ãæž©ããèŠå®ã£ãŠããã ããã°å¹žãã§ãð¹
ð ããã§ã¯1æéç®
ä»åãããå®éã® sales_data_app ã®ã³ãŒããææã«Pythonåºç€ãèŠãŠãããŸãã
ä»åã®ããŒã
ã倿°ã»ããŒã¿åã»æ¯èŒæŒç®åã»ifæãšã¯ïŒã
åãPythonãå匷ãå§ããé ããæåã«åŠãã ãã®ã®ã²ãšã€ã 倿° ã§ããã
åœæã® sales_data_app ã¯ãä»ã®ããã«PostgreSQLããã°ã€ã³æ©èœãããã·ã¹ãã ã§ã¯ãªãããŸã Excelã·ãŒããžããŒã¿ãä¿åããŠããé ã§ãã
ããããæ°ãæã
ããªãå ãŸã§ã¢ã°ã©åŒã§æã£ãŠããã®ã§ãä»åã¯äžåºŠå ¥å£ä»è¿ãŸã§æ»ã£ãŠã¿ãŸãð¹
ð ä»ååŠã¶4ã€
- 倿°ïŒå€ã«ååãä»ããŠæ±ã
- ããŒã¿åïŒãã®å€ããæåããæŽæ°ããTrue / Falseããªã©ãäœã®çš®é¡ãªã®ã
- æ¯èŒæŒç®åïŒ2ã€ã®å€ãæ¯èŒãã
- ifæïŒæ¡ä»¶ã«ãã£ãŠåŠçãåãã
ãã®4ã€ã¯å¥ã ã®ç¥èã§ã¯ãªããå®éã®ã³ãŒãã§ã¯ã€ãªãã£ãŠäœ¿ãããŠããŸãã
倿°ã«å€ãå
¥ãã
â
ãã®å€ã«ã¯ããŒã¿åããã
â
å€ãæ¯èŒãã
â
æ¯èŒããçµæã«ãã£ãŠifæã§åŠçãåãã
ð¹ ã¢ã°ã©ãããäžç·ã«åŠã³çŽããŸã
ð¹ãDockerãšãpytestãšãæã£ãŠãããããã¶ãé ããŸã§æ¥ã¡ãã£ããªãâŠâŠãã
ð¹ããããäžåºŠå ¥å£ãŸã§æ»ã£ãŠãPythonã®åºç€ããæãçŽããŠã¿ããïŒã
ãã®ã·ãªãŒãºã§ã¯ãã¢ã°ã©ããð¹ãšäžç·ã« sales_data_app ã®å®ã³ãŒããèŠãªããã
ããããPythonã§ã¯ã©ãããæå³ã ã£ãã£ãïŒã
ãäžã€ãã€ç¢ºèªããŠãããŸãã
1. ðР倿°ãšã¯ïŒ
ãŸãã¯æ¬åœã«åºç€ã®åºç€ã倿°ããèŠãŠãããŸãã
sales_data_app ã®ãã°ã€ã³åŠçã«ã¯ãå®éã«æ¬¡ã®ã³ãŒãããããŸãã
username = request.form.get("username", "")
password = request.form.get("password", "")
password_matches = False
ãããªã request.form.get() ãšããèŠæ
£ããªããã®ãåºãŠããŸããããä»ã¯ãããŸã§èããªããŠå€§äžå€«ã§ãã
request.form.get() ã¯Pythonãã®ãã®ã®æ©èœã§ã¯ãªããFlaskã§ãã©ãŒã ããéãããŠããå€ãååŸããããã«äœ¿ã£ãŠããåŠçã§ãã
ä»åã¯ããã®çµæãåãåã£ãŠãã
username = ...
password = ...
ã®éšåã«æ³šç®ããŸãã
äŸãã°ã
username = request.form.get("username", "")
ã§ã¯ã
username
ãšããååã«ã
ãã°ã€ã³ç»é¢ããéãããŠãããŠãŒã¶ãŒå
ãå ¥ããŠããŸãã
ããã倿°ã¯å€ãå ¥ããŠããç®±ããšèª¬æãããŸããã
åã¯ä»åã
å€ã«ååãä»ããŠãããšãã䜿ããããã«ãããã®
ãšçè§£ããããšã«ããŸãã
= ã¯ãåãããšããæå³ã§ã¯ãªã
ããã¯åãæåã«å°ãæ··ä¹±ãããšããã§ãã
password_matches = False
æ°åŠã§ã¯ã
=
ãèŠããšãå·Šå³ãçããããšããæå³ã«èŠããŸãã
ãããPythonã§ã¯ããã® = 㯠代å
¥ ã§ãã
password_matches = False
ã¯ã
password_matchesãšãã倿°ãžFalseãä»£å ¥ãã
ãšããæå³ã«ãªããŸãã
password_matches
â
False
ãã®æç¹ã§ã¯ããŸã ãã¹ã¯ãŒããç §åããŠããªãããã
ç
§ååã®åæå€ãšã㊠False
ãå ¥ããŠããŸãã
å€ã¯ããšããå€ããããšããã
å°ãå
ãèŠããšãåã password_matches ãããäžåºŠç»å ŽããŸãã
password_matches = False
if configured_password_hash:
try:
password_matches = check_password_hash(
configured_password_hash,
password,
)
æåã¯ã
password_matches = False
ã§ããã
ãã®ããšãã¹ã¯ãŒãã確èªããŠã
password_matches = check_password_hash(...)
ãšãç
§åçµæãããäžåºŠ password_matches ã«ä»£å
¥ããŠããŸãã
ã€ãŸãã
æå
password_matches = False
â
ãã¹ã¯ãŒãã確èª
â
ç
§åçµæãpassword_matchesãžå
¥ãã
ãšããæµãã§ãã
å³1ïŒ
sales_data_appã®ç®¡çè ãã°ã€ã³ç»é¢ãå ¥åããããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã¯ãPythonåŽã§username/passwordãšããŠåãåããŸãã
ðž ç»é¢ãšã³ãŒããã€ãªããŠã¿ã
ãã®ç»é¢ã§å ¥åãããŠãŒã¶ãŒåããã¹ã¯ãŒãããè£åŽã®Pythonã§ã¯å€æ°ãšããŠæ±ãããŠããŸãã
ãã°ã€ã³ç»é¢
ããŠãŒã¶ãŒåã
â
username
ãã°ã€ã³ç»é¢
ããã¹ã¯ãŒãã
â
password
ç»é¢äžã§ã¯ãã ã®å ¥åæ¬ã§ããããã®è£ã§ã¯Pythonã®å€æ°ãšããŠæ¬¡ã®åŠçãžæž¡ãããŠããããã§ãã
ð¹ãpassword_matches = FalseâŠâŠãã£ã1è¡ã ãã©ããããã¡ãããšPythonã®åºç€ãªãã ããã
ãããªãã§ãã
ããªãè€éã«ãªã£ãçŸåšã® sales_data_app ã§ããåå°ã«ã¯æåã«ç¿ã 倿° ãæ®éã«äœ¿ãããŠããŸãã
2. ð·ïž ããŒã¿åãšã¯ïŒ
倿°ã«ã¯å€ãå ¥ããŸãã
ãããŠããã®å€ã«ã¯ çš®é¡ ããããŸãã
Pythonã§ã¯ãã®å€ã®çš®é¡ã ããŒã¿å ãšåŒã³ãŸãã
sales_data_app ã®äžã«ãããããããªããŒã¿åãç»å ŽããŠããŸãã
æåå str
å ã»ã©ã®ãã°ã€ã³åŠçã§ãã
username = request.form.get("username", "")
password = request.form.get("password", "")
ãã°ã€ã³ç»é¢ããå ¥åãããã
user_name
ã®ãããªæåã¯ãPythonã§ã¯ æåå ãšããŠæ±ããŸãã
æååã®åã¯ã
str
ã§ãã
äŸãã°ã
"ããã«ã¡ã¯"
"Python"
"é£ãã³"
"ã¯ãã¯ããµã³"
ãã®ãããªæååããŒã¿ããããŸãã
æŽæ° int
ååç»é²åŠçã§ã¯ã次ã®ã³ãŒãããããŸãã
year = int(request.form.get("year"))
month = int(request.form.get("month"))
å³2ïŒååç»é²ç»é¢ã®å¹Žã»æéžæãç»é¢ã§éžãã å€ããPythonåŽã§ã¯
year/monthãšããŠåãåããŸãã
ããã§ã¯ã
2026
9
ã®ãããªæŽæ°ãæ±ããŸãã
æŽæ°ã®åã¯ã
int
ã§ãã
int() ã¯ãå€ãæŽæ°ãžå€æãããšãã«äœ¿ããŸãã
äŸãã°ã
int("9")
ãšãããšã
æååã® "9"
â
æŽæ°ã® 9
ãžå€æãããŸãã
HTMLãã©ãŒã ããéãããŠããå€ã¯ãFlaskã® request.form ã§ã¯æååãšããŠåãåããŸãã
ãã®ãã sales_data_app ã§ã¯ã
month = int(request.form.get("month"))
ãšããŠãåãåã£ãå€ãæŽæ°ãžå€æããŠããåŠçããŠããŸãã
çåœå€ bool
å ã»ã©ç»å Žããã
password_matches = False
ã® False ãå€ã®ã²ãšã€ã§ãã
Pythonã«ã¯ã
True
False
ãšãã2ã€ã®çåœå€ããããŸãã
ãã®åãã
bool
ãšåŒã³ãŸãã
äŸãã°ã
True â æ¡ä»¶ãæãç«ã€
False â æ¡ä»¶ãæãç«ããªã
ãšããå€å®çµæã衚ããšãã«äœ¿ãããŸãã
sales_data_app ã§ã¯ã
password_matches
ã«ãã£ãŠã
å ¥åããããã¹ã¯ãŒããæ£ããã£ããïŒ
ãšããç
§åçµæã True / False ã§æ±ã£ãŠããŸãã
ð sales_data_appã§ãããŸã§ã«åºãŠããããŒã¿å
| ããŒã¿å | Python | sales_data_appã§ã®äŸ |
|---|---|---|
| æåå | str |
ãŠãŒã¶ãŒåããã¹ã¯ãŒããååå |
| æŽæ° | int |
幎ãæãäŸ¡æ Œãè²©å£²æ° |
| çåœå€ | bool |
ãã¹ã¯ãŒããäžèŽããããååãæå¹ã |
ä»ã¯ãŸãã
ãå€ã«ãçš®é¡ãããã
ãšããããšãåããã°OKã§ãã
ð¹ããªãã»ã©ãåãâå€âã§ããæåãªã®ãæ°åãªã®ããTrue / Falseãªã®ãã§çš®é¡ãéãã®ããã
ããã§å€§äºãªã®ã¯ã
Pythonã¯å€ããã¹ãŠåããã®ãšããŠæ±ã£ãŠããããã§ã¯ãªã
ãšããããšã§ãã
3. âïž æ¯èŒæŒç®åãšã¯ïŒ
次㯠æ¯èŒ ã§ãã
å ã»ã©ã
=
ã¯å€ãä»£å ¥ããããã«äœ¿ããšç¢ºèªããŸããã
ã§ã¯ã
2ã€ã®å€ãåããã©ãã
ã確èªãããšãã¯ã©ãããã®ã§ããããïŒ
sales_data_app ã®ãã°ã€ã³åŠçã§ã¯ã次ã®ã³ãŒãããããŸãã
username == configured_username
ä»åºŠã¯ã
==
ã2ã€äžŠãã§ããŸãã
ããã¯ã
å·Šãšå³ã®å€ãåããïŒ
ãæ¯èŒããŠããŸãã
= â å€ã代å
¥ãã
== â å€ãåããæ¯èŒãã
ããã¯åå¿è ã®ãã¡ã¯æ··åããããã®ã§ããã£ããåããŠèŠããŠãããããšããã§ãã
ð¹ããã£ïŒ = ãš ==ãæããã§æ··ä¹±ãããã€ã ã
èŠãç®ã¯äŒŒãŠããŸããã圹å²ã¯ãŸã£ããéããŸãã
< ãš > ãæ¯èŒæŒç®å
ååç»é²åŠçã«ã¯ããããªã³ãŒãããããŸãã
if month < 1 or month > 12:
ãã®äžã«ã¯ã
month < 1
ãšã
month > 12
ãšããæ¯èŒããããŸãã
ããããã
month < 1
æã1ããå°ããïŒ
month > 12
æã12ãã倧ããïŒ
ãšããæå³ã§ãã
äŸãã°ã
month = 9
ãªãã
9 < 1 â False
9 > 12 â False
ã§ãã
äžæ¹ã
month = 13
ãªãã
13 < 1 â False
13 > 12 â True
ã«ãªããŸãã
4. ðŠ ifæãšã¯ïŒ
ãããŸã§ã§ã
倿°
ããŒã¿å
æ¯èŒ
ãèŠãŠããŸããã
ãããããããããã€ãªãããŸãã
ããäžåºŠãå®éã® sales_data_app ã®ã³ãŒããèŠãŠã¿ãŸãã
if month < 1 or month > 12:
logger.warning("Rejected product update with out-of-range month.")
return "æã¯1ãã12ã§æå®ããŠãã ããã", 400
ä»åã®äž»åœ¹ã¯ã
if
ã§ãã
if ã¯ã
ããæ¡ä»¶ãæºãããŠãããããã®åŠçããã
ãšããæ¡ä»¶åå²ã«äœ¿ããŸãã
æ¥æ¬èªã«ããŠã¿ã
if month < 1 or month > 12:
ãæ¥æ¬èªã«ãããšã
ããã
monthã1ããå°ãã
ãŸãã¯
monthã12ãã倧ãã
ãªã
ãšãªããŸãã
or ã¯ã
ã©ã¡ããäžæ¹ã§ãæ¡ä»¶ãæºãããŠããã
ãèŠããšãã«äœ¿ããŸãã
äŸãã°ã
month = 13
ãªãã
month < 1
â
13 < 1
â
False
ã§ããã
month > 12
â
13 > 12
â
True
ã«ãªããŸãã
çæ¹ã True ãªã®ã§ã
if month < 1 or month > 12:
ã®æ¡ä»¶ãæç«ããŸãã
ãããšããã®äžã®åŠçãžé²ã¿ãŸãã
return "æã¯1ãã12ã§æå®ããŠãã ããã", 400
çµæãšããŠãHTTP 400ãšãšãã«ã
æã¯1ãã12ã§æå®ããŠãã ããã
ãšããã¡ãã»ãŒãžãè¿ããŸãã
ð ãªããç»é¢ã§éžã¹ãªãå€ãŸã§ç¢ºèªããã®ïŒ
ããã§å®éã®ç»é¢ãèŠãŠã¿ãŸãã
å³3ïŒæã®éžæè¢ã¯1æã12æãŸã§ãéåžžã®ç»é¢æäœã§ã¯13æã9999æãéžã¶ããšã¯ã§ããŸããã
ð¹ãããïŒ 1æã12æããéžã¹ãªããªããmonth > 12 ã£ãŠç¢ºèªããå¿
èŠãªããªãïŒã
ãããã«ãéåžžã®ç»é¢æäœã ããèŠããšããæããŸãã
ããã sales_data_app ã§ã¯ãç»é¢åŽã§éžæè¢ãå¶éããŠããããšã ããåæã«ã¯ããŠããŸããã
ãµãŒããŒåŽã§ããåãåã£ãå€ãããäžåºŠç¢ºèªããŠããŸãã
if month < 1 or month > 12:
return "æã¯1ãã12ã§æå®ããŠãã ããã", 400
ã€ãŸãã
ç»é¢åŽ
1ã12æã ããéžæã§ãã
â
ãªã¯ãšã¹ãéä¿¡
â
ãµãŒããŒåŽ
æ¬åœã«1ã12ã®ç¯å²ãããäžåºŠç¢ºèªãã
ãšããæµãã«ãªã£ãŠããŸãã
éåžžã®ç»é¢ã§ã¯ã
0æ
13æ
9999æ
ãéžã¶ããšã¯ã§ããŸããã
ããã§ããäœããã®æ¹æ³ã§ç¯å²å€ã®å€ããªã¯ãšã¹ããšããŠéãããŠããå Žåã«ã¯ã
æãåãåã
â
倿° month ã«å
¥ãã
â
intåãžå€æ
â
1ã12ã®ç¯å²ãæ¯èŒ
â
ç¯å²å€ãªãifæãåã
â
HTTP 400ãè¿ããŠåŠçãæ¢ãã
ãšããåŠçã«ãªããŸãã
ãããŸã§æ¥ããšã
if month < 1 or month > 12:
ãšãã1è¡ãã
ãã ã®Pythonææ³ã§ã¯ãªãã
æ³å®ããŠããªãå€ããã®ãŸãŸåŠçããªãããã«ãå®éã®Webã¢ããªã§äœ¿ãããŠããæ¡ä»¶åå²
ã ãšåãããŸãã
ð¡ ç»é¢ã§é²ãã§ããŠãããµãŒããŒåŽã§ã確èªãã
ä»åã®ç»é¢ã§ã¯ãéåžžæäœã§1ã12æããéžæã§ããŸããã
ããããWebã¢ããªã§ã¯ç»é¢ããéãããŠããå€ãç¡æ¡ä»¶ã§ä¿¡çšããã®ã§ã¯ãªãããµãŒããŒåŽã§ãå ¥åå€ã確èªããŸãã
ä»åã¯Pythonåºç€ã®èšäºãªã®ã§ããŸãã¯ã
ããã®ç¢ºèªã« if ãšæ¯èŒæŒç®åãå®éã«äœ¿ãããŠããã
ãšããã«æ³šç®ããŸãã
𧪠ç¯å²å€ã®å€ãéããããã©ãåãïŒ
éåžžã®ç»é¢ãã13æãéžã¶ããšã¯ã§ããŸããã
ãã®ãããä»åã®åŠçã¯ã
ç»é¢ã§13æãéžæãã
â
ãšã©ãŒã«ãªã
ãšãã圢ã§ã¯ç¢ºèªã§ããŸããã
ãããããµãŒããŒåŽãžç¯å²å€ã®å€ãéããããšä»®å®ãããšã
month = 13
13 < 1 â False
13 > 12 â True
â
ifæã®æ¡ä»¶ãæç«
â
HTTP 400
ãšããåŠçã«ãªããŸãã
éã«ã
month = 9
9 < 1 â False
9 > 12 â False
â
ãã®ifæã®äžã«ã¯å
¥ããªã
ãšãªããŸãã
ð¹ããªãã»ã©ãç»é¢ã§ã¯éžã¹ãªããã©ããµãŒããŒåŽã§ã¯ã¡ãããšâããå€ãªå€ãæ¥ããïŒâãŸã§èããŠããã ãã
ãã®ããã«å®éã®ã·ã¹ãã ã®ã³ãŒããèŠããšã
ifæ = æ¡ä»¶åå²
ãšããç¥èã ãã ã£ããã®ãã
ãäœã®ããã«æ¡ä»¶åå²ããŠããã®ãã
ãŸã§èŠããŠããŸãã
ð Guest Demoãå ¬éããŸãã
sales_data_app ã®Guest Demoãå
¬éããŸããã
çŸåšã¯ãã°ã€ã³ç»é¢ãã ãã²ã¹ããã¢ãäœéšããã ãéžã¶ããšã§ãã¢ã«ãŠã³ãç»é²ãªãã§å®éã®ç»é¢ãæäœã§ããŸãã
https://bakery-salesdata.onrender.com/
ä»åã®èšäºã§èŠãŠããPythonã®åºç€ããGuest Demoã®å®éã®ç»é¢ã®è£åŽã§äœ¿ãããŠããŸãã
äŸãã°ãååç»é²ç»é¢ã§ãæããéžãã§éä¿¡ãããšãPythonåŽã§ã¯ã
month = int(request.form.get("month"))
ãšããŠå€ãåãåãã
if month < 1 or month > 12:
return "æã¯1ãã12ã§æå®ããŠãã ããã", 400
ã®ããã«ãåãåã£ãå€ãæ³å®ããç¯å²ã«å ¥ã£ãŠãããã確èªããŠããŸãã
Guest Demoã®ååç»é²ç»é¢
â
æãéžæããŠéä¿¡
â
request.formããå€ãååŸ
â
monthãšãã倿°ãžä»£å
¥
â
intåãžå€æ
â
< ã > ã§å€ãæ¯èŒ
â
ifæã§æ¡ä»¶åå²
ã€ãŸãä»ååŠãã ã
倿°
ããŒã¿å
æ¯èŒæŒç®å
ifæ
ã¯ãç·Žç¿çšã®ãµã³ãã«ã³ãŒãã ãã§ã¯ãªããå®éã«æäœã§ããWebã¢ããªã®åŠçãšããŠäœ¿ãããŠããŸãã
èšäºãèªã¿ãªããGuest Demoãè§Šã£ãŠã¿ããšã
ããã®ç»é¢æäœããè£åŽã§ã¯ãã®Pythonã³ãŒãã«ã€ãªãã£ãŠãããã ã
ãšãç»é¢ãšã³ãŒããçµã³ã€ããªãã確èªã§ããŸãð¹
ð¹ãåŸ ã£ãŠããšããããšã¯âŠâŠã
monthãšãã倿°ããã
â
intåãšããŠæ±ã
â
< ã > ã§æ¯èŒãã
â
æ¯èŒçµæã¯True / Falseã«ãªã
â
æ¡ä»¶ãTrueãªãifæãåã
ð¹ããã£ããŸã§å¥ã ã«å匷ããŠã4ã€ããããã§å šéšã€ãªãã£ãïŒã
ð 4ã€ãã€ãªããŠããäžåºŠèŠã
ä»ååŠãã å 容ããå®éã®ã³ãŒãã§ããäžåºŠã€ãªããŠã¿ãŸãã
year = int(request.form.get("year"))
month = int(request.form.get("month"))
if month < 1 or month > 12:
return "æã¯1ãã12ã§æå®ããŠãã ããã", 400
æåã«èŠããšãã¯ã
äœãããŠããã³ãŒããªãã ããïŒ
ãšãªããããããŸããã
ã§ãä»åã®4ã€ãåè§£ãããšã
month
â
倿°
int(...)
â
æŽæ°åãžå€æ
month < 1
month > 12
â
æ¯èŒ
æ¯èŒçµæ
â
True / False
if
â
æ¡ä»¶ã«ãã£ãŠåŠçãåãã
ãšãªããŸãã
ããããŠäžã€ãã€åè§£ããŠãããšã
if month < 1 or month > 12:
ãšããã³ãŒããã
ã
monthãšããæŽæ°ã®å€ãæ¯èŒããŠã1ã12ã®ç¯å²å€ãªãåŠçãåå²ããŠããã
ãšèªããããã«ãªããŸããã
ð¹ãæåã¯â倿°ãšã¯ïŒâãŸã§æ»ãã®ããããã«æ»ãããããªãšæã£ããã©âŠâŠãã
ð¹ãå®éã® sales_data_app ã§èŠãŠã¿ããšãä»ã®ã³ãŒããåºç€ã®ç©ã¿éãã§åããŠããã ããã
ð 1æéç®ãŸãšã
ä»åãsales_data_app ã®å®ã³ãŒããã4ã€ã®Pythonåºç€ãåŠã³çŽããŸããã
倿°
å€ã«ååãä»ããŠãããšããåŠçã§äœ¿ããããã«ããã
password_matches = False
ããŒã¿å
å€ã«ã¯çš®é¡ãããã
str â æåå
int â æŽæ°
bool â True / False
æ¯èŒæŒç®å
å€åå£«ãæ¯èŒããã
username == configured_username
month < 1
month > 12
ifæ
æ¡ä»¶ãæç«ãããšãã«åŠçãåå²ããã
if month < 1 or month > 12:
return "æã¯1ãã12ã§æå®ããŠãã ããã", 400
ãããŠããã®4ã€ã¯å®éã®ã³ãŒãã®äžã§ã¯ã
倿°
â
ããŒã¿å
â
æ¯èŒ
â
True / False
â
ifæ
ãšã€ãªãã£ãŠäœ¿ãããŠããŸãã
ð€ èªåã§ç¢ºèªããŠã¿ã
æåŸã«ãä»åã®å 容ãèªåã§ã確èªããŠã¿ãŸãã
Q1
次ã®ã³ãŒãã§ã倿°åã¯ã©ãã§ãããïŒ
password_matches = False
ð °ïžçããèŠã
password_matches
ã§ãã
False ãšããå€ã password_matches ãžä»£å
¥ããŠããŸãã
Q2
次㮠= ãš == ã¯äœãéãã§ãããïŒ
password_matches = False
username == configured_username
ð °ïžçããèŠã
= ã¯ä»£å
¥
== ã¯æ¯èŒ
ã§ãã
Q3
month = 13
ã ã£ãå Žåã
month > 12
ã®çµæã¯ã©ããªãã§ãããïŒ
ð °ïžçããèŠã
True
ã«ãªããŸãã
ãã®ããã
if month < 1 or month > 12:
ã®æ¡ä»¶ãæç«ããŸãã
Q4
ã§ã¯ã
month = 9
ã®å Žåã¯ã©ããªãã§ãããïŒ
ð °ïžçããèŠã
9 < 1 â False
9 > 12 â False
ã©ã¡ãã®æ¡ä»¶ã False ãªã®ã§ãä»åã® if ã®äžã«ã¯å
¥ããŸããã
Q5
éåžžã® sales_data_app ã®ç»é¢ã§ã13æãéžæã§ããã§ããããïŒ
ð °ïžçããèŠã
ã§ããŸããã
æã®ãã«ããŠã³ã¯1ã12æãŸã§ã«å¶éãããŠããŸãã
ããã§ããµãŒããŒåŽã§ã¯ã
if month < 1 or month > 12:
ã«ãã£ãŠãåãåã£ãå€ãããäžåºŠç¢ºèªããŠããŸãã
ð¹ 1æéç®ãçµããŠ
ä»åã¯ããªãå ¥å£ãŸã§æ»ã£ãŠã
倿°ã»ããŒã¿åã»æ¯èŒæŒç®åã»ifæ
ãåŠã³çŽããŸããã
ã©ããPythonãåŠã³å§ããé ã«åºãŠããåºç€ç¥èã§ãããå®éã«åããŠãã sales_data_app ã®ã³ãŒãã§èŠçŽããšã
ããã®ç¥èã¯ãå®éã«ã¯ããã§äœ¿ãããŠããã®ãã
ãšæ¹ããŠç¢ºèªã§ããŸãã
ãããä»åããã®ã·ãªãŒãºã§ãã£ãŠã¿ããã£ãããšã§ãã
ãããŸã§å¿ èŠã«ãªããã³ã«èª¿ã¹ãªãããæççã«èº«ã«ã€ããŠããPythonã®åºç€ãã
Pythonåºç€
â
å®éã®ã³ãŒã
â
ç»é¢äžã®æäœ
â
ã·ã¹ãã å
éšã®åŠç
ãŸã§ã€ãªããŠããã
ãããŠåèªèº«ããèšäºãæžãããã«èª¬æããŠã¿ãããšã§ã
ãç¥ã£ãŠããã€ããã ã£ãéšåããèªåã®èšèã§æ¬åœã«èª¬æã§ãããïŒã
ã確èªããŠãããŸãã
ãŸã ãŸã åºç€ã®åŠã³çŽãã¯ç¶ããŸãã
æ¬¡ã®æéããð sales_data_app ã®å®ã³ãŒããææã«ããŠæã£ãŠãããŸãð¹
ðïž åºç€åŠç¿ã·ãªãŒãº
ð«1æéç®
ã倿°ã»ããŒã¿åã»æ¯èŒæŒç®åã»ifæãšã¯ïŒã
ð«2æéç®
ããªã¹ãã»èŸæžã»setã»foræãšã¯ïŒã
ð«3æéç®
ã颿°ã»åŒæ°ã»returnã»é¢æ°ã®åŒã³åºãã»åãã³ããšã¯ïŒã
ð«4æéç®
ãã¢ãžã¥ãŒã«ã»importã»äŸå€ã»tryã»exceptãšã¯ïŒã
ð«5æéç®
ãã¯ã©ã¹ã»ã€ã³ã¹ã¿ã³ã¹ã»initã»selfã»å±æ§ãšã¯ïŒã
ð«6æéç®
ãfæååã»ã¢ã³ããã¯ã»ãªã¹ãå å 衚èšã»joinãšã¯ïŒã
ð«7æéç®
ãstripã»lenã»splitlinesã»ã¹ã©ã€ã¹ãšã¯ïŒã
ð«8æéç®
ãNoneã»isã»is notã»isinstanceãšã¯ïŒã



