轻量级框架,几行代码就可以起一个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

  • 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()

flask

  • 配置文件
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
}>
更改默认配置

在根目录下新建settings.py

# 以类的形式区分配置信息

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

  • flask配置路由
    路由参数

    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,
}
路由的命名和反向解析

flask
上例中endpoint默认是函数名,也就是book

  • 模版

相关文章: