一次tornado建站项目分享

下面是年前的一个tornado小型项目
前端效果主要是参照bootstrap官网模板
后端数据主要是通过ajax,post, get实现数据参数传输


注意点:1. tornado的csrf_token写法形式与django有区别
    2. tornado在服务器上的挂载方式也略有区别
    3. ajax数据传输用 json


项目代码很简单,就不班门弄斧了。直接上注意点:

注意点1:tornado csrf的生成方式以及取值方式

<form class="form-signin">
    {% module xsrf_form_html() %} //csrf_token
    <img class="mb-4" src="/static/img/god.ico" alt="" width="72" height="72">
    <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
    <label for="inputEmail" class="sr-only">Username</label>
    <input type="text" id="inputEmail" class="form-control" name="username" placeholder="Username" required
           autofocus>
    <label for="inputPassword" class="sr-only">Password</label>
    <input type="password" id="inputPassword" class="form-control" name="password" placeholder="Password" required>
    <div class="checkbox mb-3">
        <label>
            <input type="checkbox" id="Choice" value="remember-me" checked> Remember me
        </label>
    </div>
    <input class="btn btn-lg btn-primary btn-block" id="login" type="button" value="Sign in">
    <span class="error"></span>
    <p class="mt-5 mb-3 text-muted">&copy; 2019-2010</p>
</form>
$("#login").click(
            function () {
                var n = $('#Choice').prop('checked');
                $.ajax({
                    url: "",
                    type: 'post',
                    data: {
                        remeber: n,
                        username: $("[name='username']").val(),
                        password: $("[name='password']").val(),
                        _xsrf: $("[name='_xsrf']").val()
                    },
                    success: function (data) {
                        if (data === "1") {
                            console.log("ok");
                            location.href = '/LoginWin'
                        }
                        else {
                            $(".error").text("Error: 请检查 账号 or 密码 是否正确").css({"color": "red", "margin-left": "10px"});
                            setTimeout(function () {
                                $(".error").text('');
                            }, 1000)
                        }

                    }
                })
            })

 

注意点2: 关于tornado项目挂载服务器,后台运行的方式关闭远程连接以后,该项目进程会死掉,解决方法需fork进程,在项目执行的地方加上这段就Ok了

def daemon(): 
    import os
    try:
        pid = os.fork()
        if pid > 0:
            return pid
    except OSError as error:
        return -1
    os.setsid()
    os.umask(0)
    try:
        pid = os.fork()
        if pid > 0:
            return pid
    except OSError as error:
        return -1
    sys.stdout.flush()
    sys.stderr.flush()
    si = open("/dev/null", "r")
    so = open("/dev/null", "ab")
    se = open("/dev/null", "ab", 0)
    os.dup2(si.fileno(), sys.stdin.fileno())
    os.dup2(so.fileno(), sys.stdin.fileno())
    os.dup2(se.fileno(), sys.stdin.fileno())
    return 0


def main():
    app = Application() # 项目启动
    httpServer = tornado.httpserver.HTTPServer(app) # 项目启动
    httpServer.bind(config.options["port"]) # 项目启动
    httpServer.start(1) # 项目启动
    tornado.ioloop.IOLoop.current().start() # 项目启动
    pid = daemon() # fork进程
    if pid:
        return pid


if __name__ == '__main__':
    main()

 

posted @ 2019-02-11 10:00  Corey0606  阅读(492)  评论(0编辑  收藏  举报