入门(十)Flask框架

1、简介

常见的Python Web框架:

  • Flask:是一个使用 Python 编写的轻量级Web框架,快速开发Web应用
  • Django:全能型Web框架,重量级,功能强大

(1)安装

  • pip install flask
    (2)使用
from flask import Flask

# 创建一个app,
app = Flask(__name__)


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


@app.route('/list')
def list_book():
    return str([1, 2, 3])
    
    
if __name__ == '__main__':
    app.run(port='8000', debug=True)

开启debug后,会监测文件更改,并且给出更详细的报错信息

2、获取参数

(1)、get请求参数

from flask import Flask, request


app = Flask(__name__)


@app.route('/test_get')
def test_get():
    a = request.args.get('a', default=1)
    b = request.args.get('b', default=2)
    print(a, b)
    return 'get'


if __name__ == '__main__':
    app.run(debug=True)

(2)、post请求参数

from flask import Flask, request


app = Flask(__name__)


@app.route('/test_get')
def test_get():
    a = request.args.get('a', default=1)
    b = request.args.get('b', default=2)
    print(a, b)
    return """
    <form action="/test_post" method="post">
        姓名:<input name="username" />
        密码:<input name="password" />
        <input type="submit" value="提交" />
    </form>
    """


@app.route('/test_post', methods=['POST', 'GET'])
def test_post():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        return username
    else:
        return '登录失败'


if __name__ == '__main__':
    app.run(debug=True)

(3)、rest动态路由

from flask import Flask, request


app = Flask(__name__)


@app.route('/test_rest/<username>')
def test_rest(username):
    return username
    

if __name__ == '__main__':
    app.run(debug=True)

rest参数类型限定,@app.route('/test_rest/<str:username>')

(4)、文件上传

from flask import Flask, request
import time
import random

app = Flask(__name__)


@app.route('/getload')
def get_load():
    return '''
    <form action="upload" method="post" enctype="multipart/form-data">
        file:<input type="file" name="file" />
        <input type="submit" value="上传" />
    </form>
    '''


@app.route('/upload',methods=['post'])
def upload():
    file = request.files['file']
    save_path = (time.strftime('%Y{0}%m{1}%d{2}%H%M%S')).format('年', '月', '日') + str(random.randint(1,100)) + file.filename
    file.save(save_path)
    return 'success'


if __name__ == '__main__':
    app.run(debug=True)

(5)、JinJa2语法
变量传递

@app.route('/test_template')
def test_template():
    return render_template('demo.html', username='zhangsan', age=18)

页面语法
变量引用

<body>
{{username}}
</body>

分支语法

<body>
{% if username: %}
{{username}}
{% else %}
姓名为空
{% endif %}
</body>

循环语法

<body>
<ul>
    {% for user in age %}
    <li>{{user.name}}</li>
    {% endfor %}
</ul>
</body>

全局处理异常

@app.errorhandler(404)
def error_hander(e):
    print(e)
    return render_template('404.html')

(6)、利用蓝图模块化路由

  • 定义user模块

from flask import Blueprint

# 创建蓝图
user_cont = Blueprint('user', __name__)


@user_cont.route('/user')
def prod_list():
    return 'user_list'
  • 定义product模块
from flask import Blueprint

# 创建蓝图
product_controller = Blueprint('product_controller', __name__)


@product_controller.route('/pro')
def prod_list():
    return 'prod_list'

注册路由

from flask import Flask, request, redirect, jsonify, render_template
from mymodule.user_controller import user_cont
from mymodule.product_controller import product_controller


app = Flask(__name__)
app.register_blueprint(user_cont)
app.register_blueprint(product_controller)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容