Tornado 网站demo 三
模板
修改index.py
#!/usr/bin/env Python # coding=utf-8 import tornado.web import methods.readdb as mrd class IndexHandler(tornado.web.RequestHandler): def get(self): usernames = mrd.select_columns(table="users",column="username") one_user = usernames[0][0] self.render("index.html", user=one_user) def post(self): username = self.get_argument("username") password = self.get_argument("password") user_infos = mrd.select_table(table="users",column="*",condition="username",value=username) if user_infos: db_pwd = user_infos[0][2] if db_pwd == password: self.write("welcome you: " + username) else: self.write("your password was not right.") else: self.write("There is no thi user.")
readdb.py 添加select_columns 方法
def select_columns(table, column ): sql = "select " + column + " from " + table cur.execute(sql) lines = cur.fetchall() return lines
修改index.html文件
<!DOCTYPE html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Learning Python</title> </head> <body> <h2> 登录页面</h2> <p>用用户名为:{{user}}登录</p> <form method="POST"> <p><span>UserName:</span><input type="text" id="username"/></p> <p><span>Password:</span><input type="password" id="password" /></p> <p><input type="BUTTON" value="登录" id="login" /></p> </form> <script src="{{static_url('js/jquery-3.2.1.min.js')}}"></script> <script src="{{static_url('js/script.js')}}"></script> </body>
要求用户正确登录之后,跳转到另外一个页面,并且在那个页面中显示出用户的完整信息。
先修改 url.py 文件,在其中增加一些内容
#!/usr/bin/env Python # coding=utf-8 """ the url structure of website """ #!/usr/bin/env Python # coding=utf-8 """ the url structure of website """ from handlers.index import IndexHandler from handlers.user import UserHandler url = [ (r'/', IndexHandler), (r'/user', UserHandler), ]
然后就建立 handlers/user.py 文件
#!/usr/bin/env Python # coding=utf-8 import tornado.web import methods.readdb as mrd class UserHandler(tornado.web.RequestHandler): def get(self): username = self.get_argument("user") user_infos = mrd.select_table(table="users",column="*",condition="username",value=username) self.render("user.html", users = user_infos)
修改script.js
/** * Created by fulong on 2017/6/14. */ $(document).ready(function(){ $("#login").click(function(){ var user = $("#username").val(); var pwd = $("#password").val(); var pd = {"username":user, "password":pwd}; $.ajax({ type:"post", url:"/", data:pd, cache:false, success:function(data){ window.location.href = "/user?user="+data; }, error:function(){ alert("error!"); }, }); }); });
user.html 模板
<!DOCTYPE html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Learning Python</title> </head> <body> <h2>Your informations are:</h2> <ul> {% for one in users %} <li>username:{{one[1]}}</li> <li>password:{{one[2]}}</li> <li>email:{{one[3]}}</li> {% end %} </ul> </body>
模版中
{% set website = "<a href='http://www.itdiffer.com'>welcome to my website</a>" %} {{ website }}
需要更改成如下方式完成 不转义,因为模版会自动帮转义
{% raw website %}
模版中备查函数
- escape(s):替换字符串 s 中的 &、<、> 为他们对应的 HTML 字符。
- url_escape(s):使用 urllib.quote_plus 替换字符串 s 中的字符为 URL 编码形式。
- json_encode(val):将 val 编码成 JSON 格式。
- squeeze(s):过滤字符串 s,把连续的多个空白字符替换成一个空格。
cookies
生成安全的密钥
>>> import base64, uuid
>>> base64.b64encode(uuid.uuid4().bytes)
'w8yZud+kRHiP9uABEXaQiA=='
如果要获取此 cookie,用 self.get_secure_cookie(username)
即可。
实例:https://emptysqua.re/blog/refactoring-tornado-coroutines/