下面是年前的一個tornado小型項目
前端效果主要是參照bootstrap官網模板
後端數據主要是經過ajax,post, get實現數據參數傳輸
css
注意點:1. tornado的csrf_token寫法形式與django有區別
2. tornado在服務器上的掛載方式也略有區別
3. ajax數據傳輸用 json
html
項目代碼很簡單,就不班門弄斧了。直接上注意點:前端
<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">© 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) } } }) })
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()