Tornado-操作演示-2

tornado服务器若干方法的调用次序演示


# tornado服务器若干方法的调用次序演示


import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_config_file
from tornado.web import Application, RequestHandler

# 用来响应用户请求
class IndexHandler(RequestHandler):
    def initialize(self):
        print('initialize方法执行')

    def set_default_headers(self):
        print('set_default_headers方法执行')

    #响应以get方式发起的请求
    def get(self, *args, **kwargs):
        print('get方法执行')
        # 服务器给浏览器的响应内容
        self.write('hello get')
        self.send_error()

    #响应以post方式发起的请求
    def post(self, *args, **kwargs):
        print('post方法执行')
        #  服务器给浏览器的响应内容
        self.write('hello post')

    def on_finish(self):
        print('on_finish方法执行')

    def write_error(self, status_code, **kwargs):
        print('write_error方法执行')
        super().write_error(status_code, **kwargs)



#定义一个变量,用来代表端口号
define('port',type=int,default=8888,multiple=False)
#定义一个变量,用来代表数据库的连接信息(用户名,密码,端口号,数据库名称)
define('db',multiple=True,type=str,default=[])
#从指定的配置文件中,读取port的内容
parse_config_file('config')

#创建Application对象,进行若干个对服务器的设置
#例如:路由列表,模板路径,静态资源路径等
app = Application([('/',IndexHandler)])
#创建服务器程序
server = HTTPServer(app)
#服务器监听某个端口(建议使用10000以上的端口)
server.listen(options.port)#10000
#打印获得的数据库参数
print('数据库参数:',options.db)
#启动服务器(在当前进程中启动服务器)
IOLoop.current().start()

tornado服务器错误页面的演示


# tornado服务器错误页面的演示


import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_config_file
from tornado.web import Application, RequestHandler

# 用来响应用户请求
class IndexHandler(RequestHandler):
    def initialize(self):
        print('initialize方法执行')
    #响应以get方式发起的请求
    def get(self, *args, **kwargs):
        print('get方法执行')
        # 服务器给浏览器的响应内容
        self.write('hello aid1710')
        #raise Exception('funny exception')
        #执行 self.send_error方法时
        #一定会触发Tornado中一个特殊的方法write_error
        #特殊方法会根据错误代码返回相应的内容作为响应交给客户端
        #self.send_error如果不提供错误码,默认值500
        #注意:self.send_error方法参数的状态码必须是HTML定义中已有的状态码
        self.send_error(200)

    def write_error(self, status_code, **kwargs):
        if status_code==200:
            self.write('<span style=color:red;font-size:36px;font-weight:bold;>Fail</span>')
        else:
            super().write_error(status_code, **kwargs)

    #响应以post方式发起的请求
    def post(self, *args, **kwargs):
        pass

    def on_finish(self):
        print('on_finish方法执行')







#定义一个变量,用来代表端口号
define('port',type=int,default=8888,multiple=False)
#定义一个变量,用来代表数据库的连接信息(用户名,密码,端口号,数据库名称)
define('db',multiple=True,type=str,default=[])
#从指定的配置文件中,读取port的内容
parse_config_file('config')

#创建Application对象,进行若干个对服务器的设置
#例如:路由列表,模板路径,静态资源路径等
app = Application([('/',IndexHandler)])
#创建服务器程序
server = HTTPServer(app)
#服务器监听某个端口(建议使用10000以上的端口)
server.listen(options.port)#10000
#打印获得的数据库参数
print('数据库参数:',options.db)
#启动服务器(在当前进程中启动服务器)
IOLoop.current().start()

tornado服务器以JSON字符串作为对客户端的响应演示


# tornado服务器以JSON字符串作为对客户端的响应演示
import json

import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_config_file
from tornado.web import Application, RequestHandler

# 用来响应用户请求
class IndexHandler(RequestHandler):
    def initialize(self):
        print('initialize方法执行')
    #响应以get方式发起的请求
    def get(self, *args, **kwargs):
        print('get方法执行')
        # 服务器给浏览器的响应内容
        #1)创建一个字典
        resp={'key1':'value1','key2':'value2'}
        #resp2=dict(key1='value1',key2='value2')
        #2)将字典转为一个JSON格式的字符串
        respstr = json.dumps(resp)
        #3)将json字符串交回客户端
        #我的响应头Content-Type=text/html
        self.write(respstr)
        #4)设置响应头
        self.set_header('Content-Type','application/json;charset=utf-8')
        #self.write(resp)


    #响应以post方式发起的请求
    def post(self, *args, **kwargs):
        pass

    def on_finish(self):
        print('on_finish方法执行')





