Python基础教程__项目(公告板)
2014-12-09 17:10
686 查看
由于最近学习Python,从最基础的Python基础教程学起,其中最后的十个项目还是很不错的。个人认为。本人新手,如有错误,还请指教。
书上用的是PostgreSQL,这里用的是MySQL。由于这是一个CGI项目。所以事先需要准备一个可以运行CGI脚本的试验环境。
本次用的是Apache运行cgi。配置网上很多。
其次需要创建一个数据表:
一、下面废话省略,直接上代码和运行图片:
1、main.cgi
二、运行截图
书上用的是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> """ % subject4、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基础教程项目(5)虚拟茶话会
- python基础教程里的项目2:画幅好画
- python基础教程项目1:及时标记
- python基础教程项目六:使用CGI进行远程编辑
- 项目4:新闻聚合-Python基础教程
- python基础教程项目五之虚拟茶话会
- 超具实战意义的Python项目课程:四周实现爬虫系统 超经典的Python零基础实战化教程
- PYTHON基础教程中十个项目(2)
- Python基础教程:第2版(经典教程的全新改版,10个项目引人入胜 )
- python基础教程项目三之万能的XML
- python基础教程项目四之新闻聚合
- python基础教程项目二之画幅好画
- lynda.com教程之Learing Python and Django零基础搭建Django项目
- 【Python】读书笔记:Python基础教程-项目1-即时标记
- Python基础教程十个项目(3)
- python基础教程项目2:画幅好画
- PYTHON基础教程中的十个项目(1)
- 信息系统项目管理师视频教程——10 信息系统项目管理基础
- 【C011】Python - 基础教程学习(二)
- xml-RPC Python基础教程