Bottlehtml
Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只有一个 .py 文件,除了Python的标准库外,其不依赖任何其余模块。前端
建立项目python
from bottle import template, Bottle root = Bottle() @root.route('/hello/') def index(): return '<b>Hello World!</b>' root.run(host='localhost', port=8080, debug=True)
详情请看转载连接:https://www.cnblogs.com/wupeiqi/articles/5341480.htmlweb
flask数据库
Flask是一个基于Python开发而且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,而后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,若是要返回给用户复杂的内容时,须要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。flask
“微”(micro) 并不表示你须要把整个 Web 应用塞进单个 Python 文件(虽然确实能够 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你作出太多决策——好比使用何种数据库。而那些 Flask 所选择的——好比使用何种模板引擎——则很容易替换。除此以外的一切都由可由你掌握。如此,Flask 能够与您珠联璧合。后端
默认状况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库能够胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 自己实现的同样。众多的扩展提供了数据库集成、表单验证、上传处理、各类各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。浏览器
# 后端代码 from flask import Flask, render_template, request, make_response, redirect, session # 1.静态文件和模板路径匹配 app = Flask(__name__) # 5.自定制前端模板函数 def text(): return '<a href="#">连接</a>' @app.route('/', methods=['GET', 'POST']) def hello_world(): # 7.获取请求内容,及请求方法 print(request.args) # 3.返回字符串 # return 'Hello World!' # 4.返回模板 return render_template('index.html', k1='root', k2=[1, 2, 3], k3={'name': 'eric', 'pwd': '1234'}, k4=text) # 8.响应额外的数据 # resp = make_response(render_template('index.html', # k1='root', # k2=[1, 2, 3], # k3={'name': 'eric', 'pwd': '1234'}, # k4=text)) # resp.set_cookie('username', 'the name') # return resp # 9.重定向,相似于Django的reverse功能:url_for # return redirect('/hello/about') # url = url_for('hello', 'about') # return redirect(url) # 10.Session:你能够理解成咱们用浏览器上网,到关闭浏览器的这一过程。session是会话过程当中,服务器用来记录特定用户会话的信息。 # 6.路由映射 # - @app.route('/user/<username>') # - @app.route('/post/<int:post_id>') # - @app.route('/post/<float:post_id>') # - @app.route('/post/<path:path>') # - @app.route('/login', methods=['GET', 'POST']) # 以hello为路径头后面接括号中的:about,help,imprint,class,"foo, bar"这几个参数发送请求 @app.route('/hello/<any(about,help,imprint,class,"foo, bar"):page_name>') def hello(page_name): return page_name if __name__ == '__main__': # 2.IP和端口的配置:默认端口5000 app.run()
<!-- 前端代码块 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>Hello world!</h2> {{ k1 }} {{ k2 }} <ul> {% for item in k2 %} <li>{{ item }}</li> {% endfor %} </ul> {{ k3 }} <ul> {% for key,value in k3.items() %} <li>{{ key }}:{{ value }}</li> {% endfor %} </ul> {{ k4() | safe }} </body> </html>
相似于页面的错误提示能够用到这个中间件服务器
# Author:wylkjj # Date:2020/2/28 # -*- coding:utf-8 -*- from flask import Flask app = Flask(__name__) @app.route('/index/', methods=['GET', 'POST']) def hello_world(): print('...') return 'OK' def my_wsgi_app(environ, start_response): print('my_wsgi_app') start_response('200 OK', [('Content-Type', 'text/html')]) return [bytes('<h1>Hello</h1>', encoding='utf-8'), ] class Foo: def __init__(self, w): self.w = w def __call__(self, environ, start_response): obj = self.w(environ, start_response) return obj if __name__ == '__main__': # app.wsgi_app = my_wsgi_app # 11.自定制中间件 app.wsgi_app = Foo(app.wsgi_app) app.run()
message是一个基于Session实现的用于保存数据的集合,其特色是:使用一次就删除cookie
from flask import Flask, flash, render_template, request,get_flashed_messages app = Flask(__name__) @app.route('/') def index1(): # 12. 获取消息 v = get_flashed_messages() print(v) return render_template('s4.html') @app.route('/set') def index2(): v = request.args.get('p') # 13. 设置消息 flash('kkkk') return 'ok' if __name__ == "__main__": app.run()
tornado
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。
Tornado 和如今的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,并且速度至关快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒能够处理数以千计的链接,这意味着对于实时 Web 服务来讲,Tornado 是一个理想的 Web 框架。咱们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每个活动用户都会保持着一个服务器链接。(关于如何扩容 服务器,以处理数以千计的客户端的链接的问题,请参阅 C10K problem。)
第一步:执行脚本,监听 8888 端口
第二步:浏览器客户端访问 /index --> http://127.0.0.1:8888/index
第三步:服务器接受请求,并交由对应的类处理该请求
第四步:类接受到请求以后,根据请求方式(post / get / delete ...)的不一样调用并执行相应的方法
第五步:方法返回值的字符串内容发送浏览器
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/index", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
模板语言:(Django和jinja2语言类似)
三大组件
微型框架
安装
路由映射大约可分为三种:
Django的路由映射是一种:path = [ '/index/' , view.index ]
bottle的路由映射也是一种:
@route
def func():
pass
最厉害的第三种:
url = ( [ ' /?P
/ acount / login
acount.py
login方法