User:Eleanorg/2.2/yesNo

From XPUB & Lens-Based wiki

An extremely minimal voting interface displays a phrase with the option to vote yes or no.

Various different scripts process the yes and no totals in different ways, producing a range of contrasting visual outputs.

Code

Make db

Run once.

#!/usr/bin/python
#-*- coding:utf-8 -*-
 
import pymongo
from pymongo import Connection
 
connection = Connection()
myDB = connection['yes2']
collection = myDB.collection 

# create a db to count 'no' votes and 'yes' votes, starting at 0
entry = {'title': 'votes', 'yes': 0, 'no':0}
collection.insert(entry)

Voting interface

#!/usr/bin/python
#-*- coding:utf-8 -*-
 
 
import cgi
import cgitb; cgitb.enable()
import pymongo
from pymongo import Connection


 
#========= display the phrase and voting form
 
 
print "Content-Type: text/html"
print 
print """
<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="yes.css">
  </head>
 
<body>

<div class="yesDiv">
<p class="yes">YES.</p>
</div>

<div class="input">
	        <form action="updateYesNoTally.cgi" name="inputForm">	
		<input type="radio" name="vote" value="yes">Yes
		<input type="radio" name="vote" value="no">No
		<br >
		<input type="submit" value="Submit" />
		</form>
</div>
 
</body>
 
</html>"""

Update vote totals in DB

#!/usr/bin/python
#-*- coding:utf-8 -*-
 
import cgi
import cgitb; cgitb.enable()
import pymongo
from pymongo import Connection
# 
#======== get vote
 
form = cgi.FieldStorage()			# Grabs whatever input comes from form
vote = form.getvalue("vote")	

	
 
#========= add user's vote to current tally
 
connection = Connection()
myDB = connection['yes2']
collection = myDB.collection 


for entry in myDB.collection.find({"title": "votes"}):
	yesTotal = entry['yes']
	noTotal = entry['no']
	if vote == "yes":
		yesTotal = yesTotal + 1
		collection.update( {'title': 'votes'}, {"$set":{'yes': yesTotal}} )
	elif vote == "no":
		noTotal = noTotal + 1
		collection.update( {'title': 'votes'}, {"$set":{'no': noTotal}} )

#============ print thank you to user

print "Content-Type: text/html"
print 
print """
<!DOCTYPE html>
<html>
  <head>
    <title></title>
  </head>
 
<body>"""
print "Thank you, your vote was added. There are now " + str(yesTotal) + """ 'yes' votes, and """ + str(noTotal) + " 'no' votes."
print """
</body>
</html>
"""