190 likes | 349 Vues
Explore the integration of Python pg and CGI modules for dynamic web programming. This guide covers creating logical tables to organize large datasets, managing data with fast complex queries, and handling database transactions for insertions, deletions, and updates. Understand the creation of a database schema using SQL and practical examples—including HTML forms for user interaction and cookie handling. Learn how to build nimble web pages that facilitate seamless data interactions with a PostgreSQL database, thereby enhancing your web application development skills.
E N D
Dynamic Web Programming:python pg and cgi modules Mansi M. Kasliwal Carnegie Institution for Science California Institute of Technology
Database • Logical tables to organize large amounts of data • Easy-to-manage: add/subtract/modify • Structure facilitating super-fast complex queries • Python “pg” module • connect • query, insert, delete, update (Note: psycopg2 module for cursor handling in large databases, copy command etc.)
An Example Database Schema createdb tutorial psql –d tutorial CREATE SEQUENCE people_id_seq; CREATE TABLE people ( id bigint NOT NULL default nextval(‘people_id_seq’), firstname text, lastname text ); CREATE TABLE education ( people_idbigint, subject text, degree text, college text, year int);
Example pg commands import pg #Connect to Database db = pg.connect(dbname=‘tutorial’, host=‘localhost’, user=‘mmk’) #Add Entries db.insert(people, [firstname=‘mansi’, lastname=‘kasliwal’]) delete(table, [d,] [key = val, ...]) update(table, [d,] [key = val, ...]) #Example Query Joining Two Tables result = db.query(“SELECT * from people, education WHERE people.id = education.people_id AND subject=‘astronomy’;”)
Dynamic Web Programming • Generate nimble webpages on-the-fly that push and pull data to and fro a database • Python “cgi” module is easy-to-use • URL: GET method • e.g. tutorial.cgi?firstname=‘mansi’&lastname=‘kasliwal’ • FORM: POST method • Radio buttons or check boxes • Drop down menu • File upload/download • Blank Text Area • Retrieving cookies • e.g. os.environ['REMOTE_USER'] (Note: wsgi is more portable than cgi since it unifies the application programming interface; wsgi = Web Server Gateway Interface)
Example Form #!/usr/bin/python # Import modules for CGI handling import cgi, cgitb # Create instance of FieldStorage form =cgi.FieldStorage() # Put up a form <form action="/cgi-bin/tutorial.cgi" method="post"> First Name: <input type="text" name="firstname"> <br /> Last Name: <input type="text" name="lastname" /> <input type="submit" value="Submit" /> </form> # Get data from fields first_name = form.getvalue('firstname') last_name = form.getvalue('lastname') #Insert entry into database db.insert(people, [firstname=‘%s’, lastname=‘%s’] %(first_name, last_name))
Check box / Dropdown Menu <form action="/cgi-bin/checkbox.cgi" method="POST" target="_blank"> <input type="checkbox" name="maths" value="on" /> Maths <input type="checkbox" name="physics" value="on" /> Physics <input type="submit" value="Select Subject" /> </form> <form action="/cgi-bin/dropdown.cgi" method="post" target="_blank"> <select name="dropdown"> <option value="Maths" selected>Maths</option> <option value="Physics">Physics</option> </select> <input type="submit" value="Submit"/> </form>
Applications in Time Domain • A Treasures Portal • Follow-up Marshals • Extragalactic Transients • Milky Way Variables • Solar System • Target-of-opportunity
iPTF Treasures Portal Developers: MMK, Yi Cao
The iPTF Treasure Chest A versatile portal with query derivatives: ROBOTIC treasurer SYSTEMATIC daily monitoring YOUNG supernovae GAP transients in the local universe SLOWLY rising supernovae LARGE amplitude stars Fermi/Icecube target of opportunity fields triggers M31/M33 transients and variables FAST Transients NUCLEAR Transients Developers: MMK, Yi Cao, IairArcavi
Light Curves: Key to Variable Stars Developers: David Levitan
Automatically match with SDSS, WISE, SimbadLinks to NED, CRTS, LINEAR, etc. Periods
Movement: Key to Asteroids Developer: Adam Waszczak
Target-of-Opportunity Marshal Developer: Leo Singer