zoukankan      html  css  js  c++  java
  • python tornado框架实现CRUD

    1.本例采用postgresql数据库,创建数据表 user_tbl

    create table user_tbl(name varchar(20),signup_date date);

    2.webapi接口

    (1)tornado框架配置 t_tornado.py

    #-*- coding:UTF-8 -*-
    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    from tornado.options import define,options
    import t_url
    import psycopg2
    app=tornado.web.Application(t_url.url)
    define("port",default=8000,help="run on port",type=int)
    if __name__=="__main__":
       tornado.options.parse_command_line()
       app.listen(options.port)
       tornado.ioloop.IOLoop.instance().start()

    (2)路径映射 t_url.py

    from t_handler import *
    url=[
    (r'/',IndexHandler),
    (r'/AddUser',AddHandler),
    (r'/EditUser',EditHandler),
    (r'/DelUser',DelHandler)
    ]

    (3)处理类 t_handler.py

    from tornado.web import RequestHandler
    from tornado.escape import json_decode,json_encode
    import psycopg2
    
    #解决js跨域请求问题
    class BaseHandler(RequestHandler):
         def set_default_headers(self):
            self.set_header('Access-Control-Allow-Origin', '*')
            self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
            self.set_header('Access-Control-Max-Age', 1000)
            self.set_header('Access-Control-Allow-Headers', '*')
            self.set_header('Content-type', 'application/json')
    
    #删除用户
    class DelHandler(BaseHandler):
        def post(self):
            name=self.get_argument('name',None)
            result={}
            conn=psycopg2.connect(host='127.0.0.1',port=5432,user='leo',password='king',database='testdb')
            cursor=conn.cursor()
            try:
              sqlstr="delete from  user_tbl where name='%s'"%name
              cursor.execute(sqlstr)
            except(psycopg2.Warning,psycopg2.Error) as error:
              result["result"]="DB Error:"+error.message
              result["status"]="false"
              result["code"]=300
              self.write(json_encode(result))
              conn.rollback()
              cursor.close()
              conn.close()
              return
            result["result"]="success"
            result["status"]="true"
            result["code"]=200
            if(result["status"]=="true"):
              conn.commit()
            cursor.close()
            conn.close()
            self.write(json_encode(result))
          
    #修改用户  
    class EditHandler(BaseHandler):
       def post(self):
          o_name=self.get_argument('o_name',None)
          name=self.get_argument('name',None)
          time=self.get_argument('time',None)
          result={}
          conn=psycopg2.connect(host='127.0.0.1',port=5432,user='leo',password='king',database='testdb')
          cursor=conn.cursor()
          try:
            sqlstr="update user_tbl set name='%s',signup_date='%s' where name='%s'"%(name,time,o_name)
            cursor.execute(sqlstr)
          except(psycopg2.Warning,psycopg2.Error) as error:
            result["result"]="DB Error:"+error.message
            result["status"]="false"
            result["code"]=300
            self.write(json_encode(result))
            conn.rollback()
            cursor.close()
            conn.close()
            return
          result["result"]="success"
          result["status"]="true"
          result["code"]=200
          if(result["status"]=="true"):
             conn.commit()
          cursor.close()
          conn.close()
          self.write(json_encode(result))
    
    #新增用户
    class AddHandler(BaseHandler):
        def post(self):
          time=self.get_argument('time',None)
          result={}
          conn=psycopg2.connect(host='127.0.0.1',port=5432,user='leo',password='king',database='testdb')
          cursor=conn.cursor()
          try:
            sqlstr="insert into user_tbl(name,signup_date) values('%s','%s')"%(name,time)
            cursor.execute(sqlstr)
          except(psycopg2.Warning,psycopg2.Error) as error:
            result["result"]="DB Error:"+error.message
            result["status"]="false"
            result["code"]=300
            self.write(json_encode(result))
            conn.rollback()
            cursor.close()
            conn.close()
            return
          result["result"]="success"
          result["status"]="true"
          result["code"]=200
          if(result["status"]=="true"):
             conn.commit()
          cursor.close()
          conn.close()
          self.write(json_encode(result)) 
    
    class IndexHandler(BaseHandler):
       def get(self):
          conn=psycopg2.connect(host='127.0.0.1',port=5432,user='leo',password='king',database='testdb')
          cursor=conn.cursor()
          result={}
          try:
             sqlstr="select name,signup_date from user_tbl"
             cursor.execute(sqlstr)
             if(cursor.rowcount==0):
                result["total"]=0
                result["rows"]="no data."
                result["status"]="false"
                result["code"]=300
                self.write(json_encode(result))
                conn.close()
                return
             else:
                res=cursor.fetchall()
                content=[]
                t=1
                for item in res:
                  tempItem={}
                  tempItem["id"]=t
                  tempItem["name"]=item[0]
                  try:
                    tempItem["signup_date"]=item[1].strftime("%Y-%m-%d %H:%M:%S")
                  except:
                    tempItem["signup_date"]=''
                  t+=1
                  content.append(tempItem)
                result["total"]=1000
                result["rows"]=content
                result["status"]="true"
                result["code"]=200
          except(psycopg2.Warning,psycopg2.Error) as error:
             result["result"]="DB error:"+error.message
             result["status"]="false"
             result["code"]=300
             self.write(json_encode(result))
             conn.rollback()
             conn.close()
             return
          if(result["status"]=="true"):
            conn.commit()
          conn.close()
          print json_encode(result)
          self.write(json_encode(result)) 

    3.html请求

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <meta charset="utf-8" />
        <script src="Scripts/jquery.min.js" type="text/javascript"></script>     
        <script src="Scripts/jquery.easyui.min.js" type="text/javascript"></script>     
        <link href="Css/easyui.css" rel="stylesheet" type="text/css" />   
        <script type="text/javascript">
        var o_name;
            var userUrl = "http://127.0.0.1:8000";
            $(function () {
                initUser();
                $('#dri_grid').datagrid('load', userUrl);
                $("#dri_tools_add").click(function() {
            $("#n_name").val("");
            $("#n_time").val("");
            var a = document.getElementById('driver_add');
            a.href = "javascript:driver_adddd()";
            $("#adduser").show();
            });
            $("#dri_tools_edit").click(function() {
                    var row=$("#dri_grid").datagrid('getSelected');
                    if(row){
                           var name = row.name;
                   o_name = name;
                           var time = row.signup_date;
                           $("#n_name").val(name);
                           $("#n_time").val(time);
                var a = document.getElementById('driver_add');
                a.href = "javascript:driver_editdd()";
                           $("adduser").show();
            }
            else{
                alert("please select");
            }
            $("#adduser").show();
            });
                $("#dri_tools_del").click(function() {
            var row = $('#dri_grid').datagrid('getSelected');
            if (row) {
                if(confirm("really delete?")){
                var t_name = row.name;
                    var datas = {
                        name: t_name
                    };
                var driver_delurl="http://127.0.0.1:8000/DelUser";
                    $.post(driver_delurl, datas, function (v) {
                        if (v.status=="true") {
                            $("#dri_grid").datagrid("reload");
                            alert("success");
                        } else {
                    alert("error");
                        }
                    });
                }
            } else {
                alert("please select");
            }
            });
            });
            function driver_adddd(){
            var n_name = $("#n_name").val();
            var n_time = $("#n_time").val(); 
            var userdata = {
                    name: n_name,
                    time: n_time
                };
                    var driver_addurl="http://127.0.0.1:8000/AddUser";
            $.post(driver_addurl, userdata, function(s) {
                if (s.status == "true") {
                    $("#dri_grid").datagrid("reload");
                    alert('新增成功');
                } else {
                        alert(s.result);
                }
            });
    }
        function driver_editdd(){
            var n_name = $("#n_name").val();
            var n_time = $("#n_time").val(); 
            var userdata = {
                                    o_name:o_name,
                    name: n_name,
                    time: n_time
                };
                    var driver_addurl="http://127.0.0.1:8000/EditUser";
            $.post(driver_addurl, userdata, function(s) {
                if (s.status == "true") {
                    $("#dri_grid").datagrid("reload");
                    alert('更新成功');
                } else {
                        alert(s.result);
                }
            });
        }
    function initUser() {
                $('#dri_grid').datagrid({
                    border: false,
                    fit: true,
                    singleSelect: true,
                    method: 'get',
                    pagination: true,
                    striped: true,
                    pageSize: 20,
                    onBeforeLoad: function() {
                    },
                    columns: [
                        [{
                            field: 'name',
                            title: 't_name',
                             '8%',
                            align: 'center'
                        }, {
                            field: 'signup_date',
                            title: 't_signup_date',
                             '14%',
                            align: 'center'
                        }
                        ]
                    ],
                    onLoadSuccess: function(data) {
                    }
                });
            }
        </script>
    </head>
    <body> 
    <span id="dri_tools_add">
    <a href="#" style=" 100px">新增</a>
    </span>&nbsp;&nbsp;
    <span id="dri_tools_edit">
    <a href="#" style=" 100px">修改</a>
    </span>&nbsp;&nbsp;
    <span id="dri_tools_del">
    <a href="#" style=" 100px">删除</a>
    </span>
    <div id="adduser" style="display:none;">
    <table style="padding-left: 4%; padding-right: 4%">
    <tr>
        <td>
            <span style="color: red">*</span>
            <label>姓名:</label>
        </td>
        <td style="padding-right: 80px; padding-bottom: 5px;">
            <input id="n_name" style="100px;" type="text">
        </td>
        <td>
            <label>注册时间:</label>
        </td>
        <td style="padding-bottom: 5px;  175px;">
            <input id="n_time"  style="100px;" type="text">
        </td>
    </tr>
    </table>
    <div><a id="driver_add" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" href="javascript:void(0)" style=" 120px">提交</a> </div>
    </div>
     <table id="dri_grid"></table>
    </body>
    
    </html>

    4.浏览器显示结果:

    (1)查询

    (2)新增

    (3)修改

    (4)删除

  • 相关阅读:
    为蓝桥杯准备
    Java里子类调用父类构造方法问题
    boost库的Singleton的实现以及static成员的初始化问题
    VS2005调试小记
    <转载>程序员每天该做的事
    vs2005, 2008 使用了未初始化的msg变量
    转载 vs2005 快捷键大全
    VS2005右键点击转到定义后出现“未定义符号”的提示及其解决
    软件工程配置规范(VC2005) 第二版(转载)
    匆忙赶路的时候别忘了适时停下来回头看看
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/5799586.html
Copyright © 2011-2022 走看看