Django рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдЯреЛрдбреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред рднрд╛рдЧ 1

рдлрд┐рд░ рд╕реЗ рд╣реИрд▓реЛред рдкрд╛рдпрдерди рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ , рд╣рдорд╛рд░реЗ рд╕реНрд╡рддрдВрддреНрд░ рд▓реЗрдЦрдХ рдиреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╛рдордЧреНрд░реА рддреИрдпрд╛рд░ рдХреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ рдЦреБрд╢ рд╣реИрдВред




Django рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, Django рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдЗрдЯреЗрдВ (рдпрд╛ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдЬрд▓реНрджреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдФрд░ рджреЗрд╢реА PHP рдХреЗ рдмрд╛рдж, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдХрд┐ рдЖрдк рдПрдХ рдмрд╣реБрдд рддреЗрдЬ рд╡рд┐рдХрд╛рд╕ рдорд╢реАрди рдХреА рд╕рд╡рд╛рд░реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЫреЛрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИред рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдЯреЛрдбреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред



рдЖрдЗрдП рд╢реБрд░реБрдЖрдд рд╢реЙрд░реНрдЯ рдЯреА.рдЬреЗ рдХреЗ рд╢рдмреНрджрд╛рдВрдХрди рд╕реЗ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Bulma рдкрд░ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдЧрд╛ (рд╣рд╛рдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Bulma рдкрд╕рдВрдж рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рдореИрдВ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдпрд╛ рдкрд┐рдХрдирд┐рдХ рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рдКрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдЪреАрдЬ рдХрд╛ рдЕрдкрдирд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ)ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ (рдЕрднреА рддрдХ) рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЯреВ-рдбреВ рд╢реНрд░реЗрдгреА рдпрд╛ рдПрдХ рдЯреВрдбреВ рдХрд╛рд░реНрдб рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдХрд┐рд╕реА рднреА рд╢реНрд░реЗрдгреА рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реИред рдЪреЗрдХ рдмреЙрдХреНрд╕ рдЪреЗрдХ рдХрд░рдХреЗ рдФрд░ рдбрд┐рд▓реАрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдХ рдЯреЛрдбреЛ рдХрд╛рд░реНрдб рдпрд╛ рд╢реНрд░реЗрдгреА рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Django рдХреЛрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ


рдЪрд▓рд┐рдП Django рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред Django MVT (рдореЙрдбрд▓ рд╡реНрдпреВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдЪрд┐рдд MVC (рдореЙрдбрд▓ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░) рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ рдЬреЛ рд░реВрдмреА рдФрд░ рд▓рд╛рд░рд╡реЗрд▓ рдкрд░ рд░реВрдмреА рдЪрд▓рд╛рддрд╛ рд╣реИред

рдореЙрдбрд▓ Django рдореЗрдВ рдореЙрдбрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред Django ORM рдХреЗ рд╕рд╛рде, рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд▓рд╛рдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджреЗрдЦреЗрдВ Django рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ, рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореВрд▓ рддрд░реНрдХ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВред рджреГрд╢реНрдп рдЖрдорддреМрд░ рдкрд░ рдЕрдиреБрд░реЛрдз \ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдорддреМрд░ рдкрд░ HTTP рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ, HTTP рддреНрд░реБрдЯрд┐ (404), рдорд╛рдЗрдордЯреЗрдкреНрд╕ рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреИрдЯрд░реНрди рд╣реИред

рдЦрд╛рдХрд╛Django рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд╖рд╛ Django рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ HTML рдХреЛрдб рд╣реИред DTL (Django рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓реИрдВрдЧреНрд╡реЗрдЬ) рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрд┐рд╕реА рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП, рдкреГрд╖реНрда рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ)ред

рд╕реЗрдЯрд┐рдВрдЧреНрд╕ Django рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдЧреБрдкреНрдд рдХреБрдВрдЬреА, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░, рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдЬреЛ рдХрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдкрдХреЗ рдирд┐рдЬреА рдПрд▓реНрдмрдо рджреЗрдЦрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП), рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред

Url рд░реВрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдгреАрдп рдпрд╛ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВред рдпрд╣ url рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреГрд╖реНрда рдЪреВрдВрдХрд┐ Django рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рддреЗрдЬреА рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдкрд╛рдпрдерди рдФрд░ Django рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


рд░рдЪрдирд╛рддреНрдордХ рд╡рд╛рдкрд╕реА
( ) . Python . , . , .

рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг


рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рджреЛ рдореБрдЦреНрдп рдкрд╛рдпрдерди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: 2.7 рдФрд░ 3.xред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рей.рей.рей рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХреА рд╣реИ ред рджреВрд╕рд░реА рдУрд░, рдЕрдм рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг 2.7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ - рднрд╛рд╖рд╛ рдЕрджреНрдпрддрди 2.7.17 рдкрд░ рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрджрд┐ рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди 2.7.x рдореЗрдВ рд▓рд┐рдЦреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 2 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдирдП рд▓рд┐рдЦрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред

рдЕрдЬрдЧрд░ рд╕реНрдерд╛рдкрдирд╛


рдпрджрд┐ рдЖрдк рдореИрдХ рдпрд╛ рдЙрдмрдВрдЯреВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдпрдерди рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди 2 рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд╛рдпрдерди рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдк рдЗрд╕реЗ python3 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ ред

рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдПрдБ


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдП рдмрд┐рдирд╛ Django рдкрд░ рдкрд╣рд▓рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдХреМрд╢рд▓ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рддреЛ рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?



1) рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдкред рдЖрдк рдпрд╣рд╛рдБ рд╕реЗ JET BRAINS PyCharm рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЕрджреНрднреБрдд IDE рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред PyCharm рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдФрд░ Pycharm рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡реА рдмрдирд╛рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ Django рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ (рдпрд╛ рдирд╡реАрдирддрдо рдирд╡реАрдирддрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЬреЛ рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рдХреЗ рд╕рдордп 3.0.2):

pip3 install django

2) рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдХрдЯреНрдЯрд░ рд╡рд┐рдХрд▓реНрдк:

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡ рдореЗрдВ Django рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдмрдирд╛рдПрдБрдЧреЗ:

	mkdir myfirstdjango && cd myfirstdjango

рдЕрдЧрд▓рд╛, venv рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ django_env рд╣рдорд╛рд░реЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдирд╛рдо рд╣реИ:

	python3 -m venv django_env
	source django_env/bin/activate

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░рд╛ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рдерд╛ред рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬреЛрдВ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Django рд╣реИ:

	pip3 install django

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЕрдЬрдЧрд░ (рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд╛рдкрд╕реА) рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░реЗрдВ:

    deactivate

рдЦреИрд░, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЦреБрдж рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕рдм рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ, рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдЕрдм рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

    django-admin startproject todo  #    
    cd todo #  
    python manage.py startapp todolist  #   todolist
	python3 manage.py runserver 8100 #      , 8000  
 

рдЗрд╕рд▓рд┐рдП, рдЬрдм Django рдиреЗ рд╢реБрд░реБрдЖрддреА рдкреГрд╖реНрда рдЦреЛрд▓рд╛, рддреЛ рдЖрдкрдХреЛ рдореБрдЦреНрдп рдЖрд╡реЗрджрди рдореЗрдВ рд╣рдорд╛рд░реЗ todolist рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред settings.pyрд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ todolist рдХреЗ рд╣рдорд╛рд░реЗ рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ:

INSTALLED_APPS = [
	# ,     ,     
    'todolist',
]

