zoukankan      html  css  js  c++  java
  • python---tornado初识(2)实现登录和发布文章

    # coding:utf8
    # __author:  Administrator
    # date:      2018/3/6 0006
    # /usr/bin/env python
    
    import tornado.ioloop
    import tornado.web
    import uimethod as mt
    import uimodule as md
    
    name_list=[]
    
    #用户信息
    USER_INFO={'login_status':None,'name':None}
    #文章列表
    NEWS_LIST=[
        {"title":"dfwafaw","content":"这都是字母"}
    ]
    
    #原来测试模板
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            # self.write("Hello World")
            # 默认当前路径寻找
            # print(self.get_argument('name'))
            # print(self.get_argument('age'))
            self.render("s1.html",ccc=name_list,nm="mmp")
    
        def post(self, *args, **kwargs):
            name=self.get_argument('xxx')
            name_list.append(name)
            self.render("s1.html",ccc=name_list)
    
    #显示首页
    class HomeHandler(tornado.web.RequestHandler):
        def get(self):
            self.render('index.html',user_status=USER_INFO['login_status'],user_name=USER_INFO['name'],content=NEWS_LIST)
            #传参也可以是字典,在模板按字典使用
    
    #处理登录和退出
    class LoginHandler(tornado.web.RequestHandler):
        def post(self, *args, **kwargs):
            name=self.get_argument('username',None)
            pawd=self.get_argument('password',None)#无法获取时候设为None,防止出错
            if name == "ld" and pawd == '123456':
                USER_INFO['login_status']=True
                USER_INFO['name']=name
            self.redirect('/home')
    
        def get(self, *args, **kwargs):
            status=self.get_argument('quit')
            if status == 'true':
                USER_INFO['login_status']=False
                USER_INFO['name']=None
            self.redirect('/home')
    
    #文章发布
    class AddNewsHandler(tornado.web.RequestHandler):
        def post(self, *args, **kwargs):
            title=self.get_argument('title',None)
            content=self.get_argument('content',None)
            if title and USER_INFO['login_status']:
                NEWS_LIST.append({"title":title,"content":content})
            #做一个跳转
            self.redirect('home')#是跳转方法,不是页面
    
    st ={
        "template_path": "template",#模板路径配置
        "static_path":'static',    #js css等静态文件路径配置    无论这里配置了什么路径,在静态文件中使用都是用static
        "static_url_path":'/ss/', #在static_path必须存在的基础上 类似于对其取了一个别名
        #若是没有static_url_prefix,则在静态文件中的资源获取为static/s1.css
        #当存在static_url_prefix时,(前提已经存在static_path),这时具体路径程序已经获取,你只需要在资源前面加上这个前缀,不需要自己去写具体url
        #就是可以看做为static_path起了一个别名
        #static_url_prefix了解即可,不常用
        'ui_methods':mt, #自定义函数在模板中使用{{}}
        'ui_modules':md, #自定义类在模板中使用{% %}
    }
    
    #路由映射   匹配执行,否则404
    application = tornado.web.Application([
        (r"/index",MainHandler),
        (r"/home",HomeHandler),
        (r"/login",LoginHandler),
        (r"/addNews",AddNewsHandler),
    ],**st)
    
    if __name__=="__main__":
        application.listen(8080)
    
        #io多路复用
        tornado.ioloop.IOLoop.instance().start()

    模板文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <!--<link rel="stylesheet" href="static/plugins/bootstrap3/css/bootstrap.css">-->
        <!--<script src="static/js/jquery.js"></script>-->
        <!--<script src="static/plugins/bootstrap3/js/bootstrap.js"></script>-->
    
        <!--注意要想在模板文件中使用static_url必须定义static_url_prex或者static_url_path,两者类似-->
        <link rel="stylesheet" href="{{static_url('plugins/bootstrap3/css/bootstrap.css')}}}">
        <link rel="stylesheet" href="{{static_url('css/index.css')}}">
        <script src='{{static_url("js/jquery.js")}}'></script >
        <script src="{{static_url('plugins/bootstrap3/js/bootstrap.js')}}"></script>
    
    </head>
    <body>
        <div>
            {% if user_status %}
            <h1>你好:{{user_name}}<a onclick="PostNews();">发布消息</a><div style="float: right;"><a href="/login?quit=true">退出</a></div></h1>
    
            {% else %}
            <h1>请先<a onclick="Login();">登录</a></h1>
            {% end %}
        </div>
        <div class="content-list">
            {% for item in content %}
            <div class="item">
                <div class="title">{{item['title']}}</div>
                <div class="content">{{item['content']}}</div>
            </div>
            {% end %}
        </div>
        <div class="modal fade" id="login" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
          <div class="modal-dialog" role="document">
            <div class="modal-content">
              <form action="login" method="post">
              <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="exampleModalLabel">用户登录</h4>
              </div>
              <div class="modal-body">
                  <div class="form-group">
                    <label class="control-label">用户名:</label>
                    <input type="text" class="form-control" name="username">
                  </div>
                  <div class="form-group">
                    <label class="control-label">密码:</label>
                    <input type="password" class="form-control" name="password">
                  </div>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Submit</button>
              </div>
              </form>
            </div>
          </div>
        </div>
    
        <div class="modal fade" id="pub" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
          <div class="modal-dialog" role="document">
            <div class="modal-content">
              <form action="addNews" method="post">
              <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="exampleModalLabel">用户登录</h4>
              </div>
              <div class="modal-body">
                  <div class="form-group">
                    <label class="control-label">标题:</label>
                    <input type="text" class="form-control" name="title">
                  </div>
                  <div class="form-group">
                    <label class="control-label">内容:</label>
                    <textarea class="form-control" name="content" id="message-text"></textarea>
                  </div>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Submit</button>
              </div>
              </form>
            </div>
          </div>
        </div>
    </body>
    </html>
    <script>
        function Login(){
            $("#login").modal('show');
        }
    
        function PostNews(){
            $("#pub").modal('show');
        }
    </script>
  • 相关阅读:
    Dotfuscator 保护您的应用程序
    IOS 类方法
    播放音乐与视频
    windows phone 手机信息的查看
    更改枢轴视图的Item字的大小
    IOS 总结
    Windows Phone 中HttpWebRequest用法
    关于Listbox的 SelectionChanged 事件 (同一个Item只触发一次问题)
    windows phone 标准色值
    IOS GPS 定位
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8516676.html
Copyright © 2011-2022 走看看