Skip to content

Latest commit

ย 

History

History

Chapter11_Structuring

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 

แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ

แƒฌแƒ˜แƒœแƒ แƒ แƒแƒ›แƒแƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ—แƒแƒ•แƒจแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ˜แƒ— แƒ”แƒ แƒ— แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒ–แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก, แƒ แƒแƒช แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ“แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒฆแƒฅแƒ›แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒก. แƒ แƒแƒช แƒฃแƒคแƒ แƒ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ–แƒแƒ›แƒแƒจแƒ˜, แƒ›แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒซแƒšแƒ˜แƒ”แƒ  แƒ˜แƒฉแƒ”แƒœแƒก แƒ”แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ—แƒแƒ•แƒก. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒš แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒแƒกแƒ แƒ“แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒแƒ–แƒ”. แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒ”แƒ‘แƒจแƒ˜ แƒ’แƒแƒ•แƒ”แƒชแƒแƒœแƒ˜แƒ— แƒ แƒแƒ›แƒแƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒ”แƒ—แƒแƒ“แƒก, แƒ“แƒฆแƒ”แƒก แƒ™แƒ˜ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— flask แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ— แƒคแƒแƒ แƒ›แƒแƒก (แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ flask-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒฃแƒš แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒ–แƒ”) แƒ“แƒ แƒ’แƒแƒ•แƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒ— แƒแƒ› แƒชแƒแƒ“แƒœแƒแƒก แƒ”แƒ แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜.

แƒกแƒแƒ แƒฉแƒ”แƒ•แƒ˜

[TOC]

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜

แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒจแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ› แƒ›แƒแƒ’แƒ•แƒ˜แƒ’แƒ แƒแƒ•แƒ“แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ app/portal.py-แƒจแƒ˜. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ แƒ แƒแƒ› แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒขแƒแƒ แƒ˜ แƒชแƒแƒšแƒ™แƒ” form.py แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ’แƒแƒ•แƒ˜แƒขแƒแƒœแƒ”แƒ—, แƒ แƒแƒช แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ™แƒแƒ แƒ’แƒ˜ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒ, แƒ›แƒ—แƒแƒ•แƒแƒ  แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ› แƒ“แƒแƒ’แƒ•แƒ แƒฉแƒ แƒ“แƒแƒกแƒแƒ‘แƒ˜แƒœแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜.

แƒ แƒแƒ’แƒแƒ แƒช แƒจแƒ”แƒ•แƒ—แƒแƒœแƒฎแƒ›แƒ“แƒ˜แƒ—, app.py-แƒจแƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒฃแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒ“แƒ˜, แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ—แƒแƒœ แƒ‘แƒ›แƒ. แƒ™แƒแƒ“แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ•แƒฃแƒ™แƒ”แƒ—แƒแƒ— แƒ‘แƒ›แƒ แƒชแƒ”แƒœแƒขแƒ แƒแƒšแƒฃแƒ  app.py-แƒกแƒ—แƒแƒœ. แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ“แƒแƒ•แƒงแƒแƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒฃแƒ  แƒžแƒแƒ แƒชแƒ˜แƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒ’แƒแƒœแƒแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“: แƒ›แƒแƒ“แƒ”แƒšแƒ”แƒ‘แƒ˜ => models.py ; แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ viewแƒ”แƒ‘แƒ˜ => views.py-แƒจแƒ˜ แƒ“แƒ แƒ.แƒจ.

แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜

แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ›แƒ”แƒœแƒข แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ™แƒแƒ›แƒคแƒแƒ แƒขแƒฃแƒšแƒแƒ“ แƒฌแƒแƒ›แƒแƒ แƒ—แƒ•แƒแƒจแƒ˜. แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒ’แƒแƒ•แƒฃแƒ™แƒ”แƒ—แƒแƒ— แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ แƒแƒ› แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒก แƒ˜แƒกแƒ” แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ—แƒ แƒ’แƒฃแƒœแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒแƒฆแƒกแƒแƒฅแƒ›แƒ”แƒšแƒ˜ แƒ“แƒ แƒ›แƒ˜แƒกแƒแƒฎแƒ•แƒ”แƒ“แƒ แƒ˜ แƒ˜แƒงแƒแƒก, แƒกแƒแƒ“ แƒ แƒ แƒแƒ แƒ˜แƒก แƒ›แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒงแƒแƒ— แƒจแƒ”แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ”แƒš แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒแƒ› แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒแƒ“ (แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒ“แƒ”แƒก แƒฅแƒ•แƒ”แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒก). แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฎแƒ˜แƒกแƒ”แƒ‘แƒ  แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก แƒกแƒแƒ“แƒแƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒฃแƒš แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒžแƒ แƒ”แƒแƒฅแƒขแƒ˜ แƒ“แƒ แƒ•แƒ”แƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒ”แƒ‘แƒแƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—. แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ— แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ™แƒแƒชแƒ แƒแƒ“ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒฌแƒ”แƒกแƒ˜ แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒฃแƒคแƒ แƒ แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒ แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒแƒฌแƒงแƒแƒ— แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒ.

แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒจแƒ˜ แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒฃแƒšแƒ˜ แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒข-แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒแƒกแƒ”แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜:

๐Ÿ“ฆStudentPortal
โ”œโ”€โ”€โ”€app.py # แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ app.py แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ—แƒแƒช แƒ’แƒแƒ”แƒจแƒ•แƒ”แƒ‘แƒ web app แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜
โ”œโ”€โ”€โ”€requirements.txt # แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ pip install-แƒ— แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“
โ”œโ”€โ”€โ”€๐Ÿ“‚migrations # แƒคแƒแƒšแƒ“แƒ”แƒ แƒ˜ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก
โ”œโ”€โ”€โ”€๐Ÿ“‚myproject # แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒคแƒแƒšแƒ“แƒ”แƒ แƒ”แƒ‘แƒ˜, แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒฃแƒ‘-แƒคแƒแƒšแƒ“แƒ”แƒ แƒ”แƒ‘แƒจแƒ˜
โ”‚   โ”‚  __init__.py   # แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ
โ”‚   โ”‚   
โ”‚   โ”œโ”€โ”€โ”€๐Ÿ“‚static # แƒแƒ“แƒ’แƒ˜แƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: CSS, JS, Images, Fonts, etc...
โ”‚   โ”œโ”€โ”€โ”€๐Ÿ“‚templates # แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜/แƒกแƒแƒกแƒขแƒแƒ แƒขแƒ แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜
โ”‚   โ”‚   โ”‚    base.html
โ”‚   โ”‚   โ”‚    home.html
โ”‚   โ”‚  				# แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ–แƒ˜แƒแƒ แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜
โ”‚   โ”‚  data.sqlite # แƒšแƒแƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ‘แƒแƒ–แƒ
โ”‚   โ”‚  models.py # แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ”แƒ‘แƒ˜
โ”‚   โ”‚  				# แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜
โ”‚   โ”œโ”€โ”€โ”€๐Ÿ“‚teachers
โ”‚   โ”‚   โ”‚   forms.py
โ”‚   โ”‚   โ”‚   views.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€โ”€๐Ÿ“‚templates
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€๐Ÿ“‚teachers
โ”‚   โ”‚   โ”‚       โ”‚   add_teachers.html
... ...
... ...
โ”‚   โ”œโ”€โ”€โ”€๐Ÿ“‚students
โ”‚   โ”‚   โ”‚   forms.py
โ”‚   โ”‚   โ”‚   views.py
โ”‚   โ”‚   โ”‚
โ”‚   โ”‚   โ”œโ”€โ”€โ”€๐Ÿ“‚templates
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€โ”€๐Ÿ“‚students 
โ”‚   โ”‚   โ”‚       โ”‚   add.html
โ”‚   โ”‚   โ”‚       โ”‚   delete.html
โ”‚   โ”‚   โ”‚       โ”‚   list.html

