рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рддреБрд░рдВрдд рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдВрдЧрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдЕрдм рдпрд╣ рд╕рдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреБрдЫ рддреБрдЪреНрдЫ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдордВрдЪ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕рд░реНрд╡рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╢рд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ tci.lan рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрдбреАрд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдирд╛рдо рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдб рд╣реИ; рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:
рдЙрд╕ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреАрдмреА рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рднрдВрдбрд╛рд░рдг, рд░реВрдкрд░реЗрдЦрд╛ рдЖрджрд┐ рдЪреБрдирдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рддрдХрдиреАрдХреА рдХрд╛рд░реНрдп рднреА рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╕рднреА рдореЙрдбрд▓реЛрдВ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ (рдореЙрдбрд▓ рдореЗрдВ рдХреЛрдИ рд╡рд┐рднрд╛рдЬрди рдирд╣реАрдВ рдерд╛)ред
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рд╡рд┐рдХрд▓реНрдк
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдкрд╕рдВрдж рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░, рдЕрдзрд┐рдорд╛рдирддрдГ, рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдлреНрд░реЗрдорд╡рд░реНрдХ, рдмреЗрд▓, рдлреНрд▓реИрд╢, рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ, рдЖрджрд┐)ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд░реЛрдХ рджрд┐рдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдВрдЧрдарди рдореЗрдВ рдПрдХ CentOS рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ GUJ рдХреЗ рд░реВрдк рдореЗрдВ ExtJS рдХреЛ рдЪреБрдирд╛ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп, рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 4.2b рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмреИрдХрдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ (рдпрд╣ рдПрдХ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реИ), рдореИрдВрдиреЗ Django рдХреЛ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ рдерд╛ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдореИрдВрдиреЗ PyCharm рдХреЛ IDE рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ - рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп IDE рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рддрд░рд╣ред
рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдо ExtJS рдФрд░ Django рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╣реИ:
- рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдкрд╛рдЪреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ред
- SVN рд╕рд░реНрд╡рд░ред рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЗ рджреМрд░рд╛рди рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдХреЛрдб рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- Django рдкрд░ CRUD рдирд┐рдпрдВрддреНрд░рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдиреЗ, рдкрдврд╝рдиреЗ, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ SVN рдФрд░ рд╕реНрдерд╛рдиреАрдп рдбреАрдмрдЧрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде PyCharmред
- рд╕реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рд╛рдВрдЪрд╛ рд╡рд╛рд╕реНрддреБрдХрд╛рд░ 2. рдПрдХреНрд╕рдЯреАрдЬреЗрдПрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрд░рдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдЕрдкрд╛рдЪреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рддреЛ, рдЪрд▓реЛ рдЕрдкрд╛рдЪреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИред рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВ)ред
рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓
/etc/httpd/conf/vhosts/db.tci.lan.conf
рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА: <VirtualHost *:80> ServerAdmin lufton@gmail.com ServerName www.db.tci.lan ServerAlias db.tci.lan DirectoryIndex index.html index.php DocumentRoot /home/lufton/public_html/db.tci.lan/public WSGIScriptAlias / /home/lufton/public_html/db.tci.lan/public/db/mod.wsgi Alias /js/app.js "/home/lufton/public_html/db.tci.lan/public/db/app.js" Alias /css "/home/lufton/public_html/db.tci.lan/public/db/css" <Location "/css"> SetHandler None Allow from all </Location> Alias /js "/home/lufton/public_html/db.tci.lan/public/db/js" <Location "/js"> SetHandler None Allow from all </Location> Alias /img "/home/lufton/public_html/db.tci.lan/public/db/img" <Location "/img"> SetHandler None Allow from all </Location> Alias /media "/usr/lib/python2.6/site-packages/django/contrib/admin/media" <Location "/media"> SetHandler None Allow from all </Location> <Location "/svnmanager"> SetHandler None Allow from all </Location> LogLevel warn ErrorLog /home/lufton/public_html/db.tci.lan/log/error.log CustomLog /home/lufton/public_html/db.tci.lan/log/access.log combined </VirtualHost> LoadModule python_module modules/mod_python.so <Directory /home/lufton/public_html/db.tci.lan/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all AddHandler mod_python .py PythonHandler mod_python.publisher | .py AddHandler mod_python .psp .psp_ PythonHandler mod_python.psp | .psp .psp_ PythonDebug On </Directory>
рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рдкрд╛рдпрдерди рджреНрд╡рд╛рд░рд╛
*.py
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ ExtJS рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП 5 рдЙрдкрдирд╛рдо (
/js/app.js
,
/img
,
/css
,
/js
,
/media
) рдмрдирд╛рддреА рд╣реИ рдФрд░ Django рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХред рдкрд╛рдпрдерди рд╕рд┐рд╕реНрдЯрдо рдкрде рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрде рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ lufton рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╣реИ, db.tci.lan рд╡рд╣ рдкрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐
/etc/httpd/conf/vhosts/
рдлрд╝реЛрд▓реНрдбрд░ рдХреА
/etc/httpd/conf/vhosts/
рдлрд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП
/etc/httpd/conf/httpd.conf
рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ / рдЕрдирдХрдореНрдкреНрд▓рд┐рдореЗрдВрдЯ рдХрд░реЗрдВ:
Include /etc/httpd/conf/vhosts/*.conf
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕
mod_wsgi рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИред
рдЙрдкрдпреБрдХреНрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

рдпрд╣ рдЕрдкрд╛рдЪреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рддреЛрдбрд╝рдлреЛрдбрд╝ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ
db
рдкрде
/srv/svn/repos/db
рдкрд░ рд╕реНрдерд┐рдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдПрд╕рд╡реАрдПрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд┐рдЯ рдХреЗ рдмрд╛рдж рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╣реЗрдб рдлрд╛рдЗрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдЯ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдпрд╣ рдЖрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
svn checkout 127.0.0.1/svn/db /home/lufton/public_html/db.tci.lan/public/db
рдЕрдм рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
/srv/svn/repos/db/hooks/post-commit.tmpl
рдореЗрдВ
/srv/svn/repos/db/hooks/post-commit
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
рдмрдЬрд╛рдп
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
:
cd /home/lufton/public_html/db.tci.lan/public/db /usr/bin/svn update # python manage.py syncdb # /etc/init.d/httpd restart
рдЕрдм, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд┐рдЯ рдХреЗ рдмрд╛рдж, рдлрд╝реЛрд▓реНрдбрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг CRUD рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдирд╛
рдореЗрд░реЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рднрд╛рд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрдо рд╕реЗ рдХрдо рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рдореЙрдбрд▓ рдирд╛рдо рд╕реЗ рдореЙрдбрд▓ (рдирд┐рд░реНрдорд╛рдг, рдЪрдпрди рдХрд░реЗрдВ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╣рдЯрд╛рдПрдВ) рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВред
- рдПрдХ JSON рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЪрдпрди рдХрд░реЗрдВ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде)ред
- рдЪрдпрди рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рдХрд░реЗрдВред
- рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ (рдСрдкрд░реЗрдЯрд░ =) рдХреЗ рд╕рдЯреАрдХ рдорд┐рд▓рд╛рди рджреНрд╡рд╛рд░рд╛ рдЪрдпрди рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВред
- рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдЪрдпрди рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВред
- рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЪрдпрди рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ (рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрдкрдирд╛ рддрд░реАрдХрд╛ рд╣реИ)ред
- рдЪрдпрди рдореЗрдВ рдореЙрдбрд▓ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (рдореЙрдбрд▓ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рди рд╣реЛрдВ)ред
- рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбрд▓ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдЪрдпрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ (OneToOne, ForeignKey) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
рдореЙрдбрд▓ рд╡рд░реНрдЧ рдХреА рд╡рд┐рд░рд╛рд╕рдд
рддреЛ, рдЖрдЗрдП рдореЙрдбрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЛ рдЕрдм рдЦреБрдж рдХреЛ JSON рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рддрд░реАрдХреЗ рднреА рдЬреЛрдбрд╝реЗред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдЬрдЧрд░ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рдкрд╛рда: class CoolModel ( Model ): class Meta: abstract = True app_label = "db" def __init__ ( self, *args, **kwargs ): super(CoolModel, self).__init__(*args, **kwargs) self.__initial = self._dict def toDict ( self, properties = "*" ): def getValue ( field, properties = "*" ): value = getattr(self, field.name) if isinstance(field, ForeignKey): if field.name in properties: return value.toDict(properties[field.name]) elif isinstance(value, datetime.date) or isinstance(value, datetime.datetime): return value.isoformat() elif isinstance(field, CommaSeparatedIntegerField) and isinstance(value, basestring): return json.loads(value) elif isinstance(value, Decimal): return float(value) elif isinstance(field, ImageField): return value.url if value else None elif isinstance(field, NullBooleanField): return None if value not in (True, False) else 1 if value else 0 else: return value result = {} fields = {} for field in self._meta.fields: fields[field.name] = field if isinstance(field, ForeignKey): idAttr = "%s_id" % field.name result[idAttr] = getattr(self, idAttr) else: result[field.name] = getValue(field, properties) if isinstance(properties, dict): for k, v in properties.iteritems(): if hasattr(self, k): value = getattr(self, k) if isinstance(value, CoolModel): result[k] = value.toDict(v) elif value.__class__.__name__ == "RelatedManager": result[k] = toJSON(value.all(), v) elif value is None: result[k] = {} if k in fields and isinstance(fields[k], ForeignKey) else None else: result[k] = value return result @property def diff ( self ): d1 = self.__initial d2 = self._dict diffs = [(k, (v, d2[k])) for k, v in d1.items() if v != d2[k]] return dict(diffs) @property def original ( self ): try: return self.__class__.objects.get(id = self.id) except self.__class__.DoesNotExist: return None @property def hasChanged ( self ): return bool(self.diff) @property def changedFields ( self ): return self.diff.keys() def getFieldDiff ( self, field_name ): return self.diff.get(field_name, None) def save ( self, *args, **kwargs ): super(CoolModel, self).save(*args, **kwargs) self.__initial = self._dict @property def _dict ( self ): return model_to_dict(self, fields = [field.name for field in self._meta.fields])
рд╡рд░реНрдЧ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЯреЙрдбрд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддреЛ рдкрд╣рд▓реЗ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛрдбрд╝реА рдХрд╛ рдореВрд▓реНрдп (рдореВрд▓реНрдп рд╡рд░реНрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рд╕реНрддрд░ рдкрд░
рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ / рд╡рд░реНрдЧ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХреА рд╡рд┐рдзрд┐ рд╕рд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдлрд┐рд░, рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЬреЛрдбрд╝реА рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐-рдореВрд▓реНрдп рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рдкрддреНрд░ рдХреА рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛:
{ address: { country: null, state: { type: null, fullTitle: null }, district: null, city: { type: null, fullTitle: null }, streetType: null, fullAddress: null }, type: null }
рдпрд╣ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореЙрдбрд▓ рд╕реЗ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдкрддрд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ред рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ, рдмрджрд▓реЗ рдореЗрдВ, рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: рдкрддреЗ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП contry, state, District, City, streetType, fullAddressред рдЕрд╢рдХреНрдд рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ред рдЧреБрдгреЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдРрд╕реЗ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдиреЗрд╕реНрдЯреЗрдб рдЧреБрдгреЛрдВ рдФрд░ рдЪрдпрдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдирд╛
рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рдПрдХ рдПрдХреАрдХреГрдд рд╣реИрдВрдбрд▓рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
urls.py
urlpatpy рдХреЛ urls.py рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
url(r'^(?P<view>[^/]*)/.*$', 'db.views.page')
рдЕрдм
views.py
file рдореЗрдВ
page
рдореЗрдердб рдЬреЛрдбрд╝реЗрдВред
рдкреГрд╖реНрда рд╡рд┐рдзрд┐ def page ( req, view ): models = { "countries": Country, "statetypes": StateType, "states": State, "districts": District, "cities": City, "people": Person
models
рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЬреЛрдбрд╝реА рдХрд╛ рдореБрдЦреНрдп рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИ, рдореВрд▓реНрдп рд╕рдВрдЧрдд рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдЧ рд╣реИред
queryProperties
рдЪрд░ рдореЗрдВ
queryProperties
рдХрд╛ рдореБрдЦреНрдп-рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИ, рдорд╛рди рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдпрд╛ рдРрд╕реЗ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ ("__in", "__gt", "__icontains", рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде)ред рдЪрдпрди рдХреЛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдлрд╝рд┐рд▓реНрдЯрд░ OR рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдпреБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
рдпрд╣ рдХреЗрд╡рд▓ рдмрдирд╛рдиреЗ, рдкрдврд╝рдиреЗ, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
рдпрд╣рд╛рдБ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:@ рд▓реЗрди-рджреЗрдиред com_manually
def create (req, modelClass, items, properties = рдХреЛрдИ рдирд╣реАрдВ):
рдкрд░рд┐рдгрд╛рдо = []
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдЖрдЗрдЯрдо рдореЗрдВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП:
рдореЙрдбрд▓ = рдореЙрдбрд▓рдХреНрд▓рд╛рд╕ ()
k рдореЗрдВ, v рдореЗрдВ item.iteritems ():
рдЕрдЧрд░ рд╣реИрдЯрдЯреНрд░ (рдореЙрдбрд▓, рдХреЗ):
рд╕реЗрдЯрдЯреНрд░ (рдореЙрдбрд▓, рдХреЗ, рд╡реА)
model.save ()
results.append (toJSON (рдореЙрдбрд▓, рдЧреБрдг))
рд▓реЗрди-рджреЗрди.рдХреЙрдо ()
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рд╕рдЪреНрдЪреА,
"рдЖрдЗрдЯрдо": рдкрд░рд┐рдгрд╛рдо
})
рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдИ:
рд▓реЗрди-рджреЗрдиред рд╡рд╛рдкрд╕реА ()
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рдЧрд▓рдд,
"рд╕рдВрджреЗрд╢": e.message
})
рдбреАрдИрдПрдлрд╝ рд░реАрдб (req, modelClass, start = 0, limit = рдХреЛрдИ рдирд╣реАрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ = рдХреЛрдИ рдирд╣реАрдВ, q = рдХреЛрдИ рдирд╣реАрдВ, рд╕реЙрд░реНрдЯрд░реНрд╕ = рдХреЛрдИ рдирд╣реАрдВ, рдЧреБрдг = рдХреЛрдИ рдирд╣реАрдВ):
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдХреНрд╡реЗрд░реА = modelClass.objects.all ()
рдпрджрд┐ рдлрд╝рд┐рд▓реНрдЯрд░:
рдХреНрд╡реЗрд░реА = query.filter (** рдлрд╝рд┐рд▓реНрдЯрд░)
рдпрджрд┐ q:
рдХреНрд╡реЗрд░реА = query.filter (q)
рдпрджрд┐ рд╕реЙрд░реНрдЯрд░реНрд╕:
рдХреНрд╡реЗрд░реА = query.order_by (рд╕реЙрд░реНрдЯрд░реНрд╕)
рдЧрд┐рдирддреА = query.count ()
рдкрд░рд┐рдгрд╛рдо = toJSON (рдХреНрд╡реЗрд░реА [рдкреНрд░рд╛рд░рдВрдн: (рдкреНрд░рд╛рд░рдВрдн + рд╕реАрдорд╛) рдпрджрд┐ рд╕реАрдорд╛ рдФрд░ рдХреЛрдИ рдирд╣реАрдВ], рдЧреБрдг)
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рд╕рдЪреНрдЪреА,
"рдЖрдЗрдЯрдо": рдкрд░рд┐рдгрд╛рдо,
"рдХреБрд▓: рдЧрд┐рдирддреА
})
рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдИ:
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рдЧрд▓рдд,
"рд╕рдВрджреЗрд╢": e.message
})
@ рд▓реЗрди-рджреЗрдиред com_manually
рдбреАрдИрдПрдлрд╝ рдЕрдкрдбреЗрдЯ (рд░реАрдХ, рдореЙрдбрд▓рдХреНрд▓рд╛рд╕, рдЖрдЗрдЯрдо, рдЧреБрдг = рдХреЛрдИ рдирд╣реАрдВ):
рдкрд░рд┐рдгрд╛рдо = []
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдЖрдЗрдЯрдо рдореЗрдВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП:
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдореЙрдбрд▓ = modelClass.objects.get (рдЖрдИрдбреА = рдЖрдЗрдЯрдо ["рдЖрдИрдбреА"])
k рдореЗрдВ, v рдореЗрдВ item.iteritems ():
рдЕрдЧрд░ рд╣реИрдЯрдЯреНрд░ (рдореЙрдбрд▓, рдХреЗ):
рд╕реЗрдЯрдЯреНрд░ (рдореЙрдбрд▓, рдХреЗ, рд╡реА)
model.save ()
results.append (toJSON (рдореЙрдбрд▓, рдЧреБрдг))
рд╕рд┐рд╡рд╛рдп ModelClass.DoesNotExist рдХреЗ:
рдкрд╛рд╕
рд▓реЗрди-рджреЗрди.рдХреЙрдо ()
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рд╕рдЪреНрдЪреА,
"рдЖрдЗрдЯрдо": рдкрд░рд┐рдгрд╛рдо
})
рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдИ:
рд▓реЗрди-рджреЗрдиред рд╡рд╛рдкрд╕реА ()
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рдЧрд▓рдд,
"рд╕рдВрджреЗрд╢": e.message
})
@ рд▓реЗрди-рджреЗрдиред com_manually
рд╣рдЯрд╛рдПрдВ рд╣рдЯрд╛рдПрдВ (req, modelClass, рдЖрдЗрдЯрдо):
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдЖрдЗрдЯрдо рдореЗрдВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП:
modelClass.objects.get (рдЖрдИрдбреА = рдЖрдЗрдЯрдо ["рдЖрдИрдбреА"])ред рд╣рдЯрд╛рдПрдВ ()
рд▓реЗрди-рджреЗрди.рдХреЙрдо ()
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рд╕рдЪ рд╣реИ
})
рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдИ:
рд▓реЗрди-рджреЗрдиред рд╡рд╛рдкрд╕реА ()
рд╡рд╛рдкрд╕реА JsonResponse ({
"рд╕рдлрд▓рддрд╛": рдЧрд▓рдд,
"рд╕рдВрджреЗрд╢": e.message
})
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреНрд░рдорд╢рдГ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдореЙрдбрд▓ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдЪрдпрди рдпрд╛ рдирд┐рд░реНрдорд┐рдд / рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореЙрдбрд▓ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИред
PyCharm рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рджрд░рдЕрд╕рд▓, Pyharm рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рднрдВрдбрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
svn checkout db.tci.lan/svn/db ~/Projects/db
PyCharm рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред рдкрде рдХреЗ рд░реВрдк рдореЗрдВ
~/Projects/db
рдлрд╝реЛрд▓реНрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рдпрд╣рд╛рдВ рдЖрдкрдХреЛ
~/Projects/db
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
db
рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред Settings.py рдХрд╛ рд░рд╛рд╕реНрддрд╛
~/Projects/db/settings.py
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрд╕рд╡реАрдПрди рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдПрдХ рд╕реАрдЖрд░рдпреВрдбреА рдмрдирд╛рдПрдВред
рдЖрдкрдХреЛ
mod.wsgi
рдлрд╝рд╛рдЗрд▓ рднреА рдмрдирд╛рдиреА рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдЕрдкрд╛рдЪреЗ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреА рдереАред
рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреА рд╣реИ: import os, sys sys.path.append('/home/lufton/public_html/db.tci.lan/public') sys.path.append('C:/Documents and Settings/lufton.TCI/Projects') os.environ['DJANGO_SETTINGS_MODULE'] = 'db.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
рдпрд╣рд╛рдБ
sys.path.append
рдЙрдкрдпреЛрдЧ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдЕрднреА рднреА рдХрднреА-рдХрднреА рдХрд░рддрд╛ рд╣реВрдБред
рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рди рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдЖ рдЬрд╛рдПрдВрдЧреЗред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕реНрдерд╛рдиреАрдп рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Django рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ред
рд╕реЗрдиреНрдЦрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ 2 рд╕реЗрдЯрдЕрдк
рд╕реЗрдВрдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕реА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЪрдпрдирд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рддрд╛рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рдкреИрджрд╛ рди рд╣реЛрдВред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рдХрд╛рд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ
~/Projects/db
рд╕реЗрдЯ рдХрд░реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдореЗрдВ,
appFolder: 'js/app'
рд╕реЗрдЯ
appFolder: 'js/app'
рдЕрдм, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ
рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ~/Projects/db/app.js
рд╕реЗ ~/Projects/db/js/app.js
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
app.js
рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
app.js
, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЙрдкрдирд╛рдо рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ
/js/app.js
рдЕрдиреБрд░реЛрдз рдкрд░ рдЙрддреНрдХреГрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ ExtJS рдФрд░ Django рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдЪрд╛рд▓рди рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдм SA рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрд╕рдП рдореЗрдВ рдЕрдЧрд▓реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрд╕рд╡реАрдПрди рдореЗрдВ рдирдП рдмрдирд╛рдП рдЧрдП рдореЙрдбрд▓ / рд╕реНрдЯреЛрд░реЗрдЬ / рд╡реНрдпреВ / рдХрдВрдЯреНрд░реЛрд▓рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ
, рдпрджрд┐ рдЖрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд╕рд╛рд░ app.js
рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦреЗрдВред