рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдЬреАрд╡рди рдореЗрдВ рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╛рдпрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреА рдорд╛рддреНрд░рд╛ рдкрд░ рдЖрдкрдХреА рдЖрдВрдЦреЛрдВ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрд╣реБрдд рдХрдо рд╡рдлрд╛рджрд╛рд░ рд╣реИрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдХреБрдЫ рдирдпрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдпрд╛ рддреЛ рдПрдХ рдирдИ рдЦреЛрдЬ рдХрд░реЗрдВ, рдЕрднреА рддрдХ рдЕрдирдЪрд╛рд╣реЗ рдлрд╝рд╛рдЗрд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм рди рд╣реЛ, рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд░реЗрдВред рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдмрджрд▓реЗ рдореЗрдВ, рдЖрдк рдПрдХ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдВрдХреБ рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рддреНрд░реБрддрд╛рдкреВрд░реНрдг рд╣реЙрд╕реНрдЯрд▓ рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
Google рдХрд╛ Paa рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЦреЛрдЬ рд╣реИ - Google App Engine (рдЗрд╕рдХреЗ рдмрд╛рдж GAE), рдЬреЛ 5 рдЬреАрдмреА рддрдХ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ 1 рдЬреАрдмреА рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ рдкреНрд░рддрд┐ рджрд┐рди 1 рдЬреАрдмреА рдХреЗ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рдХреГрддрд┐ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рдПрдХ рд╕рд╛рде рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛!
рдЬреАрдПрдИ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧреИрд░-рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реЗрд╡рд╛ рдмрдирд╛рдИ, рдЬрд┐рд╕рдХреА рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред
рдЬреАрдПрдИ рдЬрд╛рд╡рд╛, рдЧреЛ рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдкрд╣рд▓реЗ рджреЛ рднрд╛рд╖рд╛рдПрдБ рдореЗрд░реЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдЕрдкрд░рд┐рдЪрд┐рдд рдереАрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рд▓рд┐рдЦреАред рдкрд╣рд▓реЗ, рдЖрдк рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 2.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдЬрд┐рд╕рдиреЗ рдХреБрдЫ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рдкреИрджрд╛ рдХреАрдВ, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ 2.7 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдкрдХреЛ рдЖрдЙрдЯрдбреЗрдЯреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЬреАрдПрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг 2.7 рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдРрдкреЗрдВрдЧрд╛рдЗрди рдПрд╕рдбреАрдХреЗред рд╡рд░реНрдгрди рд▓рд┐рдирдХреНрд╕ рдПрд╕рдбреАрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдореИрдХ рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИ)ред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, "рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ http://appengine.google.com рдкрд░ рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдЖрд╡реЗрджрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИред рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ appspot.com рдХреЗ рдЙрдк-рдбреЛрдореЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо рднреА рд╣реЛрдЧрд╛ред рдЕрдиреНрдп рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд╣реАрдВ рдЫреБрдЖ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдирдХрд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡ рдирд╣реАрдВ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдиреНрдпреВрдирддрдо, app.yaml рдлрд╝рд╛рдЗрд▓ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо, рд░рдирдЯрд╛рдЗрдо рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ URL рд╣реИрдВрдбрд▓рд░реНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред URL рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд╛рдо рдкрд░, рдЕрдм рдЖрдкрдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд╛рд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ), '.py' рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ '.app'
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, app.yaml рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
application: fileshare # fileshare version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /favicon\.ico static_files: favicon.ico upload: favicon\.ico - url: /delete/.* # script: main.app login: admin # . - url: /get/.* # , , login: admin login: required, Google . script: main.app - url: .* # , . script: main.app login: admin
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдРрдк рдЗрдВрдЬрди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреНрд▓реЙрдмрд╕реНрдЯреЛрд░ рд╕реНрдЯреЛрд░реЗрдЬ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП - рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ (рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, Django рд╕реЗ ORM рдХреЗ рд╕рдорд╛рди рдЕрдкрдирд╛ рдврд╛рдВрдЪрд╛ рд╣реИ)ред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ Datastore рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрджреНрд╡рд┐рддреАрдп рдкреВрд░реНрдгрд╛рдВрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде) рдХреЗ рд╕рд╛рде рдПрдХ FileRecord рдСрдмреНрдЬреЗрдХреНрдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ BlobReferenceProperty рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ:
class FileRecord(db.Model): blob = blobstore.BlobReferenceProperty()
URL рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдРрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ WSGIApplication рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ:
app = webapp2.WSGIApplication( [('/', MainHandler), ('/upload', UploadHandler), ('/delete/([^/]+)?', DeleteHandler), ('/get/([^/]+)?', GetHandler), ], debug=False)
рдкреНрд░рд╛рдкреНрдд рдпреВрдЖрд░рдПрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрд╡реЗрджрди рдЗрд╕реА рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, app.yaml рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред
рдЖрд╡реЗрджрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдЬрдм '/' рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХреГрдд рд╣реИ, рдлрд┐рд░ рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- '/ рдЕрдкрд▓реЛрдб' рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ, Blobstore рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░, рдпрджрд┐ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ '/' рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд░рдордг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- '/ рдбрд┐рд▓реАрдЯ /' рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдСрдмреНрдЬреЗрдХреНрдЯ рдирдВрдмрд░ URL рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- Access / get / тАЩрдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп, рдСрдмреНрдЬреЗрдХреНрдЯ рдирдВрдмрд░ рдХреЛ URL рд╕реЗ рднреА рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдбреАрдмрдЧ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдБ:
python google_appengine/dev_appserver.py < >
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛ, рддреЛ dev_appserver.py рдХреЗ рдмрд╛рдж --address 0.0.0.0 рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВред
рдпрджрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
python google_appengine/appcfg.py update < >
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрд╕реЗ рдЖрдкрдХреЗ Google рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдВрдЧрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдЧрд╛ рдФрд░
appid.appspot.com рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ appid рдЖрдкрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред
Code.google.com рдкрд░ рдЖрд╡реЗрджрди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб (рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдмрд╕ app.yaml рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ): http://code.google.com/p/fileshare-appengine
рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд▓рд╛рдн:
- рд╡рд┐рдЬреНрдЮрд╛рдкрди рджреЗрдЦрдиреЗ, рдПрдХ рдорд┐рдирдЯ рд░реБрдХрдиреЗ рдЖрджрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдлрд╛рдЗрд▓ рдХреЛ рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд┐рдВрдХ рдХреЗ рдЬрд░рд┐рдП рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдмрд╣реБрдд рд╣реА рдЙрдЪреНрдЪ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ред
- рдХреЗрд╡рд▓ рд╡рд╣реА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛
- рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛рдУрдВ рдХреЗ рднреАрддрд░, рд╕рдм рдХреБрдЫ рдореБрдлреНрдд рд╣реИред
- рдпрджрд┐ рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрди рднреА рдХрдо рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдФрд░ рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдЯрдХрд▓реЗрдВ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрджреНрдпрддрди рдХрд░реЗрдВ: рдпрд╣ рдЕрднреА рднреА рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИ)ред
neponyatki:
- рдпрд╣ рдЕрдзрд┐рдХрддрдо рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - 2 рдЬреАрдмреА рд░реВрд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ 32 рдПрдордмреА рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
- рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд░реВрд╕реА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХреНрдпреЛрдВред
рдЕрджреНрдпрддрди: рдпрджрд┐ рдпреВрдирд┐рдХреЛрдбрдбрдмрд▓рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╢рд╛рдЦрд╛ HKEY_CLASSES_ROT / Mime / Database / ContentType рд╕реЗ Cyrillic рд╡рд╛рд▓реА рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред
UPDATE2: рдЕрдм рд╕реЛрд░реНрд╕ рдХреЛрдб
http://code.google.com/p/fileshare-appengine/source/rowse/ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
UPDATE3: рд╕рд╛рде рд╣реА рд╕рд╛рде GitHub
https://github.com/SergeyBurma/fileshare-appengine рдкрд░