• 【Python】快速上手 Flask


    【Python】快速上手 Flask



    1. 基本使用

    pip install flask

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/flask')
    def hello_flask():
       return 'Hello Flask'
    
    app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. Flask 路由/重定向

    2.1 Flask 路由

    这两个规则看起来类似,但在第二个规则中,使用斜杠(/)。因此,它成为一个规范的URL,使用 /python/python/ 返回相同的内容

    但是,如果是第一个规则,/flask/ URL会产生 404 Not Found 页面。

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/flask')
    def hello_flask():
       return 'Hello Flask'
    
    @app.route('/python/')
    def hello_python():
       return 'Hello Python'
    
    app.run(host="0.0.0.0",port=8888,debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.2 重定向(redirect)

    from flask import Flask, redirect
    
    app = Flask(__name__)
    
    @app.route('/index')
    def index():
        return redirect('https://baidu.com')
    
    app.run(host='0.0.0.0', port=8888, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3. 变量规则

    转换器描述
    int整型
    float浮点型
    path接受用作目录分隔符的斜杠
    string默认,字符串
    from flask import Flask, make_response, request  # 注意需导入 make_response
    
    app = Flask(__name__)
    
    
    # <传参>
    @app.route('/home/')
    # 函数要记得去接收参数
    def home(params):
        return '传入的参数: {}'.format(params)
    
    
    # http://127.0.0.1:8888/home/123
    
    # 如果需要限制传入参数的类型,可以使用转换器
    @app.route('/count/')
    def count(number):
        return '传入的数字加10 : {}'.format(number + 10)
    
    
    @app.route('/float/')
    def count_float(num):
        return '传入的数字加10.12 : {}'.format(num + 10.12)
    
    
    
    app.run(host='0.0.0.0', port=8888, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4. Flask HTTP方法

    默认情况下,Flask路由响应GET请求。但是,可以通过为route()装饰器提供方法参数来更改此首选项。

    方法描述
    GET以未加密的形式将数据发送到服务器。最常见的方法。
    POST用于将HTML表单数据发送到服务器。POST方法接收的数据不由服务器缓存。
    DELETE删除由URL给出的目标资源的所有当前表示。
    PUT用上传的内容替换目标资源的所有当前表示。
    HEAD和GET方法相同,但没有响应体。
    from flask import Flask, make_response, request  # 注意需导入 make_response
    
    app = Flask(__name__)
    
    
    @app.route('/get_request', methods=['GET'])
    def get_request():
        return 'GET请求'
    
    
    @app.route('/post_request', methods=['POST'])
    def post_request():
        return 'POST请求'
    
    
    @app.route('/delete_request', methods=['DELETE'])
    def delete_request():
        return 'DELETE请求'
    
    
    @app.route('/put_request', methods=['PUT'])
    def put_request():
        return 'PUT请求'
    
    
    @app.route('/head_request', methods=['HEAD'])
    def head_request():
        return 'HEAD请求'
    
    
    app.run(host='0.0.0.0', port=8888, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    举个例子

    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def index():
        return '欢迎来到主页'
    
    
    @app.route('/login', methods=['POST'])
    def login():
        my_json = request.get_json()
        user = my_json.get('user')
        password = my_json.get('password')
        if user == 'jack' and password == '123456':
            # 前端和后端统一请求和返回的数据格式,返回json格式需要导入jsonify这个包
            # return jsonify({
            #     "token": "sdohaohsdo",
            #     "birthday": "2002-4-16"
            # })
            return jsonify(token="sdohaohsdo", birthdat="2002-4-16")
    
    
    app.run(host='0.0.0.0', port=8888, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    5. Cookie

    Cookie以文本文件的形式存储在客户端的计算机上。其目的是记住和跟踪与客户使用相关的数据,以获得更好的访问者体验和网站统计信息。

    设置cookie

    默认有效期是临时cookie,浏览器关闭就失效,可以通过 max_age 设置有效期, 单位是秒

    resp = make_response("success")   # 设置响应体
    resp.set_cookie("username", "username", max_age=1000)
    
    • 1
    • 2

    获取cookie

    通过request.cookies的方式, 返回的是一个字典

    c = request.cookies.get("username")
    
    • 1

    删除cookie

    这里的删除只是让cookie过期,并不是直接删除cookie

    resp = make_response("del success")  # 设置响应体
    resp.delete_cookie("username")
    
    • 1
    • 2
    from flask import Flask, make_response, request  # 注意需导入 make_response
    
    app = Flask(__name__)
    
    
    @app.route('/set_cookie')
    def set_cookie():
        res = make_response('set success')
        res.set_cookie('username', 'jack', max_age=3600)
        return res
    
    
    @app.route('/get_cookie')
    def get_cookie():
        cookie = request.cookies.get('username')
        return cookie
    
    
    @app.route('/del_cookie')
    def del_cookie():
        res = make_response('del success')
        res.delete_cookie('username')
        return res
    
    app.run(host='0.0.0.0',port=8888,debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    6. Session

    与Cookie不同,Session(会话)数据存储在服务器上。会话是客户端登录到服务器并注销服务器的时间间隔。需要在该会话中保存的数据会存储在服务器上的临时目录中。

    为每个客户端的会话分配会话ID。会话数据存储在cookie的顶部,服务器以加密方式对其进行签名。对于此加密,Flask应用程序需要一个定义的SECRET_KEY

    Session对象也是一个字典对象,包含会话变量和关联值的键值对。

    设置密钥

    app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'
    
    • 1

    设置username 会话变量

    Session['username'] = 'admin'
    
    • 1

    要释放会话变量,请使用pop()方法

    Session.pop('username',None)
    
    • 1

    一个简单的登录和退出登录的案例

    from flask import Flask, request, session, jsonify, redirect
    
    app = Flask(__name__)
    # 记得设置密钥,不然会报错
    app.secret_key = 'asdasdasdasdasdasd'
    
    
    @app.route('/login', methods=['POST'])
    def login():
        _json = request.get_json()
        username = _json.get('username')
        password = _json.get('password')
        if not all([username, password]):
            return '缺少参数'
    
        if username == 'jack' and password == '123456':
            # 设置登录状态,在会话中定义一个标识,要导入session
            session['token'] = 'asdasd'
            return jsonify(msg="登录成功")
        else:
            return josnify("账号或密码错误,请重新登录!")
    
    
    @app.route('/logout', methods=['GET'])
    def logout():
        # 清空会话
        session.pop('token', None)
        redirect('/checklogin')
        return jsonify(msg="退出成功")
    
    
    @app.route('/checklogin', methods=['GET'])
    def checklogin():
        flag = session.get('token')
        if flag:
            return jsonify(msg='已经登录')
        else:
            return jsonify(msg='请登录')
    
    app.run(host='0.0.0.0', port=8888, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    总结

    以上就是今天要讲的内容,希望对大家有所帮助!!!

  • 相关阅读:
    基于SpringBoot的停车位智能管理系统的设计与实现_kaic
    spearman相关系数(斯皮尔曼相关系数是什么意思)
    【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 )
    基于高次指数平滑动态边界限制的深度学习优化算法
    分开的两个程序使用共同的mysql,一端更新了表,另一端怎么及时更新缓存,使用mybatis
    “BallCollisionCard“ app Tech Support(URL)
    软件工程(1、2;5~7小测参考答案)
    并查集的实现的应用
    C语言二叉树的建立和遍历
    Hive--09---函数----窗口函数
  • 原文地址:https://blog.csdn.net/Trees__/article/details/127659573