แƒ แƒแƒช แƒฃแƒคแƒ แƒ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ›แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ™แƒแƒ“แƒ˜แƒก แƒ–แƒแƒ›แƒ. แƒ แƒแƒ’แƒแƒ  แƒฎแƒ”แƒ“แƒแƒ•แƒ— แƒ’แƒแƒ แƒ“แƒ แƒ˜แƒ›แƒ˜แƒกแƒ แƒ แƒแƒ› แƒ’แƒแƒ•แƒ›แƒ˜แƒฏแƒœแƒ”แƒ— แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ˜แƒกแƒ’แƒแƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ“แƒแƒกแƒแƒกแƒขแƒแƒ แƒขแƒแƒ“ แƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜, แƒ›แƒแƒ•แƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒ”แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜ แƒกแƒแƒ”แƒ แƒ—แƒmyproject แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜. แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ› แƒแƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒก แƒ’แƒแƒ•แƒฃแƒ™แƒ”แƒ—แƒ”แƒ— แƒชแƒแƒšแƒ™แƒ” แƒ™แƒแƒขแƒ”แƒ’แƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒชแƒแƒšแƒ™แƒ” แƒ›แƒแƒ•แƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜, แƒชแƒแƒšแƒ™แƒ” แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฅแƒ•แƒ” แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒแƒ“ แƒ’แƒแƒ•แƒ˜แƒขแƒแƒœแƒ”แƒ— แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ - แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜. แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒ˜แƒ แƒ—แƒฃ แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒแƒกแƒ” แƒ“แƒแƒ•แƒงแƒแƒคแƒ— แƒจแƒ”แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ”แƒš แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒแƒ“ - แƒ˜แƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒแƒ“, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒแƒช แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒฏแƒ’แƒฃแƒคแƒ”แƒ‘แƒ แƒ“แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ.

แƒฉแƒ•แƒ”แƒœแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒแƒ แƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜: students - แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ”แƒ‘แƒ˜ แƒ“แƒ teachers - แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜. แƒ›แƒแƒ— แƒ’แƒแƒแƒฉแƒœแƒ˜แƒแƒ— แƒฅแƒ•แƒ”แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜: แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ•แƒ˜แƒฃแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฅแƒ•แƒ”แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜ - แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜.

แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ

แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช แƒ—แƒ”แƒแƒ แƒ˜แƒฃแƒšแƒแƒ“ แƒ›แƒ˜แƒ›แƒแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒก, แƒ’แƒแƒ“แƒแƒ•แƒแƒœแƒแƒฌแƒ˜แƒšแƒแƒ— แƒ“แƒ แƒ“แƒแƒ•แƒกแƒ•แƒแƒ— แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒจแƒ˜ แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒ–แƒ”. แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ แƒ›แƒแƒ—แƒจแƒ˜ แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ copy / paste แƒ’แƒแƒ“แƒ›แƒแƒขแƒแƒœแƒ˜แƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. (แƒ แƒแƒ“แƒ’แƒแƒœ แƒ™แƒแƒ“แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ”แƒ— แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒจแƒ˜)

แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ flask-แƒจแƒ˜ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ blueprints แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ’แƒแƒ•แƒฌแƒ”แƒ แƒ— แƒ›แƒแƒ“แƒฃแƒšแƒแƒ  แƒ™แƒแƒ›แƒžแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒ“แƒแƒ•แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ— แƒ›แƒแƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒ•แƒ˜แƒฃแƒ”แƒ‘แƒ—แƒแƒœ.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ”แƒฅแƒœแƒ”แƒ‘แƒ แƒแƒ แƒ˜ views.py แƒคแƒแƒ˜แƒšแƒ˜, แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒแƒšแƒ แƒ›แƒ”แƒแƒ แƒ” แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก. แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒแƒ› แƒคแƒแƒ˜แƒšแƒก แƒ”แƒฅแƒœแƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ add view. แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ แƒแƒ› แƒ“แƒแƒ•แƒ”แƒฎแƒ›แƒแƒ แƒแƒ— flaskแƒก แƒ’แƒแƒœแƒแƒกแƒฎแƒ•แƒแƒ•แƒแƒก /add แƒ›แƒแƒ แƒจแƒฃแƒขแƒ”แƒ‘แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒก.

แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ’แƒแƒ•แƒฌแƒ”แƒ แƒ— แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒก แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ”แƒ‘แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ view แƒคแƒแƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

/students/add แƒ“แƒ /teachers/add

แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ“แƒฆแƒ”แƒ•แƒแƒœแƒ“แƒ”แƒšแƒ˜ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ:

  • แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ แƒ”แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒคแƒแƒšแƒ“แƒ”แƒ แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒแƒ‘แƒ˜แƒœแƒแƒ•แƒ”แƒ‘แƒ
  • แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ
  • แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ”แƒ‘แƒ
  • แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ˜แƒก แƒ’แƒแƒฌแƒ”แƒ แƒ __init__.py แƒคแƒแƒ˜แƒšแƒจแƒ˜.

แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒคแƒแƒšแƒ“แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฅแƒ•แƒ”-แƒ—แƒแƒ•แƒจแƒ˜ แƒ•แƒœแƒแƒฎแƒแƒ•แƒ— แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒ›แƒแƒ แƒ—แƒแƒ— แƒ™แƒแƒ“แƒ˜ แƒแƒ› แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—:

แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ

แƒ˜แƒœแƒ“แƒ˜แƒ•แƒ˜แƒ“แƒฃแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ’แƒ˜แƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒ— แƒ—แƒ˜แƒ—แƒแƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒก แƒ™แƒแƒ“แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒ™แƒ˜ แƒ›แƒแƒแƒ แƒ’แƒ”แƒ— แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒก.

app.py

from myproject import app
from flask import render_template

@app.route('/')
def index():
    return render_template('home.html')

if __name__ == '__main__':
    app.run(debug=True)

/myproject

models.py

แƒ แƒแƒ“แƒ’แƒแƒœแƒแƒช แƒกแƒฃแƒš แƒแƒ แƒ˜ แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ›แƒแƒ—แƒ˜ แƒ”แƒ แƒ— แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ™แƒแƒ“แƒ˜แƒก แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒแƒ“ แƒ“แƒแƒœแƒแƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒแƒช แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ. แƒ—แƒฃแƒ›แƒชแƒ แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ“แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ›แƒ แƒ“แƒ แƒ›แƒแƒ—แƒจแƒ˜ แƒจแƒ”แƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜ แƒ“แƒ˜แƒ“แƒ˜แƒ แƒ แƒ แƒกแƒแƒ™แƒ•แƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒ แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒ—แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒแƒช. แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

from myproject import db


class Student(db.Model):
    __tablename__ = "students"

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    #  One_to_one relationship
    # A student only has one teacher, thus uselist is False.
    # Strong assumption of 1 teacher per 1 student and vice versa.
    teacher = db.relationship('Teacher', backref="student", uselist=False)

    def __init__(self, name):
        # แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒ› แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒฌแƒ”แƒ•แƒ แƒ˜แƒก แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ
        self.name = name

    def __repr__(self):
        if self.teacher:
            return f"Teacher of the Student {self.name} is {self.teacher.name}"
        else:
            return f"Student {self.name} has no teacher yet"


