轻量级框架,几行代码就可以起一个web服务,组件很少,可根据需求安装不同组件,
安装:pip install flask
参考资料http://www.cnblogs.com/GGGG-XXXX/articles/10182786.html
- 用werkzeug模块起项目
wsgi是个协议,
django:wsgiref模块:封装request和socket
flask: werkzeug模块:封装socket
from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple
@Request.application
def run(request): # 起web服务,request参数,请求进run
return Response('Wendy~~~')
if __name__ == '__main__': # 以下代码只在此脚本运行,别的脚本运行不了
run_simple('localhost', 5000, run)
# 通过run_simple在本地5000端口起一个web服务,监听run函数
- flask起项目
from flask import Flask
#实例化Flask,名字为__name__
app = Flask(__name__)
@app.route('/') # 实例化对象的route方法,通过装饰器建立路由和视图的关系,'/'路径执行index
def index():
return 'Laura~~~'
if __name__ == '__main__':
app.run() # 实例化对象执行run就可以起flask服务,默认端口5000
- flask实现登录
from flask import Flask, render_template, request, redirect
app = Flask(__name__, template_folder='templates') # 可以修改默认模版文件夹名
@app.route('/login', methods=['GET', 'POST']) # 默认只允许get请求
def login():
if request.method == 'POST':
username = request.form.get('username')
pwd = request.form.get('pwd')
if username == 'Iris' and pwd == '123':
return redirect('/') # 重定向
return render_template('login.html') # 跳转页面
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
- 配置文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
print(app.config) # 查看配置文件信息
return '主页'
if __name__ == '__main__':
app.run()
运行结果
<Config
{
‘ENV’: ‘production’,
‘DEBUG’: False, # 是否开启debug模式
‘TESTING’: False, # 是否开启测试模式
‘PROPAGATE_EXCEPTIONS’: None,
‘PRESERVE_CONTEXT_ON_EXCEPTION’: None,
‘SECRET_KEY’: None,
‘PERMANENT_SESSION_LIFETIME’: datetime.timedelta(31),
‘USE_X_SENDFILE’: False,
‘SERVER_NAME’: None,
‘APPLICATION_ROOT’: ‘/’,
‘SESSION_COOKIE_NAME’: ‘session’,
‘SESSION_COOKIE_DOMAIN’: None,
‘SESSION_COOKIE_PATH’: None,
‘SESSION_COOKIE_HTTPONLY’: True,
‘SESSION_COOKIE_SECURE’: False,
‘SESSION_COOKIE_SAMESITE’: None,
‘SESSION_REFRESH_EACH_REQUEST’: True,
‘MAX_CONTENT_LENGTH’: None,
‘SEND_FILE_MAX_AGE_DEFAULT’: datetime.timedelta(0, 43200),
‘TRAP_BAD_REQUEST_ERRORS’: None,
‘TRAP_HTTP_EXCEPTIONS’: False,
‘EXPLAIN_TEMPLATE_LOADING’: False,
‘PREFERRED_URL_SCHEME’: ‘http’,
‘JSON_AS_ASCII’: True,
‘JSON_SORT_KEYS’: True,
‘JSONIFY_PRETTYPRINT_REGULAR’: False,
‘JSONIFY_MIMETYPE’: ‘application/json’,
‘TEMPLATES_AUTO_RELOAD’: None, ‘MAX_COOKIE_SIZE’: 4093
}>
更改默认配置
# 以类的形式区分配置信息
class DEVConfig(object):
DEBUG = True
class TestConfig(object): # 测试环境
TESTING = True
# print(dir(DEVConfig))
脚本文件
from flask import Flask
app = Flask(__name__)
app.config.from_object('settings.DEVConfig') # 如果把Debug改为True就加此句
app.config.from_object('settings.TestConfig') # TESTING该为True
@app.route('/')
def index():
print(app.config) # 查看配置文件信息
return '主页'
if __name__ == '__main__':
app.run()
运行结果
<Config {‘ENV’: ‘production’, ‘DEBUG’: True, ‘TESTING’: True,…
原理
- flask配置路由
路由参数
例
@app.route(’/user/’)
@app.route(’/post/int:post_id’)
@app.route(’/post/float:post_id’)
@app.route(’/post/path:path’)
路由默认支持的参数
DEFAULT_CONVERTERS = {
‘default’: UnicodeConverter,
‘string’: UnicodeConverter,
‘any’: AnyConverter,
‘path’: PathConverter,
‘int’: IntegerConverter,
‘float’: FloatConverter,
‘uuid’: UUIDConverter,
}
路由的命名和反向解析
上例中endpoint默认是函数名,也就是book
- 模版