python 简单网站 以及sqlite 操作 BaseHTTPServer

今天有需求做一个简单的http服务,

根据url 返回数据库查询结果即可 

10.20.9.25:8123/validate?name=asd&passwd=123456  验证用户

10.20.9.25:8123/register?name=asd&passwd=123456 添加用户

启动服务 python httpserverdemo.py 8123    不输入参数默认为8000

10.20.9.25:8123/validate?name=sunlei&passwd=123456

10.20.9.25:8123/register?name=sunlei&passwd=123456

如果部署在新的环境下,运行 python createdb.py  建立数据库

httpserverdemo.py文件

#encoding=utf-8
'''

'''
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import io,shutil  
import urllib,time
import getopt,string
import sys
import sqlite3

from  sql import sqloption
class MyRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.process(2)

    def do_POST(self):
        self.process(1)
        
    def process(self,type):
        
        content =""
        if type==1:#post方法,接收post参数
            datas = self.rfile.read(int(self.headers['content-length']))
            datas = urllib.unquote(datas).decode("utf-8", 'ignore')#指定编码方式
            datas = transDicts(datas)#将参数转换为字典
            if datas.has_key('data'):
                content = "data:"+datas['data']+"\r\n"
                
        if '?' in self.path:
            query = urllib.splitquery(self.path)
            print query[0]
            print query[1]
            action = query[0]
            
            if query[1]:#接收get参数
                queryParams = {}
                for qp in query[1].split('&'):
                    kv = qp.split('=')
                    queryParams[kv[0]] = urllib.unquote(kv[1]).decode("utf-8", 'ignore')
                print queryParams
                if action == '/register':
                    print 'register get '
                    a=sqloption()
                    if queryParams['name'] and queryParams['passwd']:
                        if a.sqlinsert(queryParams['name'],queryParams['passwd'])==True:
                            content ='1'
                        else:
                            content ='0' 
                    else:
                        content ='0' 
                    a.close()
                elif action == '/validate':
                    print 'validate get'
                    a=sqloption()
                    if queryParams['name'] and queryParams['passwd']:
                        if a.sqlselect(queryParams['name'],queryParams['passwd'])==True:
                            content ='1'
                        else:
                            content ='0' #validate false
                    else:
                        content='0'#chanshu buzhengque
                    a.close()                                          
            #指定返回编码
            enc="UTF-8"  
            content = content.encode(enc)          
            f = io.BytesIO()  
            f.write(content)  
            f.seek(0)  
            self.send_response(200)  
            self.send_header("Content-type", "text/html; charset=%s" % enc)  
            self.send_header("Content-Length", str(len(content)))  
            self.end_headers()  
            shutil.copyfileobj(f,self.wfile)   

def transDicts(params):
    dicts={}
    if len(params)==0:
        return
    params = params.split('&')
    for param in params:
        dicts[param.split('=')[0]]=param.split('=')[1]
    return dicts
       

if __name__=='__main__':
    #python httpserverdemo.py 8123 
    if len(sys.argv)>1:
        serverport=int(sys.argv[1])
    else:
        serverport=8000
    print serverport
    try:
        server = HTTPServer(('', serverport), MyRequestHandler)
        print 'started httpserver...'
        server.serve_forever()

    except KeyboardInterrupt:
        server.socket.close()

    pass

sql.py文件

#encoding=utf-8
import sqlite3
sqlpath="E:\\test.db"
#
class sqloption:
    def __init__(self):
        self.conn=sqlite3.connect(sqlpath)
        self.cu = self.conn.cursor()
    def create(self):
        cu=self.cu
        cu.execute(("""create table user ( name varchar(50) primary key,  passwd varchar(50) UNIQUE )"""))        
    def sqlinsert(self,name,passwd):
        if self.sqlexist(name)!=False:
            print 'user is exist'
            return False
        else:
            t=(name,passwd)
            self.cu.execute("insert into user values(?,?)",t) 
            self.conn.commit()
            print  '%s insert ' %name
            return True
    def sqlexist(self,name):
        t=(name,)     
        self.cu.execute("select * from user where name =?",t)
        a=self.cu.fetchone()
        if a :
            return a
        else:
            print  "user name %s not exist" % name
            return False
    def sqlselect(self,name,passwd):
        a=self.sqlexist(name)
        if a:
            if a[1]==passwd:
                print '校验成功,密码正确'
                return True
            else:
                print '密码不正确'
                return False
    def close(self):
        self.conn.close() 

最后是创建数据库的文件

create.py


from  sql import sqloption
a=sqloption()
a.create()
a.close()


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值