flask

------------恢复内容开始------------

https://dormousehole.readthedocs.io/en/latest/
参数配置
启动的时候可以添加参数在run()
debug 是否开启调试模式,开启后修改python代码会自动重启
threaded 是否开启多线程
port 启动指定服务器的端口号
host 主机 默认127.0.0.1 指定为0.0.0.0 代表本机所有ip

flask-script
可以添加flask脚本扩展库
添加命令行参数
安装: pip inistall flask-script
初始化: 使用app构建Manager对象
调用:
runserver
-d 调试模式
-r 自动从新加载
-p 端口
-h 主机
--threaded 多线程
shell


框架
Django: 内部包含了很多组件:orm from modelfrom 缓存,session,中间件,信号等
Flask: 内部没有很多组件,第三方组件非常丰富
路由比较特殊,基于装饰器来实现,但本质还是通过add_url_rule来实现的
Tornado: 异步非阻塞框架(node.js)

flask快速入门:
安装
pip3 insyall flask
wsgi,
werkzeug示例:
from werkzeug.wrappers import Request,Response

@Request.application
def hello(request):
return Response('Hello World')

if __name__ == '__main__':
from werkzeug.serving import run_simple
run_simple('localhost',4000,hello)
wsgiref示例:
from wsgiref.simple_server import make_server

def runserver(environ,start_response):
start_response('200 ok',[('Content-Type','text/html')])
return [bytes('<h1>Hello,web!</h1>',encoding='utf-8')]

if __name__ == '__main__':
httpd = make_server('localhost',8000,runserver)
print("Serving HTTP on port 8000...")
httpd.serve_forever()
本质的本质:
import socket

def handle_request(client):
buf = client.recv(1024)
client.send("HTTP/1.1 200 OK\r\n\r\n")
client.send("Hello, Seven")

def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost',8000))
sock.listen(5)

while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()

if __name__ == '__main__':
main()
flask:
from flask import Flask

#实例化flask对象
app = Flask(__name__)


@app.route('/')
def hello_world():
return 'Hello World!'


if __name__ == '__main__':
app.run()
应用:demo
装饰器:用户认证
装饰器

 

闪现;
应用:一般对临时数据操作,如:显示错误信息

请求扩展(中间件)
1,基于before_request做用户登录认证

View Code

 

2,执行顺序

View Code

 

执行结果

第一个进来了
第二个进来了
index函数
第二个走了
第一个走了

 

3,请求拦截后 ,response所有都执行

View Code

 

#在响应(response)之前做出响应,多个按照倒序执行

View Code

 

执行结果
第一个进来了
第二个走了
第一个走了

4,定制错误信息

View Code

 

posted @ 2020-06-16 16:09  世界和平i  阅读(101)  评论(0)    收藏  举报