Diferencia entre revisiones de «Usuario:Lmorillas/desarrollo web servidor/python cgi»
De WikiEducator
| Línea 88: | Línea 88: | ||
</source> | </source> | ||
|Title=Subir un archivo | |Title=Subir un archivo | ||
| + | }} | ||
| + | |||
| + | {{Conocimiento previo| | ||
| + | <source lang="python"> | ||
| + | #!/usr/bin/python | ||
| + | |||
| + | # HTTP Header | ||
| + | print "Content-Type:application/octet-stream; name=\"FileName\"\r\n"; | ||
| + | print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n"; | ||
| + | |||
| + | # Actual File Content will go hear. | ||
| + | fo = open("foo.txt", "rb") | ||
| + | |||
| + | str = fo.read(); | ||
| + | print str | ||
| + | |||
| + | # Close opend file | ||
| + | fo.close() | ||
| + | </source> | ||
| + | |Title=Lanzar descarga de archivo | ||
}} | }} | ||
Revisión de 21:55 17 oct 2013
|
|
(Cap. 4 de Real Python for the Web, de Michael Herman)
|
Tip:
- Para los ejercicios usaremos CGIHTTPServer
python -m CGIHTTPServer
- Los programas cgi estarán en un subdirectorio cgi-bin
- Esos programas tienen que estar identificados como programas python
#!/usr/bin/env python
- Tienen que tener permisos de ejecución
$ chmos +x <programa_cgi.py>
#!/usr/bin/env python import BaseHTTPServer import CGIHTTPServer import cgitb; cgitb.enable() ## Para mostrar errores CGI server = BaseHTTPServer.HTTPServer handler = CGIHTTPServer.CGIHTTPRequestHandler server_address = ("", 8000) handler.cgi_directories = [""] ## En qué directorios puede haber programas CGI httpd = server(server_address, handler) httpd.serve_forever()
|
<form enctype="multipart/form-data" action="save_file.py" method="post"> <p>File: <input type="file" name="filename" /></p> <p><input type="submit" value="Upload" /></p> </form> #!/usr/bin/python import cgi, os import cgitb; cgitb.enable() form = cgi.FieldStorage() # Get filename here. fileitem = form['filename'] # Test if the file was uploaded if fileitem.filename: # strip leading path from file name to avoid # directory traversal attacks fn = os.path.basename(fileitem.filename) open('/tmp/' + fn, 'wb').write(fileitem.file.read()) message = 'The file "' + fn + '" was uploaded successfully' else: message = 'No file was uploaded' print """\ Content-Type: text/html\n <html> <body> <p>%s</p> </body> </html> """ % (message,)
|
#!/usr/bin/python # HTTP Header print "Content-Type:application/octet-stream; name=\"FileName\"\r\n"; print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n"; # Actual File Content will go hear. fo = open("foo.txt", "rb") str = fo.read(); print str # Close opend file fo.close()
|