#定义一个变量,用来代表端口号
define('port',type=int,default=8888,multiple=False)
#定义一个变量,用来代表数据库的连接信息(用户名,密码,端口号,数据库名称)
define('db',multiple=True,type=str,default=[])
#从指定的配置文件中,读取port的内容
parse_config_file('config')

#创建Application对象,进行若干个对服务器的设置
#例如:路由列表,模板路径,静态资源路径等
app = Application([('/',IndexHandler)])
#创建服务器程序
server = HTTPServer(app)
#服务器监听某个端口(建议使用10000以上的端口)
server.listen(options.port)#10000
#打印获得的数据库参数
print('数据库参数:',options.db)
#启动服务器(在当前进程中启动服务器)
IOLoop.current().start()

演示tornado页面间的跳转

#演示tornado页面间的跳转

from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, parse_config_file, options
from tornado.web import Application, RequestHandler

#模块级别的变量 访问(读/写)
# 被遮蔽住了
IS_SUCCESS = True

class IndexHandler(RequestHandler):

    def get(self, *args, **kwargs):

        html='<form method=post action=/login enctype=multipart/form-data>' \
             '<input type=text name=name><br><br>' \
             '<input type=password name=password><br><br>' \
             '<input type=submit value=提交>&nbsp;&nbsp;&nbsp;' \
             '<input type=reset value=重置>' \
             '</form>'

        self.write(html)

        # if not IS_SUCCESS:
        #     self.write('<br><br>')
        #     self.write('<span style=color:red;font-weight=bold;>用户名或密码错误!</span>')

        msg = self.get_query_argument('msg',None)
        if msg:
            self.write('<br><br>')
            self.write('<span style=color:red;font-weight=bold;>用户名或密码错误!</span>')

    def post(self, *args, **kwargs):
        pass

class LoginHandler(RequestHandler):
    global IS_SUCCESS

    def get(self, *args, **kwargs):
        pass
    def post(self, *args, **kwargs):
        name = self.get_body_argument('name')
        password = self.get_body_argument('password')
        print('用户名: ',name,' , 密码:', password)
        if name=='abc' and password=='123':
            #如果输入的用户名为abc,密码是123
            #则跳转到博客的页面(127.0.0.1:9999/blog)
            #IS_SUCCESS = True
            self.redirect('/blog')
        else:
            #否则重新输入用户名和密码再次进行登录
            #IS_SUCCESS = False
            #self.redirect('/')
            self.redirect('/?msg=fail')


class BlogHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.write('welcome blog')
    def post(self, *args, **kwargs):
        pass

define('port',default=8888,type=int,multiple=False)
parse_config_file('config')
app = Application([('/',IndexHandler),
                   ('/login',LoginHandler),
                   ('/blog',BlogHandler)])
server = HTTPServer(app)
server.listen(options.port)
IOLoop.current().start()

tornado设置服务器响应时的状态码的演示


# tornado设置服务器响应时的状态码的演示


import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_config_file
from tornado.web import Application, RequestHandler

# 用来响应用户请求
class IndexHandler(RequestHandler):
    def initialize(self):
        print('initialize方法执行')
    #响应以get方式发起的请求
    def get(self, *args, **kwargs):
        print('get方法执行')
        # 服务器给浏览器的响应内容
        #设置响应头
        self.set_header('myheader','my_header')
        self.set_header('yourheader','your_header')
        self.write('hello aid1710')
        #设置状态码(如果是自定义状态码,要加上描述信息)
        self.set_status(888,'funny code')


    #响应以post方式发起的请求
    def post(self, *args, **kwargs):
        pass

    def set_default_headers(self):
        self.set_header('defaultheader','default_header')
        self.set_header('myheader','default_my_header')

    def on_finish(self):
        print('on_finish方法执行')





