My Google App Engine application is a workout followup utility. You can enter your times or distances, and the results are shown in list. Graphs were added using the Google Chart API. The URL is http://workoutfollowup.appspot.com/ (note : you will have to login with your Google ID).
One of the things added recently is the ability to download the results as a csv file. The following code snippet shows how to do this. The key thing is setting the Content-Disposition header, this tells the browser that a csv file is coming. The browser will then show a dialog box, where you can specify where you want to save the file. Otherwise the code is pretty standard Python : the standard csv module is used to create a csv file in memory in the StringIO object.
class CsvPage(webapp.RequestHandler): def get(self): user = users.get_current_user() if user: output = StringIO.StringIO() writer=csv.writer(output, dialect='excel') query = db.GqlQuery("""SELECT * FROM Workout WHERE added_by = :1 ORDER BY date DESC """, users.get_current_user()) writer.writerow(['date', 'minutes', 'distance', 'calories']) for workout in query: row=[workout.date.strftime("%x"), workout.minutes, \ workout.distance, workout.calories] writer.writerow(row) self.response.headers["Content-Type"] = "application/x-csv" self.response.headers['Content-Disposition'] = 'attachment;' \ 'filename=workouts.csv' self.response.out.write(output.getvalue()) output.close() else: self.redirect(users.create_login_url(self.request.uri))
Lines with \ at the end are continued on the next line, in the standard Python fashion.
Post a Comment