您的位置:首页 > 编程语言 > Python开发

Python基础教程__项目(公告板)

2014-12-09 17:10 686 查看
由于最近学习Python,从最基础的Python基础教程学起,其中最后的十个项目还是很不错的。个人认为。本人新手,如有错误,还请指教。
书上用的是PostgreSQL,这里用的是MySQL。由于这是一个CGI项目。所以事先需要准备一个可以运行CGI脚本的试验环境。
本次用的是Apache运行cgi。配置网上很多。
其次需要创建一个数据表:
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`subject` varchar(100) NOT NULL,
`sender` varchar(15) NOT NULL,
`reply_to` int(11) DEFAULT NULL,
`text` mediumtext NOT NULL,
PRIMARY KEY (`id`)
)
一个简单的公告板,主要功能:显示所有公告、查看单个公告、编辑公告、保存公告、删除公告(个人增加的)。根据这些功能可以创建五个对应的脚本:main.cgi、view.cgi、edit.cgi、save.cgi、delete.cgi
一、下面废话省略,直接上代码和运行图片:
1、main.cgi
#!/usr/bin/python

print 'Content-type: text/html\n'

import cgitb; cgitb.enable()
import MySQLdb

conn=MySQLdb.connect(host='localhost',user='root', db='blog')
curs=conn.cursor()

print """
<html>
<head>
<title>The Blog Bulletin</title>
</head>
<body>
<h1>The Blog Bulletin</h1>
"""

curs.execute('select * from messages')
rows=curs.fetchall()
toplevel=[]
children={}

for row in rows:
parent_id=row[3]
if parent_id is None:
toplevel.append(row)
else:
children.setdefault(parent_id,[]).append(row)

def format(row):
print '<p><a href="view.cgi?id=%i">%s</a> | <a href="delete.cgi?id=%i">Delete</a></p>' % (row[0],row[1],row[0])
try: kids=children[row[0]]
except KeyError: pass
else:
print '<blockquote>'
for kid in kids:
format(kid)
print '</blockquote>'

print '<p>'

for row in toplevel:
format(row)

print """
</p>
<hr />
<p><a href="edit.cgi">Post Message</a></p>
</body>
</html>
"""
2、view.cgi
#!/usr/bin/python

print 'Content-type: text/html\n'

import cgitb; cgitb.enable()
import MySQLdb

conn=MySQLdb.connect(host='localhost',user='root',db='blog')
curs=conn.cursor()

import cgi,sys
form=cgi.FieldStorage()
id=form.getvalue('id')

print """

<html>
<head>
<title>View Message</title>
</head>
<body>
<h1>View Mesage</h1>
"""

try: id = int(id)
except:
print 'Invalid message ID'
sys.exit()

curs.execute('select * from messages where id=%i' % id)
rows=curs.fetchall()

if not rows:
print 'Unknown message ID'
sys.exit()

row=rows[0]

print """
<p><b>Subject:</b> %s<br />
<b>Sender:</b> %s<br />
<pre>%s</pre>
</p>
<hr />
<a href='main.cgi'>Back Home</a>
| <a href='edit.cgi?reply_to=%s'>Reply</a>
</body>
</html>
""" % (row[1],row[2],row[4],row[0])
3、edit.cgi
#!/usr/bin/python

print 'Content-type: text/html\n'

import cgitb; cgitb.enable()
import MySQLdb

conn=MySQLdb.connect(host='localhost', user='root', db='blog')
curs=conn.cursor()

import cgi, sys
form=cgi.FieldStorage()
reply_to=form.getvalue('reply_to')

print """
<html>
<head>
<title>Compose Message</title>
</head>
<body>
<h1>Compose Message</h1>

<form action='save.cgi' method='POST'>
"""

subject=''
if reply_to is not None:
print '<input type="hidden" name="reply_to" value="%s"/>' % reply_to
curs.execute('select subject from messages where id=%s' % reply_to)
subject=curs.fetchone()[0]
if not subject.startswith('Re: '):
subject='Re: '+ subject

print """
<b>Subject:</b><br />
<input type='text' size='40' name='subject' value='%s' /><br />
<b>Sender:</b><br />
<input type='text' size='40' name='sender' /><br />
<b>Message:</b><br />
<textarea name='text' cols='40' rows='20'></textarea><br />
<input type='submit' value='Save'/>
</form>
<hr />
<a href='main.cgi'>Back Home</a>
</body>
</html>
""" % subject
4、save.cgi
#!/usr/bin/python

print 'Content-type: text/html\n'

import cgitb; cgitb.enable()

def quote(string):
if string:
return string.replace("'", "\\'")
else:
return string

import MySQLdb
conn=MySQLdb.connect(host='localhost', user='root', db='blog')
curs=conn.cursor()

import cgi, sys
form=cgi.FieldStorage()

sender=quote(form.getvalue('sender'))
subject=quote(form.getvalue('subject'))
text=quote(form.getvalue('text'))
reply_to=form.getvalue('reply_to')

if not (sender and subject and text):
print 'Plz supply sender, subject, and text'
sys.exit()

if reply_to is not None:
query = """
insert into messages(reply_to, sender, subject, text)
value(%i, '%s', '%s', '%s')""" % (int(reply_to), sender, subject, text)
else:
query = """
insert into messages(sender, subject, text)
value('%s', '%s', '%s')""" % (sender, subject, text)

curs.execute(query)
conn.commit()

print """
<html>
<head>
<title>Message Saved</title>
</head>
<body>
<h1>Message Saved</h1>
<hr />
<a href='main.cgi'>Back Home</a>
</body>
</html>s
"""
5、delete.cgi
#!/usr/bin/python

print 'Content-type: text/html\n'

import cgitb; cgitb.enable()
import MySQLdb

conn=MySQLdb.connect(host='localhost', user='root', db='blog')
curs=conn.cursor()

import cgi, sys
form=cgi.FieldStorage()
id=form.getvalue('id')

print """

<html>
<head>
<title>Delete Page</title>
</head>
<body>
<h1>Delete Page!</h1>
"""
try: id = int(id)
except:
print "Invalid message ID."
sys.exit()

print """
<p>Delete subject object successful.<p>
"""
curs.execute('delete from messages where id=%i' % id)
conn.commit()

print """
</p>
<hr />
<p><a href="main.cgi">Back Home</a></p>
</body>
</html>
"""


二、运行截图














内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python cgi