• Tornado-第一篇-搭建网页


      manage.py

    from tornado.ioloop import IOLoop  # 处理I/O
    from tornado.web import RequestHandler  # 处理请求
    from tornado.web import Application  # 实例化APP网页
    
    USER_DICT = {
        '1': {'name': '金超', 'age': '22'},
        '2': {'name': '小可', 'age': '42'},
        '3': {'name': '小鱼', 'age': '32'},
        '4': {'name': '小狗', 'age': '52'},
    }
    
    
    # 中间件用于验证是否登录
    class AuthHandler(object):
        def prepare(self):
            # name = self.get_cookie('xxxxx')  #与Django方法做对比
            name = self.get_secure_cookie('xxxxx')
            if not name:
                self.redirect('/login')
    
    
    # home页面  要先继承AuthHandler
    class HomeHandler(AuthHandler, RequestHandler):
        def get(self, *args, **kwargs):
            self.render('index.html', user_dict=USER_DICT, num=[11, 22, 33])
    
    
    # index主页面
    class IndexHandler(AuthHandler, RequestHandler):
        def get(self, *args, **kwargs):
            # 用user_dict带入参数传给页面
            self.render('index.html', user_dict=USER_DICT, num=[11, 22, 33])
    
    
    # login登录页面函数
    class LoginHandler(RequestHandler):
        def get(self, *args, **kwargs):
            self.render('login.html', error='')
    
        def post(self, *args, **kwargs):
            # Tornado和Django做类比
            # self.get_query_argument('user')         request.GET.get('user')
            # self.get_query_arguments('user')        request.GET.getlist('user')
            # self.get_body_argument('user')          request.POST.get('user')
            # self.get_body_arguments('user')         request.POST.getlist('user')
            user = self.get_body_argument('user')
            pwd = self.get_body_argument('pwd')
            if user == 'alex' and pwd == '123':
                self.set_secure_cookie('xxxxx', user)
                self.redirect('/index')
                return
            self.render('login.html', error='用户名或密码错误')
    
    
    # 在settings中注册templates和中间件cookie
    settings = {
        'template_path': 'templates',
        'cookie_secret': 'asq3wurasldf'
    }
    
    # 在Application()方法里面写页面对应着函数
    application = Application([
        ('/login', LoginHandler),
        ('/index', IndexHandler),
        ('/home', HomeHandler),
    ], **settings)
    
    # listen()方法可以监控端口和IP默认是本机
    if __name__ == '__main__':
        application.listen(8888)
        IOLoop.instance().start()
    

      index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>用户列表</h1>
    <table>
        <thead>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
        </thead>
        <thead>
            <!--提取后端字典数据-->
            {% for k,v in user_dict.items() %}
                <tr>
                    <td>{{k}}</td>
                    <td>{{v['name']}}</td>
                    <td>{{v.get('age')}}</td>
                </tr>
            {% end %}
        </thead>
    </table>
    <ul>
        <!--提取后端列表-->
        {% for item in num %}
            <li>{{item}}</li>
        {% end %}
    </ul>
    <h2>{{num[1]}}</h2>
    </body>
    </html>
    

      login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form method="post">
            <input type="text" name="user">
            <input type="text" name="pwd">
            <input type="submit" value="提交">
            <spon style="color: red">{{error}}</spon>
        </form>
    </body>
    </html>
    

      

     

  • 相关阅读:
    ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版
    分享产品发布的10条经验
    Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
    Java知识回顾 (14)网络编程
    Java知识回顾 (13)序列化
    idea下java项目的打包与使用
    Java知识回顾 (12) package
    Java知识回顾 (11) 异常处理
    创建表时 ORA-00955: 名称已由现有对象使用
    工作笔记—hibernate之QueryCriteria
  • 原文地址:https://www.cnblogs.com/weilaixiaochaoren/p/10273402.html
Copyright © 2020-2023  润新知