рдЕрдЧрд▓рд╛ рдХрджрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдорд╛рдзрд╛рди, SQlite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ PostgreSQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╢рд╛рд╕реНрддреНрд░реАрдп рд░реВрдк рд╕реЗ Django рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд┐рд░ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ PostgreSQL рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рдореИрдВ MacOS рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдЫреЛрдЯреЗ рдиреГрддреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбрдл рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕реЗ Postgres.app рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ ред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдкреЛрд╕реНрдЯрд┐рдХреЛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╕рднреА рдмрд╛рддрдЪреАрдд рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ psycopg2 рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ (рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рдХрд╛рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрднреА рднреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ settings.py, рдЕрдм рдмрд╣реБрдд рд╣реА рдЕрдВрдд рдореЗрдВ рд╣рдо рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

STATIC_URL = '/static/'
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

рдЖрдкрдХреЗ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреИрдХреЗрдЬ INSTALLED_APPS рд╕реВрдЪреА рдореЗрдВ рдерд╛ :

django.contrib.staticfiles,рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред
рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ рдЖрдЦрд┐рд░реА рдЪреАрдЬ, рд╣рдореЗрдВ рдЕрднреА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

	from django.conf.urls import url
	from django.contrib import admin
	from todolist.views import todo
	from todolist.views import category
	from todolist.views import redirect_view
 
urlpatterns = [
	url(r'$^', redirect_view ),
	url(r'^admin/', admin.site.urls),
	url(r'^todo/', todo, name="TodoList"),
	url(r'^category/', category, name="Category"),
]

рдореИрдВрдиреЗ рдПрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдЬреЛрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдбрд┐рдлреЙрд▓реНрдЯ рдкреЗрдЬ рд╕реЗ рд╕реАрдзреЗ рд╢реНрд░реЗрдгреА рдХреЗ рдЙрдкрдкреГрд╖реНрда рдкрд░ рдЬрд╛рдП (рдЗрд╕рд▓рд┐рдП рднрдЧрд╡рд╛рди рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИ)ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ-рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рднреА рд╣реИ: рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдФрд░ рдорд╛рдорд▓реЗред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдВрддрддрдГ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдПрдХ рдЯреЛрдбреЛ рдореЙрдбрд▓ рдФрд░ рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдмрдирд╛рдирд╛


рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ред рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, models.pyрд╣рдорд╛рд░реЗ рдЯреЙрдбреЛрд▓рд┐рд╕реНрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрдХ рд╢реНрд░реЗрдгреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

from django.utils import timezone #     todo
from django.db import models
 
class Category(models.Model): #     models.Model
    name = models.CharField(max_length=100) #varchar.    
	class Meta:
    	verbose_name = ("Category") #   
    	verbose_name_plural = ("Categories")  #    
    def __str__(self):
        return self.name  # __str__      

рдареАрдХ! рд╣рд╛рдВ, рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдХреЙрд▓рдо рд╣реЛрдВрдЧреЗ: рдЖрдИрдбреА рдФрд░ рдирд╛рдоред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ:

class TodoList(models.Model):
	title = models.CharField(max_length=250)
	content = models.TextField(blank=True) # 
	created = models.DateField(default=timezone.now().strftime("%Y-%m-%d")) #  
	due_date = models.DateField(default=timezone.now().strftime("%Y-%m-%d")) #      
	category = models.ForeignKey(Category, default="general",on_delete=models.PROTECT) # foreignkey          
	class Meta: #       
        ordering = ["-created"] #     
	def __str__(self):
    	return self.title

рдЖрдкрдХрд╛ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

	python3 manage.py makemigrations

рдФрд░ рдлрд┐рд░ рдЦреБрдж рд╣реА рдкрд▓рд╛рдпрди рдХрд░реЗрдВ:

	python3 manage.py migrate

рджреГрд╢реНрдп рдмрдирд╛рдПрдБ


рдлрд╝рд╛рдЗрд▓ view.pyрдХреЛ indolist рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡рд╢реНрдпрдХ рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдореБрдЦреНрдп рд╕реЗ рд╢реНрд░реЗрдгреА рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ:

from django.shortcuts import render, redirect #      
from django.http import HttpResponse
from .models import TodoList, Category #   
 
def redirect_view(request):
	return redirect("/category") #     

рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рдорд▓реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╛рда рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рдпрдВ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕ рддрд┐рдерд┐ рддрдХ рдорд╛рдорд▓рд╛ рдкреВрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗрд╕ рдХреА рд╢реНрд░реЗрдгреА, рдФрд░ рд╕рдВрдпреБрдХреНрдд рд╕рд╛рдордЧреНрд░реА:

def todo(request):
	todos = TodoList.objects.all() #   todo   
    categories = Category.objects.all() #    

рдЙрд╕рдХреЗ рдмрд╛рдж, рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ:

if request.method == "POST": #     POST
	if "Add" in request.POST: #   todo
    	title = request.POST["description"] # 
    	date = str(request.POST["date"]) #,      
        category = request.POST["category_select"] #,      .
        content = title + " -- " + date + " " + category #   
    	Todo = TodoList(title=title, content=content, due_date=date, category=Category.objects.get(name=category))
    	Todo.save() #   
        return redirect("/todo") #   (        )
    if "Delete" in request.POST: #     
        checkedlist = request.POST.getlist('checkedbox') #    ,    
        for i in range(len(checkedlist)): # -    
            todo = TodoList.objects.filter(id=int(checkedlist[i]))
        	todo.delete() # 
return render(request, "todo.html", {"todos": todos, "categories": categories})

рдпрд╣ рд╕рдм рдкреИрд░ рдХреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред рдлрд┐рд░ рд╣рдо рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдкреГрд╖реНрда рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢реНрд░реЗрдгреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рднреА рд╣реЛрдЧрд╛ред рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╣реЛрдЧреА:

def category(request):
	categories = Category.objects.all()  #   
	if request.method == "POST": #    POST
    	if "Add" in request.POST: #  
        	name = request.POST["name"] #  
        	category = Category(name=name) #     
            category.save() #   
        	return redirect("/category")
    	if "Delete" in request.POST: #    
            check = request.POST.getlist('check') #       todo,       
            for i in range(len(check)):
            	try:
                	ateg = Category.objects.filter(id=int(check[i]))
                	ateg.delete()   # 
            	except BaseException: #        ,       
                	return HttpResponse('<h1>     )</h1>')
	return render(request, "category.html", {"categories": categories})

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ viewрдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдореИрдВ bulma.cssрд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╢реНрд░реЗрдгреА рдкреГрд╖реНрдареЛрдВ рдФрд░ рдХрд╛рд░реНрдпрд╕реВрдЪреА рдмрд╣реБрдд рд╕рдорд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдореИрдВ рддреАрди рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИ:
base.htmlрдЬреЛ рд╕рднреА рдПрдХ рд╣реА рд╣реИ рдХрд┐ рд╣рдо рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╣реИ, рдФрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ category.html, todo.html: рдорддрднреЗрдж рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛



рдмрдирд╛рдПрдВ base.htmlрдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>   </title>
  {% load static %}
	<link rel="shortcut icon" type="image/png" href="{% static 'favicon.png' %}"/>
   <link rel="stylesheet" type="text/css" href="{% static 'bulma.min.css' %}">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<div django-app="TaskManager">
	<nav class ="navbar is-success" role="navigation" aria-label="main navigation">
     	<div class="navbar-menu ">
        	<div class="navbar-start">
        	<a class="navbar-item" href="../category"> </a>
        	<a class="navbar-item" href="../todo">   </a>
        	</div>
         </div>
	</nav>
<!--               -->
{% block content %}
{% endblock %}
</div>
</body>
</html>

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкреГрд╖реНрда рдкрд░ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ todo.htmlрдФрд░ category.html:

Tudushka:

{% extends 'base.html' %}
{% block content %}
<div class="columns has-background-black-ter is-centered has-text-white-bis" style="min-height:101vh;">
	<!--        hero,     inline-css -->
	<div class="column is-half">
    	<h1 class="is-size-3 has-text-centered">   </h1>
    	<form action="" method="post">
        	{% csrf_token %}
        	<!-- csrf      -->
            <div class="field has-text-centered">
            	<label for="description" class="label has-text-white-bis"> </label>
            	<div class="control">
             	   <input type="text" id="description" class="input" placeholder="  ?"
                    	name="description" required>
            	</div>
        	</div>
        	<div class="columns">
            	<div class="column">
                	<label for="category"></label>
                	<div class="control">
                    	<div class="select">
                        	<select id="category" class="select" name="category_select" required>
                            	<!--  required,       .    -->
                            	<option class="disabled" value="">  </option>
                    	        {% for category in categories %}
 	                           <option class="" value="{{ category.name }}" name="{{ category.name }}">
                                    {{ category.name }}</option>
                            	{% endfor %}
                        	</select>
    	                </div>
                	</div>
            	</div>
            	<div class="column">
                	<label for="dueDate"> </label>
                	<input type="date" id="dueDate" class="input calendar" name="date" required>
            	</div>
        	</div>
        	<div class="column">
            	<div class="field">
                	<button class="button is-primary" name="Add" type="submit">
                    	<span class="icon is-small">
                        	<i class="fa fa-plus"></i>
                    	</span>
                    	<span> </span>
                	</button>
             	   <button class="button is-link" name="Delete" formnovalidate="" type="submit">
                    	<span class="icon is-small">
                        	<i class="fa fa-trash-o"></i>
                    	</span>
                    	<span>
                        	 
                    	</span>
                	</button>
            	</div>
        	</div>
        	<div class="list is-hoverable">
            	{% for todo in todos %}
            	<!--   django- for loop -->
            	<div class="list-item">
                	<label class="checkbox">
                    	<input type="checkbox" class=" checkbox" name="checkedbox" value="{{ todo.id }}">
                    	<span class="complete-">{{ todo.title }}</span>
                	</label>
                	<span class=" category-{{ todo.category }} has-text-info">{{ todo.category }}</span>
                	<strong class="is-pulled-right"><i class="fa fa-calendar"></i>{{ todo.created }} -
                    	{{ todo.due_date }}</strong>
            	</div>
            	{% endfor %}
        	</div>
    	</form>
	</div>
</div>
{% endblock %}

рдФрд░ category.htmlред рдЗрд╕рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдпрд╣ рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИ todo.html:

{% extends 'base.html' %}
{% block content %}
<div class="columns has-background-link has-text-white is-centered" style="min-height: 101vh;">
	<div class="column is-half">
    	<h1 class="is-size-4 has-text-centered">    </h1>
    	<form action="" method="post">
        	{% csrf_token %}
        	<!-- csrf      -->
            <div class="field has-text-centered">
            	<label for="description" class="label has-text-white-bis">   </label>
            	<div class="control">
     	           <input type="text" id="description" class="input" placeholder="    ?"
                    	name="name" required>
            	</div>
            	<div class="field">
                	<button class="button is-primary" name="Add" type="submit">
                    	<span class="icon is-small">
                        	<i class="fa fa-plus"></i>
                    	</span>
                    	<span> </span>
                	</button>
                	<button class="button is-danger" name="Delete" formnovalidate="" type="submit">
                    	<span class="icon is-small">
           	             <i class="fa fa-trash-o"></i>
                    	</span>
	                    <span>   </span>
                	</button>
            	</div>
            </div>
 
            <!--  c   -->
            <div class="list is-hoverable">
            	{% for category in categories %}
            	<div class="list-item">
                	<label class="checkbox">
                    	<input type="checkbox" class="checkbox" name="check" value="{{category.id}}">
                    	<span class="complete-">{{ category.name }}</span>
                	</label>
            	</div>
            	{% endfor %}
 
        	</div>
    	</form>
	</div>
    {% endblock %}
 

рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╢рд╛рдпрдж, рдХрд╣реАрдВ рди рдХрд╣реАрдВ, рд▓реЗрдЖрдЙрдЯ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЖрд╡реЗрджрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡ рд╣реИрдВ, рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рднреА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдкрд░рдВрдкрд░рд╛ рд╕реЗ, рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:

  1. Django, 3
  2. ,
  3. PostgreSQL

All Articles