рдЬреВрдирд┐рдпрд░реНрд╕ рд╣рдореЗрд╢рд╛ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╕рд╣реА crontab рд╕реЗрдЯрдЕрдк рдХреА рддрд░рд╣ред рдЖрдк рдХреНрд░реЛрди-рдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рдХреЗрд╡рд▓ рдЕрд▓рд░реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдХреНрд╖рдг рдХреЛ рднреА рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ рддреНрд░реБрдЯрд┐ рд╣реБрдИ (рдпрджрд┐ рдмрд╛рдж рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рджреНрд╡рд╛рд░рд╛ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬрд╛рдирдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд╛рдЧрдд рдФрд░ рджреИрдирд┐рдХ рдЖрд╡реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рд╣рд░ рджрд┐рди рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдлреВрд▓рд╛ рд╣реБрдЖ рдЯреЗрдмрд▓ рдХреЗ рдХрд╛рд░рдг рдмреНрд░реЗрдХ рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд┐рднрд╛рдЬрди, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рдирд╛ рдФрд░ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░ рдлрд┐рд░, рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рдкрд┐рдЫрд▓реЗ рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ PinbaEngine рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЭреБрдВрдб рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ django-mmc рдирд╛рдордХ рдПрдХ рдЫреЛрдЯреА рдмреИрдЯрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
$ pip install virtualenvwrapper $ mkvirtualenv habr $ pip install Django $ django-admin.py startproject habr
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХрдИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреБрднрд╡реА рднреА, рдРрд╕реА рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ virtualenvwrapperред рдЙрдкрдпреЛрдЧреА рдмрд╛рддред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдмреИрдЯрд░реА рд╕реНрдерд╛рдкрдирд╛
$ cd habr/ $ pip install django-mmc
рдорд┐рдореА рдмреИрдЯрд░реА рдХреЛ INSTALLED_APPS рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВ:
$ ./manage.py syncdb --noinput
рдЕрдм рд╣рдо рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд╣реАрдВ рднреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдРрдк рдХреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреАред
рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ рдФрд░ habr / __ init__.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ:
from mmc.mixins import inject_management inject_management()
рдпрд╣ рд╕реЗрдЯрдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдмреИрдЯрд░реА рдХреЛ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд░реАрдХреНрд╖рдг
рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдФрд░ рд╡реЗрдм рдЙрддреНрддрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$ ./manage.py createsuperuser $ ./manage.py syncdb $ ./manage.py runserver
рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рднрд╛рдЧ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдЖрдк рдЗрд╕ рдкрддреЗ http://127.0.0.1:8000/admin/mmc/mmclog/ рдкрд░ рдЬрд╛рдХрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд░рд┐рдгрд╛рдо
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рд╣рдо рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣реЗ рдереЗ:
рдХреНрд░реЛрди рд╕реЗрдЯрдЕрдк
рдпрджрд┐ рдЖрдк рдХреНрд░реЛрди рд╕реЗ рд╕реВрдЪрдирд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдХреНрд░реЗрд╕реНрдЯреИрдм рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games MAILTO=habr@local.host
рдкрд╣рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдкрде рдФрд░ рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИрдВ рдЬрд╣рд╛рдБ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИред MAILTO рдЙрд╕ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдЬрдмрд╛рдиреЛрдВ рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд▓реЙрдЧ рдЙрд╕ рдкреАрдХ рдореЗрдореЛрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЦрд╛рдпрд╛ рдерд╛ред
рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ + рд╕рдВрддрд░реА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдИрдореЗрд▓ рдкрддреЗ рдкрд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред
рдЗрд╕ рдмреИрдЯрд░реА рдиреЗ рдореБрдЭреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рдордп рдкрд░ рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреА рдХрд┐ рдХреМрди рд╕реА рдЯреАрдо рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЧрд┐рд░рддреА рд╣реИ, рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рддреА рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ рд╢реБрд░реБрдЖрддреА рдФрд░ рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рджреЗрдЧрд╛ред