一、Tornado Web应用程序的结构

import tornado.web
 
class LoginHandler(tornado.web.RequestHandler):
 
    def get(self):
        self.write('www')
 
    def post(self):
        pass
 
#生成路由规则
application= tornado.web.Application([
    (r"/login/",LoginHandler),
])
 
if __name__ == '__main__':
    application.listen(8888)  #创建socket对象并将其添加到select或者epoll中
    tornado.ioloop.IOLoop.instance().start() #将select或者epoll进行死循环 

Tornado Web应用程序通常由一个或多 个RequestHandler子类,一个Application将传入请求路由到处理程序对象以及一个main()启动服务器功能组成。

RequestHandler:Tornado Web应用程序的大部分工作是在的子类中完成的RequestHandler主入口点的处理程序的子类是所处理的HTTP方法命名的方法:get()、post()等。每个处理程序可以定义这些方法的一个或多个来处理不同的HTTP操作。在处理程序中,调用诸如RequestHandler.render或的 方法RequestHandler.write以产生响应。

Application:负责全局配置,包括将请求映射到处理程序的路由表。

二、路由系统

tornado的路由系统是一个url对应一个类,这与django的CBV模式类似。

...

#生成路由规则
application= tornado.web.Application([
    (r"/login/",LoginHandler),
  (r"/order/([0-9]+)", OrderHandler, dict(db=db), name="order")
]) ...

  路由表是URLSpec对象(或元组)的列表,每个对象(至少包含)一个正则表达式和一个处理程序类。使用第一个匹配规则。如果正则表达式包含捕获组,则这些组是路径参数,并将传递给处理程序的HTTP方法。如果将字典作为的第三个元素传递URLSpec,则它会提供将传递给 初始化参数RequestHandler.initialize。

三、视图函数

  • 获取请求相关信息
         self.get_cookie() #获取cookie
         v = self.get_argument('p') #可以用于获取用户的get请求和post请求发来的数据
         print(v)
         self.request #封装了用户发来的所有请求(如果找不到相关请求就去request中找)
        # print(type(self.request))
        # from tornado.httputil import HTTPServerRequest
  • 视图
import tornado.web
 
class LoginHandler(tornado.web.RequestHandler):
 
    def get(self):
        print(self.get_argument('p'))     
     self.set_cookie(‘k1’,'v1') #可以进行cookie的设置    
self.set_header('k2','v2') #可以设置header
#self.write('www') #往页面上写数据
     #self.redirect('/index/')#重定向
self.render('login.html') def post(self): print(self.get_argument('user')) settings={ "static_path":"static", #这是放置静态文件的目录名称 "static_url_prefix":"/sta/", #这是访问静态文件引用的url前缀 "template_path":"templates" } #生成路由规则 application= tornado.web.Application([ (r"/login/",LoginHandler), ],**settings) #将settings传入 if __name__ == '__main__': application.listen(8888) tornado.ioloop.IOLoop.instance().start()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/sta/commons.css" />
</head>
<body>
<h1>登陆</h1>
<form method="post">
    <input type="text" name="user">
<input type="submit" value="提交">
</form>
</body>
</html>
login.html

相关文章:

  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-09-01
  • 2021-12-02
  • 2021-06-13
猜你喜欢
  • 2022-12-23
  • 2022-01-28
  • 2021-08-10
  • 2021-10-07
  • 2022-12-23
  • 2021-08-22
  • 2021-12-12
相关资源
相似解决方案