1.引用静态资源
<!-- 首先, 我们要在application设置static_path, 这样就等于告诉了tornado, 我们的静态文件去哪里找。
也就是把静态文件的根目录告诉了tornado. 这个时候, 假设我们的静态文件放在static目录下 -->
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/ws", WSHandler),
]
settings = dict(
template_path=os.path.join(os.path.dirname(__file__), "templates"),
static_path=os.path.join(os.path.dirname(__file__), "static"),
)
<!-- 第二步, 你要在请求的时候使用/static/这个前缀. 比如 /static/img/test.png ,
也就是test.png文件是放在/static/img下的 -->
<!-- 1.直接使用:localhost:8000/static/***/*** -->
<!-- 附加:第一个/意味着路径已经到了localhost:8000了 -->
<img class="integral_icon" src="/static/imgs/jf.png" />
<img class="integral_icon" src="{{ static_url('imgs/jf.png') }}" />
<link rel="stylesheet" href="/static/css/entry.css" />
<link rel="stylesheet" href="{{ static_url('css/entry.css') }}" />
<script type="text/javascript" src="/static/js/my_socket.js"></script>
<script type="text/javascript" src="{{ static_url('js/my_socket.js') }}"></script>
<!-- 静态资源的引用,如下左图 -->
<!-- 普通资源的引用,如下右图 -->
<!-- img文件与该文件属于同一级别:该文件是test项目下面的index.html文件 -->
<img src="img/hfzt.png" />
<img src="./img/hfzt.png" />
<!-- img文件与该文件属于父子级别:该文件是html文件下面的index.html文件 -->
<img src="../img/hfzt.png" />
1.一般来讲前两步骤基本就解决我们的静态文件访问内容了.但是如果你是和前端协助的话, 这样每一次都要改路径. 都要硬编码在html文件中, 或者加上{{static_url('')}}。这样很烦, 也很容易出错。
2.这个时候, 我们就要使用tornado的一个预定义的handler--------tornado.web.StaticFileHandler, 这个handler能够极大的方便我们访问到我们的静态文件.
3.只要在路由里这么写.
#静态文件
URLSpec(r"/static/(.*)", StaticFileHandler, {"path": config.STATIC_PATH}),
URLSpec(r"/css/(.*)", StaticFileHandler, {"path": config.CSS_URL}),
URLSpec(r"/js/(.*)", StaticFileHandler, {"path": config.JS_URL}),
URLSpec(r"/img/(.*)", StaticFileHandler, {"path": config.IMG_URL}),
这里的
config.STATIC_PATH = "/static"
config.CSS_URL = "/static/css"
config.JS_UR = "/static/js"
config.IMG_URL = "/static/img"
是你的自己设定的目录,
这样每一次访问/css/....这样的资源的时候, 都会定向到/static/css这个路径下寻找。这样你前端拿过来的代码都不用修改了。
2.页面跳转传参
<!-- 1.页面跳转 -->
<a href="/admin/sysuser/{{ u.get('_id') }}">点我跳转</a>
<a href="/admin/sysuser?page=6">点我跳转</a>
<!-- 2.到url -->
(r"/admin/sysuser/([0-9a-z]{24})", AdminModifySysUser),
(r"/admin/sysuser", AdminSysUsers),
<!-- 3.到实现类(即py文件),进而返回一个页面 -->
class AdminModifySysUser(BaseHandler):
@BaseHandler.admin_authed
def get(self, id):
record = self.db.tb_system_user.find_one({"_id":ObjectId(id)})
return self.render("backend/system_user_modify.html", user=record)
class AdminSysUsers(BaseHandler):
@BaseHandler.admin_authed
def get(self):
datas = self.request.arguments
current_page = int(self.get_argument("page", 1))
self.render("backend/system_user_query.html", myuser=self.admin, admin_nav=21, users=user_list,)
<!-- 1.js页面跳转 -->
<script>
var id = $("#bind").data("dt");
var phone = $("#bind").data("user");
window.location.href = "/exam/test/"+id;
window.location.href = "/exam/achievement?id="+id+"&phone="+phone;
</script>
<!-- 2.到url -->
(r"/exam/test/([0-9a-z]{24})", ExamTest),
(r"/exam/achievement", ExamAchievement),
<!-- http://127.0.0.1:8088/exam/test/5af43bda1d41c80e655cc579 -->
<!-- http://127.0.0.1:8088/exam/achievement?id=5af43bda1d41c80e655cc579&phone=16620815425 -->
<!-- 3.到实现类(即py文件),进而返回一个页面 -->
class ExamTest(BaseHandler):
@BaseHandler.admin_authed
def get(self, id):
print "+++=== ", id
phone = self.get_cookie("username")
id = id.encode("utf-8")
self.render("frontend/page/exam/test.html", phone=phone, id=id)
class ExamAchievement(BaseHandler):
@BaseHandler.admin_authed
def get(self):
id = self.get_argument("id", "")
phone = self.get_argument("phone", "")
task = self.db.tb_exam_task.find_one({"_id": ObjectId(id)})
arr = task.get("participants", [])
self.render("frontend/page/exam/achievement.html", arr=arr, phone=phone)
3.Cookie的用法:
4.json_encode编码 和json_decode解码:
5.加密与解密:
from passlib.hash import pbkdf2_sha512
# 对love字符串进行加密,love是明文。
password_hash = pbkdf2_sha512.encrypt("love")
print password_hash # 结果:$pbkdf2-sha512$25000$wnjvvdf6XytFyHlPyVkLAQ$2kL4UztPbWoQmblT4TRxOUoCiDNYvSwGd1EYOWcqhrYUpH9MXHfzaFFw3fGyRsfIZy8SDlXD1HP2U4AlIsdBTA
# 对love字符串进行验证,love是明文,password_hash是密文。
rs = pbkdf2_sha512.verify("love", password_hash)
print rs # 结果:True
6.