• flask框架


    Flask

    1 flask简介

    我们之所以在浏览器中输入localhost:8080然后就可以把webapps下面的项目文件以浏览器的方式打开,功臣在与tomcat。python语言写的项目,转换为web,Flask框架

    轻量级web应用框架。

    环境准备:

    pip install flask
    

    2 项目

    2.1 创建一个flask对象

    创建一个flask程序对象,当客户端发送消息到web服务器时,web服务器可以把消息给Flask实例。

    app = Flask(__name__)
    
    2.2 构造实例对象从url到python函数的映射关系
    @app.route('/login')
    def login():
        return "你好,欢迎到来"
    
    2.3 启动服务
    app.run(debug=True, port=8899)
    
    2.4 案例
    from flask import Flask
    
    # step1:创建一个应用实例
    app = Flask(__name__)   
    
    # step2:url到python视图函数的映射关系---添加静态路由
    @app.route('/login')
    def login():
        return "你好,欢迎到来"
    
    # step3:启动服务
    # debug:调试模式打开
    # port:随便写一个,要求当前端口没有占用
    app.run(debug=True, port=8899)
    

    运行后浏览器访问效果:

    image-20210930111144237

    3 路由

    路由分类:

    • 静态路由:在app.route(urel地址)不带参数的
    • 动态路由:在app.route(url地址/),带参数的

    动态路由案例:

    """
    
    动态路由
    """
    
    from flask import Flask
    
    app = Flask(__name__)
    
    # 动态路由登录
    # 密码设置为整数
    @app.route('/login//')
    def login(username,password):
        return f"你好{username},欢迎到来"
    
    if __name__ == '__main__':
        app.run(debug=True, port=8899)
    

    运行结果:

    image-20210930112609676

    4 http的请求和响应

    4.1 请求

    请求的方法:

    a)request.method : 获取本次请求的请求方式(GET / POST等)

    b)request.headers:获取请求信息头的相关信息

    c)request.path:获取请求的资源具体路径(不带参数)

    d)request.full_path:获取完整的请求资源具体路径(带参数)

    e)request.url: 获取完整的请求地址,从协议开始

    f)request.args : 获取以get请求方式提交的数据

    g)request.form : 获取以post请求方式提交的数据

    h)request.files:获取上传的文件,用save进行保存

    i)request.cookies:获取cookies中的相关信息

    案例:

    """
    请求
    """
    
    from flask import Flask,request
    
    app = Flask(__name__)
    
    # 动态路由登录
    @app.route('/login//')
    def login(username,password):
        print(f"请求头为:{request.headers.get('Accept-Encoding')}")
        print(f"请求的url为:{request.path}")
        print(f"请求的url为:{request.full_path}")
        print(f"请求的method:{request.method}")
        return f"你好{username},欢迎到来"
    
    if __name__ == '__main__':
        app.run(debug=True, port=8899)
    

    结果如下:

    请求头为:gzip, deflate, br
    请求的url为:/login/admin/123		# 路径
    请求的url为:/login/admin/123?		# 全路径= 路径 + params
    请求的method:GET
    

    案例:发送带get请求数据的url

    """
    带get参数的服务
    """
    """
    请求
    """
    
    from flask import Flask,request
    
    app = Flask(__name__)
    
    # get请求
    @app.route('/login', methods=['GET'])
    def login():
        username = request.args["username"]
        pwd = request.args["password"]
    
        return f"你发送的get请求的参数为:{username},{pwd},你好,欢迎到来"
    
    if __name__ == '__main__':
        app.run(debug=True, port=8899)
    

    发送请求:

    image-20210930115220028

    4.2 响应

    响应分类:

    • 数据响应:文本响应,比如login-pass;json响应,比如会员查询的结果,一条会员信息就是json串中的一个成员
    • 页面响应:返回就是一个页面,就是视图函数

    文本响应案例:

    """
    返回文本
    """
    
    from flask import Flask,request
    
    app = Flask(__name__)
    
    # get请求
    @app.route('/login', methods=['GET'])
    def login():
        username = request.args["username"]
        pwd = request.args["password"]
        content = f"你发送的get请求的参数为:{username},{pwd},你好,欢迎到来"
        return content      # 返回文本
    
    if __name__ == '__main__':
        app.run(debug=True, port=8899)
    

    json响应案例:

    """
    返回json
    """
    
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    # get请求
    @app.route('/login', methods=['GET'])
    def login():
        username = request.args["username"]
        pwd = request.args["password"]
        data = {"username": username, "password": pwd}
        return jsonify(data)        # 返回结果为json串
    
    if __name__ == '__main__':
        app.run(debug=True, port=8899)
    
    

    运行结果:

    image-20210930121715374

    视图响应案例:

    """
    返回视图函数
    1. 通过get访问首页
    2. 显示输入用户名和密码后,点击登录触发post请求
    3. 返回post的信息
    4. 输入错误的信息:给出一个链接,可以提示点击后重新登录?
    """
    
    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    # get请求
    # 获取登录页面
    # 输入信息,点击登录
    # 登录成功
    @app.route('/login.html', methods=['GET','POST'])
    def login():
        str = '''
    
    
    
        
        Title
    
    
    

    用户登录

    用户名:
    密 码:

    '''
    if request.method == "GET": return str # 返回结果为json串 else: input_username = request.form.get("username") # 获取输入框输入的用户名 input_password = request.form.get("password") # 获取输入框输入的密码 if input_username=="admin" and input_password == '123': return r"登录成功
    "
    else: return "

    登录失败请重新登录

    "
    if __name__ == '__main__': app.run(debug=True, port=8899)
    4.3 make_response构造响应结果

    make_response()有三个参数:

    • 字符串
    • 状态码
    • 响应头

    登录成功,响应200,并且把用户的信息添加到响应头中,如果失败,就返回400的错误案例:

    """
    make_response
    登录
    """
    
    from flask import Flask, request, jsonify,make_response
    
    app = Flask(__name__)
    app.config["JSON_AS_ASCII"] = False
    
    # get请求
    @app.route('/login', methods=['GET'])
    def login():
        username = request.args["username"]
        pwd = request.args["password"]
    
        if username == 'admin' and pwd == '123':
            response = make_response(jsonify({"success": True, "msg": "登录成功"}), 200,
                                     {"userinfo": "username={};password={}".format(username,pwd)})
        else:
            response = make_response(jsonify({"success": False, "msg": "登录失败"}), 1000)
        return response
    
    if __name__ == '__main__':
        app.run(debug=True, port=8899)
    

    运行结果:

    image-20210930150436454

    5 模拟项目

    一个完整的flask项目是分为三个部分的:

    • static:css、图片
    • templates:html
    • run.py:服务

    案例如图所示:

    image-20210930151126052

    6 cookie和session

    6.1 cookie

    cookie的相关的方法:

    • 设置cookie:response.set_cookie(key, value, mas_age=)
    • 获取cookie:response.get_cookie(key)
    • 删除cookie:response.get_cookie()

    在一个demo中创建两个视图函数,一个是登录的,如果登录成功,我们就把cookie添加到浏览器中,一个是homt/page视图,如果有cookie那么就显示欢迎光临,如果没有cookie就显示请去登录:

    """
    make_response
    登录
    """
    
    from flask import Flask, request, jsonify,make_response
    
    app = Flask(__name__)
    app.config["JSON_AS_ASCII"] = False
    
    # get请求
    @app.route('/login', methods=['GET'])
    def login():
        username = request.args["username"]
        pwd = request.args["password"]
    
        if username == 'admin' and pwd == '123':
            response = make_response(jsonify({"success": True, "msg": "登录成功"}), 200,
                                     {"userinfo": "username={};password={}".format(username,pwd)})
    
            # 如果登录成功,就去设置cookie,将登录的用户名和密码放进cookie
            response.set_cookie("username", username, max_age=60)
            response.set_cookie("password", pwd, max_age=60)
        else:
            response = make_response(jsonify({"success": False, "msg": "登录失败"}), 1000)
        return response
    
    @app.route('/home',methods=['GET'])
    def homepage():
        #获取cookie里面的用户名
        username = request.cookies.get("username")
        if username:
            response = make_response('

    {},欢迎你来到首页!

    '
    .format(username)) else: response = make_response('

    亲,你还没有登录哦!

    '
    ) return response if __name__ == '__main__': app.run(debug=True, port=8899)

    登录成功如图:

    image-20210930153406067

    6.2 session

    session拥有的方法有三个:

    • 设置session:session[key] = value
    • 获取session:session.get[key]
    • 删除session:del session ; session.pop[key]

    在一个demo中创三个视图函数,一个是登录的,如果登录成功,我们就把session添加到浏览器中,一个是homt/page视图,如果有session那么就显示欢迎光临,如果没有session就显示请去登录,一个是logout视图,用来清除session,代码如下:

    """
    在一个demo中创三个视图函数,一个是登录的,
    如果登录成功,我们就把session添加到浏览器中,一个是homt/page视图,
    如果有session那么就显示欢迎光临,如果没有session就显示请去登录,
    一个是logout视图,用来清除session
    """
    import os
    
    from flask import Flask, request, jsonify, make_response, session
    
    app = Flask(__name__)
    app.config["JSON_AS_ASCII"] = False
    app.secret_key = os.urandom(24)
    
    # get请求
    @app.route('/login', methods=['GET'])
    def login():
        username = request.args["username"]
        pwd = request.args["password"]
    
        if username == 'admin' and pwd == '123':
            response = make_response(jsonify({"success": True, "msg": "登录成功"}), 200,
                                     {"userinfo": "username={};password={}".format(username,pwd)})
    
            # 如果登录成功,就去设置session,将登录的用户名和密码放进session
            session['username'] = username
            session['password'] = pwd
        else:
            response = make_response(jsonify({"success": False, "msg": "登录失败"}), 1000)
        return response
    
    @app.route('/home',methods=['GET'])
    def homepage():
        #获取session里面的用户名
        username = session.get("username")
        if username:
            response = make_response('

    {},欢迎你来到首页!

    '
    .format(username)) else: response = make_response('

    亲,你还没有登录哦!

    '
    ) return response @app.route('/logout',methods=['GET']) def logout(): rsp = make_response(jsonify({"msg": "暂未登录"})) #如果存在cookie,清除session里面的值 if session.get("username") and session.get("password"): session.pop('username') session.pop('password') rsp = make_response(jsonify({"success": True, "msg": "退出成功"})) return rsp if __name__ == '__main__': app.run(debug=True, port=8899)

    运行结果:

    image-20210930155251107

  • 相关阅读:
    ZoomIt最简单方便的屏幕画图工具操作手册
    socket.error: [Errno 10049]错误
    XFINIUM.PDF Toolkit 11.2 Crack
    多角度了解ABeam(德硕)技术架构
    Nginx源码分析
    成集云 | 人货客数据分析系统集成ERP | 解决方案
    使用asp.net core web api创建web后台,并连接和使用Sql Server数据库
    条件随机场CRF(持续更新ing...)
    python最优化算法实战---线性规划之内点法
    web3 前端dapp从redux过滤出 (我创建与别人创建)正在执行的订单 并展示在Table上
  • 原文地址:https://blog.csdn.net/zhuge_long/article/details/142288367