Hi All,I am trying to write a web app where a variable, passed with a form, is used to generate a plot, which is saved and then displayed as a static image in an html page. I am using the webform from pythonweb and generating the plot with matplotlib. I am using Apache 2.053 under Windows XP. I am keeping it real simple by simply passing an integer. The whole process works, HOWEVER, when I back page and submit a new integer value which generates a new plot and new static image, the new image does not get displayed, instead the last version of the static image (plot) is displayed (presumably from the cache). If I reload the page with the browser the updated image gets displayed otherwise the previous plot gets displayed with 2 or 3 re-submits and then eventually an updated one is displayed. It seems like Apache does not recognize a changed image and still uses the first plot I created for 2 or 3 submits or the submit does not force Apache to look for a changed file.
I am new to Apache, Pythonweb and MatplotLib although I have done similar stuff with ASP and IIS and some Python work. I have waded through the Apache and Pythonweb documentation and got nowhere. I have tried using the MOD_EXPIRES directive with Apache but this has no effect. I think this is because a new image (PNG) has been generated rather than an old one has expired. I cannot see any way with pythonweb forms to load a static html page (i.e. with cgi). I think if I had a static html page I could write out maybe I could expire that which would force Apache to load the new image file.
I have tried <META HTTP-EQUIV=Refresh CONTENT=1> which refreshes the page every second - this works but who would want it! I have tried <META HTTP-EQUIV=expires CONTENT=0> but this does not work.I have attached the code below, its a rework of one of the examples in pythonweb. Just copy this to the cgi-bin directory and it should work, provided matplotlib is installed. Matplotlib is available from:
http://matplotlib.sourceforge.net/ Pythonweb is available from: http://www.pythonweb.orgDespite hours of trying I cannot get this to work, which would seem like a necessity for Pythonweb and Apache. Any help would be much appreciated.
Thanks, Simon ---cut here #!d:/apps/Python23/python "The form that will not update" import sys, re, os sys.path.append('../') sys.path.append('../../')import web.error; web.error.handle(handler='browser', output='debug', format='html')
import web, web.form, web.form.field.basic, web.util import web.form.field.typed from pylab import * class ExampleForm(web.form.Form):def setup(self): self.addField(web.form.field.typed.Integer('myval', default=6, required=True)) # The preffered way of adding submit buttons is as actions so Submit buttons are normally not used.
self.addAction('Validate This Form') # Print the HTTP Header print web.header('text/html') # Create a form exampleForm = ExampleForm('form', os.environ['SCRIPT_NAME'], 'get') if len(web.cgi) > 0: # Form submitted # Populate form with the values from get.# Populate the form exampleForm.populate(web.cgi) # Process the form (Validate) if exampleForm.valid(): # Grab the desired value, from the form
myval=exampleForm['myval'].value# Create the plot, saved as a png in the htdocs directory
myarray=[myval,4,9,16] print myarray plot([1,2,3,4], myarray, 'ro') axis([0, 6, 0, 20]) savefig('../htdocs/plot.png')print "<hmtl><body><div align=center><img src=/plot.png alt=theplot></div></body></html>"
else:print "<html><head><title>noupdate</title></head><body>\n<h1>Input integer 0-10</h1>%s\n<hr></body></html>"%(exampleForm.html())
---end cut --------------------------------------------------------------------- The official User-To-User support forum of the Apache HTTP Server Project. See <URL:http://httpd.apache.org/userslist.html> for more info. To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx " from the digest: users-digest-unsubscribe@xxxxxxxxxxxxxxxx For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx
![]() |