3.python web框架tornodo之二级路由设置、模板语言extends、include

 一、tornado基于正则路由

1.controllers文件夹下home.py文件代码如下:
import tornado.web
import tornado.ioloop


class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

#正则路由Handler
class ZhengZeRouteHandler(tornado.web.RequestHandler):
    #get方法,接收两个参数,根据不同的参数返回不同的页面
    def get(self, num, id):
        if num == "1":
            if id == "1":
                self.render("index.html")
            else:
                self.render("fenYe.html")
        else:
            self.render("zhengZe.html")
2.controllers文件夹下account.py文件代码如下:
import tornado.web
import tornado.ioloop
import home
import os

template_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "views")


settings = {
    "template_path": template_path,
    "static_path": "statics",
}


app = tornado.web.Application([
    #基本路由
    (r"/index", home.IndexHandler),
    #基于正则路由
    (r"/zhengze/(?P<num>\d*)/(?P<id>\d*)", home.ZhengZeRouteHandler),
], **settings)


if __name__ == "__main__":
    app.listen(8090)
    tornado.ioloop.IOLoop.instance().start()

 

3.views文件夹下index.html文件代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <input type="text" name="userName">
    <input type="text" name="pwd">
</body>
</html>

 

4.views文件夹下fenYe.html文件代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1>这个正则路由的分页页面</h1>
</body>
</html>

 

5.views文件夹下zhengZe.html文件代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1 style="color: darkred;background-color: aliceblue">这是正则路由的正则页面</h1>
</body>
</html>

 

6.运行controllers文件夹下account.py文件,再浏览器中输入http://127.0.0.1:8090/zhengze/1/1即可路由访问index.html页面;输入http://127.0.0.1:8090/zhengze/1/2即可路由访问fenYe.html页面;输入http://127.0.0.1:8090/zhengze/2/1即可路由访问zhengZe.html页面

 

 

 

 

 

 

二、二级路由设置
在start.py文件下添加二级路由
import tornado.web
import tornado.ioloop
from controllers import home


settings = {
    "template_path": "views",
    "static_path": "statics",
}


app = tornado.web.Application([
    #基本路由
    (r"/index/(?P<page>\d*)", home.IndexHandler),
    #基于正则路由
    # (r"/zhengze/(?P<num>\d*)/(?P<id>\d*)", home.ZhengZeRouteHandler),
], **settings)


#添加二级域名映射
app.add_handlers(("zongchen.com"),[
    (r"/index/(?P<page>\d*)",home.ZhengZeRouteHandler),
])


if __name__ == "__main__":
    app.listen(8090)
    tornado.ioloop.IOLoop.instance().start()

运行start.py文件后在浏览器中输入zongchen.com:8090/index/1即可访问zhengZeRouteHandler所对应的页面

 
三.模板语言知识补充
我们一般把公共的html文件提取出来封装成模板,然后其他的html继承模板
extends:
    页面整体布局进行继承
include:
    常用组件进行导入
 
1.在views文件夹下的master文件夹下定义模板layout.html,文件代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .header{
            height: 480px;
            background-color: blueviolet;
        }
        .footer{
            height: 240px;
            background-color: olivedrab;
        }
        /*自定义css样式*/
        {% block css %}{%end%}
    </style>
</head>
<body>
    <div class="header">fasfa</div>
    {% block body %}{%end%}
    <div class="footer">fsafas</div>
    
    <script src=""></script>
    <!-- 自定义js文件   -->
    {%block js%}{%end%}
</body>
</html>

2.views文件夹下的include文件夹下定义form.html,文件代码如下

<form action="">
    <input type="text" name="formName">
    <input type="text" value="提交">
</form>
<ul>
    {% for li in listInfo%}
        <li>{{li}}</li>
    {%end%}
</ul>

3.views文件夹下的extend文件夹下index.html文件继承模板layout.html文件,然后在自定义一些内容,文件代码如下:

{% extends '../master/layout.html'%}
<!--继承master文件夹下的layout.html文件-->


{% block body%}
    <h1>index页面继承了master文件夹下的layout.html模板</h1>
    {% include "../include/form.html" %}
{% end %}


{% block js %}
    <script>
        console.log("继承模板后的自定义的js放在这")
    </script>
{% end %}

4.views文件夹下的extend文件夹下fuck.html文件继承模板layout.html文件,然后在自定义一些内容,文件代码如下:

{% extends '../master/layout.html'%}
<!--继承master文件夹下的layout.html文件-->


{% block body%}
<h1>fuckoff页面继承了master文件夹下的layout.html模板</h1>
<div style="background-color: blue">fsfs</div>
    {% include "../include/form.html" %}
{% end %}


{% block js %}
<script>
    console.log("继承模板后的自定义的js放在这")
</script>
{% end %}

5.在controllers文件夹下的extend.py文件代码如下:

import tornado.web
import tornado.ioloop

class IndexHandler(tornado.web.RequestHandler):

    def get(self):
        print(456)
        self.render("extend/index.html",listInfo=[1,2,3])

    def post(self):
        print(789)

class FuckoffHandler(tornado.web.RequestHandler):


    def get(self):
        self.render("extend/fuck.html",listInfo=[4,5,6])

6.在start.py文件夹下添加对应路由,文件代码如下:

import tornado.web
import tornado.ioloop
from controllers import home
from controllers import extend


settings = {
    "template_path": "views",
    "static_path": "statics",
}


app = tornado.web.Application([
    #基本路由
    (r"/index/(?P<page>\d*)", home.IndexHandler),
    (r"/index", extend.IndexHandler),
    (r"/fuck", extend.FuckoffHandler),
    #基于正则路由
    (r"/zhengze/(?P<num>\d*)/(?P<id>\d*)", home.ZhengZeRouteHandler),


], **settings)


#添加二级域名映射
app.add_handlers(("zongchen.com"),[
    (r"/index/(?P<page>\d*)",home.ZhengZeRouteHandler),
])


if __name__ == "__main__":
    app.listen(8090)
    tornado.ioloop.IOLoop.instance().start()

7.运行start.py文件后,在浏览器中输入127.0.0.1:8090/index和127.0.0.1:8090/fuck

 

 

 

 

posted @ 2023-04-06 06:42  少壮不努力123  阅读(260)  评论(0)    收藏  举报