博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础教程__项目(公告板)
阅读量:7222 次
发布时间:2019-06-29

本文共 5794 字,大约阅读时间需要 19 分钟。

  由于最近学习Python,从最基础的Python基础教程学起,其中最后的十个项目还是很不错的。个人认为。本人新手,如有错误,还请指教。

书上用的是PostgreSQL,这里用的是MySQL。由于这是一个CGI项目。所以事先需要准备一个可以运行CGI脚本的试验环境。

本次用的是Apache运行cgi。配置网上很多。

其次需要创建一个数据表:

1
2
3
4
5
6
7
8
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/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>
"""

二、运行截图

本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1588007,如需转载请自行联系原作者

你可能感兴趣的文章
visual studio code前端插件及常用快捷键【转】
查看>>
Chapter 4 Invitations——22
查看>>
iOS keychain注解
查看>>
二叉堆
查看>>
Dive into python
查看>>
学习STL-介绍一下STL
查看>>
程序人生系列之新闻发布系统 44-62
查看>>
Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
查看>>
TreeView对象选择某节点下所有节点与子节点
查看>>
The New Envjs Project The New Envjs Project
查看>>
潜移默化学会WPF(转载篇)--屏幕显示Label,鼠标移上去变成textBox
查看>>
如何获取元素最终使用的css值
查看>>
window.print ()
查看>>
Mysql索引优化
查看>>
施乐 著名的帕洛阿尔托研究中心
查看>>
在WordPress上不同位置添加广告位
查看>>
The best programmers are the quickest to Google
查看>>
[置顶] 第十七章——配置SQLServer(2)——32位和64位系统中的内存配置
查看>>
【Android】Parse开发笔记(1)—— 准备
查看>>
问题描述符USB枚举错误 bus hound bad config desc
查看>>