class Teacher(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # Connect the teacher to the Student that "owns" it.
    # We use student.id because __tablename__='student'
    student_id = db.Column(db.Integer, db.ForeignKey('students.id'))
    name = db.Column(db.String)

    def __init__(self, name, student_id):
        self.name = name
        self.student_id = student_id

    def __repr__(self):
        return f"Teacher Name: {self.name}"

แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒ แƒแƒช แƒซแƒ•แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜แƒก from myproject import db. แƒ”แƒก แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒแƒก (แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒคแƒšแƒแƒกแƒ™แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒกแƒ˜แƒ–แƒแƒช) แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒขแƒแƒœแƒ— myproject/__init__.py-แƒคแƒแƒ˜แƒšแƒจแƒ˜.

__init__.py

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate


app = Flask(__name__)

# แƒ—แƒฃ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ‘แƒ”แƒ•แƒ  แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒก แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒ—แƒ˜ config.py แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ 
app.config['SECRET_KEY'] = 'mysecretkey'
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
Migrate(app,db)

# แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”! แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒแƒช db แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก แƒ’แƒแƒฌแƒ”แƒ 
# แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ models.py แƒ“แƒแƒ’แƒ•แƒ˜แƒ”แƒ แƒแƒ แƒ“แƒ”แƒ‘แƒ.
## แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ แƒ›แƒแƒ›แƒฃแƒจแƒแƒ•แƒ” views.py แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒกแƒแƒ—แƒ˜แƒ—แƒแƒแƒ“ แƒจแƒ”แƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒ›แƒแƒ—แƒ˜ แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ”แƒ‘แƒ˜แƒ—
from myproject.students.views import students_blueprint
from myproject.teachers.views import teachers_blueprint

# แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ› แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ
app.register_blueprint(students_blueprint,url_prefix="/students")
app.register_blueprint(teachers_blueprint,url_prefix='/teachers')

แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ”แƒ‘แƒ›แƒ แƒแƒ  แƒ“แƒแƒ’แƒแƒ‘แƒœแƒ˜แƒแƒ— แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ”. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ•แƒ˜แƒฃแƒ”แƒ‘แƒก แƒ’แƒแƒ•แƒฌแƒ”แƒ แƒ— แƒ˜แƒฅ แƒ•แƒ˜แƒกแƒแƒฃแƒ‘แƒ แƒ”แƒ‘แƒ— แƒ—แƒฃ แƒ แƒแƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ”แƒœ แƒแƒ› แƒ”แƒขแƒแƒžแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฃแƒฎแƒ˜แƒšแƒแƒ• แƒœแƒแƒฌแƒ˜แƒšแƒจแƒ˜.

แƒแƒ› แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒ˜ แƒ’แƒแƒ˜แƒฎแƒกแƒ”แƒœแƒ”แƒ— แƒ แƒแƒ’แƒแƒ  แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ—แƒ˜ api-แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒฌแƒ”แƒ แƒ˜แƒš แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก. แƒแƒฅแƒแƒช แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก. แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒจแƒ”แƒ›แƒแƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ•แƒ˜แƒฃแƒ”แƒ‘แƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ•แƒ˜แƒฃแƒก แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒจแƒ˜ (แƒ›แƒแƒ’. students_blueprint) แƒ“แƒ register_blueprint() แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœแƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ•แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ— แƒ•แƒ˜แƒฃ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ”.

แƒ“แƒ แƒ แƒแƒ’แƒแƒ แƒช API-แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ แƒ”แƒกแƒฃแƒ แƒกแƒจแƒ˜ แƒ˜แƒงแƒ แƒ’แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒกแƒ แƒ—แƒฃ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒขแƒ˜แƒžแƒ–แƒ”, แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒแƒ“ แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ“แƒ”แƒ‘แƒ แƒ•แƒ˜แƒฃแƒจแƒ˜ แƒ’แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ”แƒ‘แƒ˜, แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—.

/templates

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒžแƒแƒ แƒขแƒแƒšแƒ˜</title>
    <!-- CSS only -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">

    <!-- JS, Popper.js, and jQuery -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">

    <div class="navbar-nav">
      <a class="nav-item nav-link" href="{{ url_for('home') }}">แƒ—แƒแƒ•แƒคแƒฃแƒ แƒชแƒ”แƒšแƒ˜</a>
      <a class="nav-item nav-link" href="{{ url_for('student.add') }}">แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ</a>
      <a class="nav-item nav-link" href="{{ url_for('student.list') }}">แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ˜แƒ</a>
      <a class="nav-item nav-link" href="{{ url_for('student.delete') }}">แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒฌแƒแƒจแƒšแƒ</a>
      <a class="nav-item nav-link" href="{{ url_for('teacher.add') }}">แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ</a>

    </div>

    </nav>

    {% block content %}
    {% endblock %}

</body>
</html>

home.html

{% extends "base.html" %}
{% block content %}
    <div class="jumbotron">
        <h1>แƒ›แƒแƒ’แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ˜แƒ— แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒžแƒšแƒแƒขแƒคแƒแƒ แƒ›แƒแƒ–แƒ”</h1>
        <p>แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒแƒ˜แƒ แƒฉแƒ˜แƒแƒ— แƒจแƒ”แƒกแƒแƒ‘แƒ˜แƒ›แƒ˜แƒกแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜ แƒกแƒแƒœแƒแƒ•แƒ˜แƒ’แƒแƒชแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒ“แƒแƒœ</p>
    </div>
{% endblock %}

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ— home.html แƒฌแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜แƒ. แƒแƒฅ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒœแƒขแƒ˜ แƒ›แƒแƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒ แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒ”แƒœแƒแƒช แƒ—แƒแƒ•แƒคแƒฃแƒ แƒชแƒ”แƒšแƒ–แƒ” แƒ’แƒกแƒฃแƒ แƒ—.

components

myproject//forms.py

แƒแƒ แƒ˜แƒ•แƒ” แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒก แƒ”แƒ แƒ— แƒฅแƒ•แƒ”แƒ—แƒแƒ•แƒจแƒ˜ แƒ’แƒแƒ•แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘ แƒ แƒแƒ› แƒแƒ› แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒงแƒแƒšแƒ แƒ’แƒแƒ’แƒ˜แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ“แƒ”แƒ—. แƒแƒ› แƒ”แƒขแƒแƒžแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒฃแƒœแƒ“แƒ แƒ’แƒฅแƒแƒœแƒ“แƒ”แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ forms.py แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—:

myproject/students/forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField

class AddForm(FlaskForm):
    name = StringField('แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜:')
    submit = SubmitField('แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ')

class DelForm(FlaskForm):
    id = IntegerField('แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜:')
    submit = SubmitField('แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒฌแƒแƒจแƒšแƒ')

myproject/teachers/forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SubmitField

class AddForm(FlaskForm):

    name = StringField('แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜:')
    student_id = IntegerField("แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜: ")
    submit = SubmitField('แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ')

myproject//views.py

แƒ›แƒ˜แƒ•แƒแƒ“แƒ”แƒฅแƒ˜แƒ— แƒ—แƒแƒ•แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒœแƒแƒฌแƒ˜แƒšแƒก, view แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก. แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒ› แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ”แƒ‘แƒก. แƒ”แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒ”แƒ‘แƒแƒ“ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒฉแƒแƒ•แƒจแƒแƒšแƒแƒ—:

  1. แƒแƒ•แƒแƒฌแƒงแƒแƒ— view แƒคแƒแƒ˜แƒšแƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜แƒก แƒ“แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒแƒ–แƒ”แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜
  2. แƒฉแƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— Blueprints-แƒ”แƒ‘แƒ˜
  3. แƒ“แƒแƒ•แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒแƒ— Blueprint-แƒ”แƒ‘แƒ˜
  4. แƒ“แƒแƒ•แƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒแƒ— app.py-แƒก
  5. แƒฉแƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜ base.html-แƒ˜แƒก navbar-แƒจแƒ˜

แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒ‘แƒšแƒฃแƒžแƒ แƒ˜แƒœแƒขแƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒขแƒแƒœแƒ˜แƒ—:

# แƒคแƒšแƒแƒกแƒ™ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒขแƒแƒœแƒ
from flask import Blueprint, render_template, redirect, url_for
# แƒจแƒแƒ‘แƒšแƒแƒœแƒจแƒ˜ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜แƒก แƒฉแƒแƒกแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“
from myproject import db
# แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ“แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—แƒแƒช แƒ•แƒแƒฌแƒงแƒแƒ‘แƒ— แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒก
from myproject.models import <ModelName>
# แƒ“แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒคแƒแƒ แƒ›แƒ”แƒ‘แƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ•แƒ”แƒ‘ แƒ’แƒ•แƒ”แƒ แƒ“แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ—
from myproject.<component>.forms import <FormFields>

แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ› แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก Blueprints แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ:

component_blueprint = Blueprint('<component_name>', __name__, template_folder='templates/<component_name>')

แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ แƒฉแƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” แƒ›แƒ˜แƒ›แƒแƒ’แƒ แƒ”แƒ‘แƒ.

routing-แƒจแƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒ˜แƒกแƒแƒ แƒ แƒแƒ› app แƒ˜แƒก แƒ›แƒแƒ’แƒ˜แƒ•แƒ แƒแƒ“ แƒแƒฎแƒแƒš แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒก แƒฉแƒ•แƒ”แƒœแƒก component_blueprint แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ–แƒ” แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ—. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ›แƒแƒ แƒจแƒฃแƒขแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ:

@component_blueprint.route('/add', methods=['GET', 'POST'])

แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒ› แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒก แƒ“แƒแƒ•แƒšแƒ˜แƒœแƒ™แƒแƒ•แƒ— app.py-แƒกแƒ—แƒแƒœ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ˜แƒ—/แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜แƒ—. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒแƒ  แƒคแƒแƒ˜แƒšแƒก:

myproject/students/views.py

from flask import Blueprint,render_template,redirect,url_for
from myproject import db
from myproject.students.forms import AddForm,DelForm
from myproject.models import Student

students_blueprint = Blueprint('students',
                              __name__,
                              template_folder='templates/students')

@students_blueprint.route('/add', methods=['GET', 'POST'])
def add():
    form = AddForm()

    if form.validate_on_submit():
        name = form.name.data

        # Add new Student to database
        new_student = Student(name)
        db.session.add(new_student)
        db.session.commit()

        return redirect(url_for('students.list'))

    return render_template('add.html',form=form)

@students_blueprint.route('/list')
def list():
    # Grab a list of students from database.
    students = Student.query.all()
    return render_template('list.html', students=students)

@students_blueprint.route('/delete', methods=['GET', 'POST'])
def delete():

    form = DelForm()

    if form.validate_on_submit():
        id = form.id.data
        student = Student.query.get(id)
        db.session.delete(student)
        db.session.commit()

        return redirect(url_for('students.list'))
    return render_template('delete.html',form=form)

myproject/teachers/views.py

from flask import Blueprint,render_template,redirect,url_for
from myproject import db
from myproject.models import Teacher
from myproject.teachers.forms import AddForm

teachers_blueprint = Blueprint('teachers',
                              __name__,
                              template_folder='templates/teachers')

@teachers_blueprint.route('/add', methods=['GET', 'POST'])
def add():

    form = AddForm()

    if form.validate_on_submit():
        name = form.name.data
        student_id = form.student_id.data
        # Add new teacher to database
        new_teacher = Teacher(name,student_id)
        db.session.add(new_teacher)
        db.session.commit()

        return redirect(url_for('students.list'))
    return render_template('add_teachers.html',form=form)

myproject//templates/

แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ›แƒแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ˜แƒก html แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ› แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ—แƒแƒœ แƒกแƒแƒ›แƒฃแƒจแƒแƒ“ แƒ“แƒแƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒฌแƒ˜แƒœแƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ“แƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒข แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ—แƒแƒœ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜.

students/templates/students/

add.html

{% extends "base.html" %}
{% block content %}
    <div class="jumbotron">
    <h1>แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ</h1>
    <p>แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒคแƒแƒ แƒ›แƒ˜แƒ“แƒแƒœ:</p>
        <form method="POST">
            {{ form.hidden_tag() }}
            {{ form.name.label }} {{ form.name() }}
            {{ form.submit() }}
        </form>
    </div>
{% endblock %}

delete.html

{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
  <h1>แƒ’แƒกแƒฃแƒ แƒ— แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒฌแƒแƒจแƒšแƒ?</h1>
  <p>แƒจแƒ”แƒแƒ•แƒกแƒ”แƒ— แƒคแƒแƒ แƒ›แƒ แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒแƒ แƒ˜แƒ—</p>
  <form method="POST">
      {# This hidden_tag is a CSRF security feature. #}
      {{ form.hidden_tag() }}
      {{ form.id.label }} {{ form.id() }}
      {{ form.submit() }}
  </form>
</div>
{% endblock %}

list.html

{% extends "base.html" %}
{% block content %}
    <div class="jumbotron">
    <h1>แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ—แƒ แƒกแƒ˜แƒ</h1>
        <ol>
            {% for student in students %}
                <ul>{{ student.id }} {{ student }}</ul>
            {% endfor %}
        </ol>
    </div>
{% endblock %}

/teachers/templates/teachers

add.html

{% extends "base.html" %}
{% block content %}
<div class="jumbotron">
  <h1>แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ</h1>
  <p>แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒคแƒแƒ แƒ›แƒ˜แƒ“แƒแƒœ:</p>
  <form method="POST">
      {# This hidden_tag is a CSRF security feature. #}
      {{ form.hidden_tag() }}
      {{ form.name.label }} {{ form.name() }}<br>
      {{ form.student_id.label }} {{ form.student_id() }}<br>
      {{ form.submit() }}
  </form>
</div>
{% endblock %}

แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜: