免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6643 | 回复: 11
打印 上一主题 下一主题

自己写一个极端简陋的python留言板 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-22 13:54 |只看该作者 |倒序浏览
极端简单的,秉着切磋学习的精神贴上来,欢迎拍砖

http://python99.freebsdhost.org/board.py

因为是在网上直接写的,我用的这个免费空间用的是fastcgi模式,一旦我程序写错了都是500错误,写起来非常费劲,程序虽然简陋,也磕磕绊绊花了一天的时间.其中在处理留言者提交的变量,就是post的username和msg变量,我找不到python里可以直接处理的模块.在php里好像直接用$_POST['username']和$_POST['msg']就可以了,python里好像不行,所以我用了正则好歹匹配上了,不过如果是复杂的留言,估计会出错.这里大家如果有更好的方法,欢迎贴出来切磋.
       
       
mysql数据库:
CREATE TABLE IF NOT EXISTS `msg` (
  `id` bigint(12) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `ip_address` varchar(16) COLLATE utf8_unicode_ci NOT NULL,
  `data` text COLLATE utf8_unicode_ci NOT NULL,
  `time` int(10) NOT NULL,
  RIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

phpmyadmin导入即可
       
       
文件源码:
#!/usr/local/python2/bin/python
# -*- coding: utf-8 -*-

import re
import time
import urllib
import adodb
import MySQLdb

def myapp(environ, start_response):

    #////////////////数据库初始化/////////////
    conn = adodb.NewADOConnection('mysql')
    conn.Connect('localhost','user','passwd','dbname')
    #////////////////数据库初始化/////////////
    conn.Execute("set names 'utf8'")
    
    username = ""
    data = ""
    post = str(environ['wsgi.input'].read())
    if len(post)>0:
        p = re.compile('username=(.*?)&msg=(.*?)&submit')
        urls = p.findall(post)
        i = 0
        for x in urls[0]:
            if i==1:
                data = urllib.unquote(x)
            else:
                username = x
            i += 1
        
        conn.Execute("INSERT INTO `msg` ( `id`, `username`, `ip_address`, `data`, `time` ) VALUES (%s, %s, %s, %s, %s)", (None, MySQLdb.escape_string(username), MySQLdb.escape_string(environ['REMOTE_ADDR']), MySQLdb.escape_string(data), time.time()))
    
    post_table = ''
    res = conn.Execute('select * from msg')
    #print cursor.fields[1]
    while not res.EOF:
        topic = res.GetRowAssoc(0)
        post_table += '<br><table width=600 border=1 cellspacing=\'2\' cellpadding=\'2\'><tr><td width=100>用户名</td><td>'+str(topic['username'])+'</td></tr><tr><td>留言时间</td><td>'+str(time.strftime('%Y-%m-%d %X', time.localtime(topic['time'])))+'</td></tr><tr><td>留言内容</td><td>'+str(topic['data'])+'</td></tr><tr></tr></table>'
        res.MoveNext()
    res.Close()

    start_response('200 OK', [('Content-Type', 'text/html')])
    return ["<html><HEAD><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"><TITLE>留言板</TITLE></HEAD><body><form action=\"./board.py\" method=\"post\"><table width=600 border=1 cellspacing=\"2\" cellpadding=\"2\"><tr><td>用户名</td><td><input type=\"text\" name=\"username\" size=\"20\"></td></tr><tr><td>留言内容</td><td><textarea name=\"msg\" rows=\"3\" cols=\"60\"></textarea></td></tr><tr><td colspan=2><input name=\"submit\" type=\"submit\" value=\"提交留言\"></td></tr></table></form></body></html>"+post_table] #HTTP返回
    

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()


[ 本帖最后由 bsdbbs 于 2009-6-22 13:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-22 14:06 |只看该作者
系统自带有个cgi库的,你可以瞅瞅。

论坛徽章:
0
3 [报告]
发表于 2009-06-22 14:22 |只看该作者
遇到一个问题,留言的空格会自动被加号代替,暂时没找到症结

论坛徽章:
0
4 [报告]
发表于 2009-06-22 14:27 |只看该作者
用unquote_plus替换掉unquote后就好了

论坛徽章:
0
5 [报告]
发表于 2009-06-22 14:29 |只看该作者
原帖由 smallfish_xy 于 2009-6-22 14:06 发表
系统自带有个cgi库的,你可以瞅瞅。
那空间的python是运行在fastcgi模式下的

[ 本帖最后由 smallfish_xy 于 2009-6-22 14:52 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-06-22 14:52 |只看该作者
原帖由 bsdbbs 于 2009-6-22 14:29 发表

跟fastcgi没关系,fastcgi只是一种运行方式
cgi.py是系统自带的一个库,可以获取提交的post或者get值,还有escape之类的。可以省你自己去解析。

论坛徽章:
0
7 [报告]
发表于 2009-06-22 15:01 |只看该作者
有这事,研究下,我

论坛徽章:
0
8 [报告]
发表于 2009-06-22 15:14 |只看该作者
失败,好像是因为在fastcgi的WSGIServer框架下面,cgi模块无法获得变量,我以后用cgi模式写的时候再测试吧

论坛徽章:
0
9 [报告]
发表于 2009-06-22 15:19 |只看该作者
原帖由 bsdbbs 于 2009-6-22 15:14 发表
失败,好像是因为在fastcgi的WSGIServer框架下面,cgi模块无法获得变量,我以后用cgi模式写的时候再测试吧

不会的,你可以看下具体方法,或者源码。

论坛徽章:
0
10 [报告]
发表于 2009-06-22 16:33 |只看该作者
那我明日再试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP