web框架之tornado
Python Web框架介绍:
tornado: socket,逻辑处理
Django,bottle,flask: 逻辑处理,第三方的模块(包含了socket),jinja2
Models 数据库相关操作
View 模板HTML文件
Controllers 业务逻辑
MVC -> MVC框架
Models 数据库相关操作
Template 模板HTML文件
Views 业务逻辑
MTV -> MTV框架
jinja2 第三方模块:pip install jinja2
Tornado框架:
写:
继承类tornado.web.RequestHandler
定义路由映射 application
启动 application.listen(8888)
配置文件
模板路径
补充:
self.get_argument("xxx") # 获取用户提交的数据
POST
GET
==> GET,URL中传递数据
{% for item in xxxooo %}
<li>{{item}}</li>
{% end %} # 模板语言通过for循环展示数据
模板语言:
{{}}
{% if xxx %}
{% else %}
{% end %} # 必须带end
自定义:
uimethod
uimodule
简单的tornado框架:
#!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.web import tornado.ioloop import uimethod as mt import uimodule as md INPUTS_LIST = [] # tornado框架 class MainHandle(tornado.web.RequestHandler): # get访问会自动执行post()方法返回数据给客户端,可以通过url传递参数 def get(self): # self.write("Hello, world!") # render() 默认从当前目录下找,template_path可以配置模板路径 # 1.打开index.html文件,读取内容(包含特殊语法) # 2.xxxooo = [11,22,33,44] && 读取内容(包含特殊语法) # 3.得到新的字符串,返回给用户 name = self.get_argument("xxx", None) if name: INPUTS_LIST.append(name) self.render("index.html", npm="NPM888", xxxooo=INPUTS_LIST) # post访问会自动执行post()方法返回数据给客户端 # def post(self, *args, **kwargs): # # 获取form表单提交的内容 # name = self.get_argument("xxx") # # 将内容更新到页面 # INPUTS_LIST.append(name) # self.render("index.html", xxxooo=INPUTS_LIST) settings = { "template_path": "template", # 模板路径的配置【名字template_path不能改】 "static_path": "static", # 静态文件路径的配置【名字static_path不能改】 # "static_url_prefix": "/sss/" # 静态文件的前缀,文件还是去static_path里面找,默认不使用 "ui_methods": mt, "ui_modules": md, } # 路由映射,路由系统 application = tornado.web.Application([ (r"/index", MainHandle), ], **settings) if __name__ == '__main__': print(bin(108)) # socket 运行起来了 # application.listen(8888) # tornado.ioloop.IOLoop.instance().start()
static文件代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Index</title> <link rel="stylesheet" href="{{static_url('commons.css')}}"/> </head> <body> <h1>提交内容</h1> <form method="get" action="/index"> <input type="text" name="xxx"/> <input type="submit" name="提交"/> </form> <h1>展示内容</h1> <h3>{{npm}}</h3> <h3>{{func(npm)}}</h3> <h3>{% module custom() %}</h3> <ul> {% for item in xxxooo %} {% if item == "alex" %} <li style="color: red;">{{item}}</li> {% else %} <li >{{item}}</li> {% end %} {% end %} </ul> <script type="text/javascript" src="{{static_url('index.js')}}"></script> </body> </html>
mt文件代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- def func(self, arg): return arg.lower()
md文件index.html代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- from tornado.web import UIModule class custom(UIModule): def render(self, *args, **kwargs): return "1234567890"
代码运行结果: