Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:others:webpy [2011/11/23 07:51] alfred |
fw:others:webpy [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 52: | Línea 52: | ||
| web.input() # Devuelve lista de parámetros. | web.input() # Devuelve lista de parámetros. | ||
| </code> | </code> | ||
| + | |||
| ==== Tratar la salida ==== | ==== Tratar la salida ==== | ||
| Línea 61: | Línea 62: | ||
| return render.index(code) | return render.index(code) | ||
| </code> | </code> | ||
| + | Puedes ver distintos content-type [[code:concepts#protocolo_http|aquí]]. | ||
| === Devolver un fichero === | === Devolver un fichero === | ||
| <code python> | <code python> | ||
| Línea 80: | Línea 81: | ||
| ==== Sesiones y autentificación ==== | ==== Sesiones y autentificación ==== | ||
| [[http://webpy.org/docs/0.3/sessions]] | [[http://webpy.org/docs/0.3/sessions]] | ||
| + | |||
| + | |||
| ==== Contenido estático ==== | ==== Contenido estático ==== | ||
| + | === Carpeta static === | ||
| + | Podemos agregar una carpeta static en la ruta de la aplicación, esta contendrá los documentos que no cambian. Por ejemplo ''<nowiki>http://localhost/static/logo.png</nowiki>'' enviaría la imágen ''./static/logo.png''. \\ | ||
| + | Una carpeta mapeada a partir de la directiva ''Alias'' de Apache también serviría. | ||
| + | === A partir de código === | ||
| + | <code python> | ||
| + | import os | ||
| + | import web | ||
| + | |||
| + | urls = ( | ||
| + | '/images/(.*)', 'images' #this is where the image folder is located.... | ||
| + | ) | ||
| + | |||
| + | class images: | ||
| + | def GET(self,name): | ||
| + | ext = name.split(".")[-1] # Gather extension | ||
| + | |||
| + | cType = { | ||
| + | "png":"images/png", | ||
| + | "jpg":"image/jpeg", | ||
| + | "gif":"image/gif", | ||
| + | "ico":"image/x-icon" } | ||
| + | |||
| + | if name in os.listdir('images'): # Security | ||
| + | web.header("Content-Type", cType[ext]) # Set the Header | ||
| + | return open('images/%s'%name,"rb").read() # Notice 'rb' for reading images | ||
| + | else: | ||
| + | raise web.notfound() | ||
| + | </code> | ||
| ==== Subir ficheros ==== | ==== Subir ficheros ==== | ||
| Línea 146: | Línea 177: | ||
| === ... Usarlo en un servidor de producción? === | === ... Usarlo en un servidor de producción? === | ||
| Tipo Apache o Lighttpd. \\ | Tipo Apache o Lighttpd. \\ | ||
| + | |||
| + | |||
| ==== Notas ==== | ==== Notas ==== | ||
| + | === Aplicaciones de ejemplo === | ||
| + | * {{fw:others:webpy:andreisavu-music-share-09b9eec.zip|Aplicación para compartir .mp3}} | ||
| + | === Ideas para la creación de un proceso en background === | ||
| + | :!: Falta probar en producción | ||
| + | <code python> | ||
| + | #!/usr/bin/python | ||
| + | # -*- coding: utf-8 *-* | ||
| + | |||
| + | import web | ||
| + | import json | ||
| + | from mimerender import mimerender | ||
| + | from multiprocessing import Process | ||
| + | |||
| + | render_xml = lambda message: '<message>%s</message>'%message | ||
| + | render_json = lambda **args: json.dumps(args) | ||
| + | render_html = lambda message: '<html><body>%s</body></html>'%message | ||
| + | render_txt = lambda message: message | ||
| + | |||
| + | urls = ( | ||
| + | '/(.*)', 'greet' | ||
| + | ) | ||
| + | app = web.application(urls, globals()) | ||
| + | p = Process() | ||
| + | |||
| + | class greet: | ||
| + | @mimerender( | ||
| + | default = 'html', | ||
| + | html = render_html, | ||
| + | xml = render_xml, | ||
| + | json = render_json, | ||
| + | txt = render_txt | ||
| + | ) | ||
| + | def GET(self, name): | ||
| + | global p | ||
| + | p = Process(target = self.test) | ||
| + | p.start() | ||
| + | if not name: | ||
| + | name = 'world' | ||
| + | return {'message': 'Hello, ' + name + '!'} | ||
| + | | ||
| + | def test (self): | ||
| + | import os | ||
| + | print 'entra!!!' | ||
| + | os.system('ls -laR / > /home/alfred/Desktop/test.txt') | ||
| + | |||
| + | if __name__ == "__main__": | ||
| + | app.run() | ||
| + | p.join() | ||
| + | </code> | ||