Dynamic Web Programming: pg & cgi modules

advertisement
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.)
2
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_id bigint,
subject text,
degree text,
college text,
year int );
3
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’;”)
4
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)
5
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))
6
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>
7
Applications in Time Domain
1. A Treasures Portal
2. Follow-up Marshals
a. Extragalactic Transients
b. Milky Way Variables
c. Solar System
d. Target-of-opportunity
8
iPTF Treasures Portal
9
Developers: MMK, Yi Cao
The iPTF Treasure Chest
A versatile portal with query derivatives:
1. ROBOTIC treasurer
2. SYSTEMATIC daily monitoring
3. YOUNG supernovae
4. GAP transients in the local universe
5. SLOWLY rising supernovae
6. LARGE amplitude stars
7. Fermi/Icecube target of opportunity fields triggers
8. M31/M33 transients and variables
9. FAST Transients
10. NUCLEAR Transients
Developers: MMK, Yi Cao, Iair Arcavi
10
11
Developers: Robert Quimby, MMK, Iair Arcavi
12
13
Light Curves: Key to Variable Stars
14
Developers: David Levitan
Automatically match with SDSS, WISE, Simbad
Links to NED, CRTS, LINEAR, etc.
Periods
15
Period search
16
Movement: Key to Asteroids
Developer:
Adam Waszczak
17
Target-of-Opportunity Marshal
Developer:
Leo Singer
18
Questions?
19
Download