#定义一个变量,用来代表端口号
define('port',type=int,default=8888,multiple=False)
#定义一个变量,用来代表数据库的连接信息(用户名,密码,端口号,数据库名称)
define('db',multiple=True,type=str,default=[])
#从指定的配置文件中,读取port的内容
parse_config_file('config')

#创建Application对象,进行若干个对服务器的设置
#例如:路由列表,模板路径,静态资源路径等
app = Application([('/',IndexHandler)])
#创建服务器程序
server = HTTPServer(app)
#服务器监听某个端口(建议使用10000以上的端口)
server.listen(options.port)#10000
#打印获得的数据库参数
print('数据库参数:',options.db)
#启动服务器(在当前进程中启动服务器)
IOLoop.current().start()

tornado服务器模板使用的演示


# tornado服务器模板使用的演示


import tornado
from os.path import join, dirname
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, options, parse_config_file
from tornado.web import Application, RequestHandler

# 用来响应用户请求
class IndexHandler(RequestHandler):
    def initialize(self):
        print('initialize方法执行')
    #响应以get方式发起的请求
    def get(self, *args, **kwargs):
        print('get方法执行')
        # 服务器给浏览器的响应内容
        self.render('login.html')

    #响应以post方式发起的请求
    def post(self, *args, **kwargs):
        pass

    def on_finish(self):
        print('on_finish方法执行')

class LoginHandler(RequestHandler):
    def get(self, *args, **kwargs):
        pass
    def post(self, *args, **kwargs):
        name = self.get_body_argument('name',None)
        password = self.get_body_argument('password',None)

        if name=='abc' and password=='123':
            self.redirect('/blog')
        else:
            self.redirect('/')

class BlogHandler(RequestHandler):
    def get(self, *args, **kwargs):
        self.render('blog.html')
    def post(self, *args, **kwargs):
        pass



#定义一个变量,用来代表端口号
define('port',type=int,default=8888,multiple=False)
#定义一个变量,用来代表数据库的连接信息(用户名,密码,端口号,数据库名称)
define('db',multiple=True,type=str,default=[])
#从指定的配置文件中,读取port的内容
parse_config_file('config')

#创建Application对象,进行若干个对服务器的设置
#例如:路由列表,模板路径,静态资源路径等
app = Application([('/',IndexHandler),
                   ('/login',LoginHandler),
                   ('/blog',BlogHandler)],
                  template_path=join(dirname(__file__),'mytemplate'))
#创建服务器程序
server = HTTPServer(app)
#服务器监听某个端口(建议使用10000以上的端口)
server.listen(options.port)#10000
#打印获得的数据库参数
print('数据库参数:',options.db)
#启动服务器(在当前进程中启动服务器)
IOLoop.current().start()

模拟上次用户信息


from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, parse_config_file, options
from tornado.web import Application, RequestHandler


class IndexHandler(RequestHandler):
    def get(self, *args, **kwargs):

        html='<form method=post action=/login enctype=multipart/form-data>' \
             '<input type=text name=name><br><br>' \
             '<input type=password name=password><br><br>' \
             '<input type=file name=avatar><br><br>' \
             '<input type=submit value=提交>&nbsp;&nbsp;&nbsp;' \
             '<input type=reset value=重置>' \
             '</form>'

        self.write(html)

    def post(self, *args, **kwargs):
        pass

class LoginHandler(RequestHandler):
    def get(self, *args, **kwargs):
        pass
    def post(self, *args, **kwargs):
        name = self.get_body_argument('name')
        password = self.get_body_argument('password')
        print('用户名: ',name,' , 密码:', password)

        files = self.request.files
        #明确知道用户就上传了一张图片时
        #用下标的方式将这唯一一张图片直接取出
        avatar = files.get('avatar')[0]
        filename = avatar.get('filename')
        body = avatar.get('body')
        writer = open('upload/%s' % filename,'wb')
        writer.write(body)
        writer.close()


define('port',default=8888,type=int,multiple=False)
parse_config_file('config')
app = Application([('/',IndexHandler),('/login',LoginHandler)])
server = HTTPServer(app)
server.listen(options.port)
IOLoop.current().start()
posted @ 2018-11-12 14:41  IndustriousHe  阅读(275)  评论(0编辑  收藏  举报