zoukankan      html  css  js  c++  java
  • 【Flask】 python学习第一章

    钩子函数和装饰器路由实现

    before_request 每次请求都会触发             

    before_first_requrest  第一次请求前触发 

    after_request  请求后触发 并返回参数       

    teardown_request  失败后触发 并返回异常 需要传入参数接收

    from flask import Flask, request
    
    # 设置对象
    app = Flask(__name__,
                static_url_path='/python27',
                static_folder='static',
                template_folder='templates')
    
    
    # 第一次请求之前都会调用  例如mysql连接
    @app.before_first_request
    def before_first_request():
        print("before_first_request")
    
    # 每次请求都会被调用
    @app.before_request
    def before_request():
        print("before_request")
        # request.remote_addr  用户访问IP地址
        # 判断如果访问地址在黑名单内 就return 黑名单
        if request.remote_addr == "127.0.0.1":
            return "黑名单"
    
    # 请求之后会调用 并且在函数里面接收一个参数 响应
    @app.after_request
    def after_request(response):
        print("after_request")
        # 对响应数据进行统一处理 response返回数据为return数据
        return response
    
    
    # 请求失败之后会调用函数 并且将异常传入参数
    @app.teardown_request
    def teardown_request(error):
        print("teardown_request")
        return error
    
    @app.route('/')
    def index():
        return "hello wowlrd"
    
    
    if __name__ == '__main__':
        app.run(host='127.0.0.1', port=8888, debug=True)
    钩子函数

    werkzeug工具集 

    Request response routing模块 other

    routing模块: Rule Map BaseConverters MapAdapter 

    Request  常用属性 

    data  form args cookies headers methods url files 

    app.route("/data", methods=['POST'])

    def data():

      data = request.data 

      print(data)

      return "ok"

    from flask import Flask, request
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def index():
        return "index"
    
    
    @app.route('/data', methods=['POST'])
    def data():
        data = request.data
        print(data)
        return 'ok'
    
    
    @app.route("/upload", methods=['POST'])
    def upload():
        file = request.files.get("pic")
        file.save("aaa.jpg")
        return "success"
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    data

    状态保持

    无状态:http 无状态协议 每次请求独立, 协议对事务没有记忆能力,  同一个url请求 没有上下文关系

    解决无状态协议问题 

    客户端 cookie                   服务器端 session   

    cookie 不同网站之间cookie不能共享 同源策略 、设置获取cookie 浏览器会自动保存cookie  、 

    request.cookie.get("passwd")  #获取cookie值  
    
    response =  make_response("success")  # 设置对象  
    
    respnse.set_cookie("passwd","qwe", max_age = 3600)   #设置cookie值  # 设置过期时间  max_age最大连接时间3600秒 

    response.delete_cookie("passwd") 删除cookie 登出
    from flask import Flask, request, make_response
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def index():
        username = request.cookies.get('username')
        passwd = request.cookies.get('userpass')
        return "%s ----- %s" % (username, passwd)
    
    
    
    @app.route("/login")
    def login():
        response = make_response("success")
        response.set_cookie("username", "laowang")
        response.set_cookie("userpass", "123")
        return response
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    获取cookie 和 设置cookie

    服务器端 session   存放敏感信  session依赖cookie 

    session需要设置  app.config["SECRET_KEY"] = "AWDWDAIJIAJCWJAI"    

    session可以放在url中 

    # 设置session
        app.config["SECRET_KEY"] = "qwniassnidiajs"
        session["user_name"] = "laowang"
        session["user_id"]  = "123456"
        
    # 获取session 如果没有 返回值为空 
       user_id = session.get("user_id", '') 
       user_name = session.get("user_name", '')
    
    # 删除session 如果已经删除 返回值为none
       session.pop("user_id", None)
       session.pop("user_name", None)
    from flask import Flask, request, session
    
    app = Flask(__name__)
    # session 加密 使用 必须大写
    app.config['SECRET_KEY'] = "adwdawdaanvoirjaowe"
    
    
    # 获取 session
    @app.route("/")
    def index():
        # session 依赖 cookie
        user_id = session.get("user_id", '')
        user_name = session.get("user_name", '')
        # 返回到页面
        return "%s + %s" % (user_id, user_name)
    
    
    # 登陆 传输session
    @app.route('/login')
    def login():
        session['user_id'] = "1"
        session["user_name"] = "laowang"
        return "session"
    
    
    # 登出 删除session
    @app.route("/logout")
    def logout():
        session.pop("user_id" , None)
        session.pop("user_name", None)
        return "success"
    
    
    if __name__ == '__main__':
        app.run(debug=True)
    设置session 登陆登出

    请求上下文  request context     请求发生时 可以使用

    应用上下文 application context  应运启动时 可以使用 

    app = Flask(__name__) ------> 相等于current_app
    app.route('/') def login(): print(request.method) print(current_app.config.get("DEBUG"))

    未完待续

  • 相关阅读:
    ERROR: do not initialise statics to false
    kernel defconfig
    python --- comment
    python --- for
    Xcode密钥没有备份或者证书过期,出现Valid Signing错误
    [iOS]XCODE5升级之路
    VirtualBOX 虚拟机安装 OS X 10.9 Mavericks 及 Xcode 5,本人X220亲测
    [下载] MultiBeast 6.2.1版,支持10.9 Mavericks。Mac上的驱动精灵,最简单安装驱动的方式。
    XCode 5资源文件不自动更新问题
    Microsoft Word 2010/2013 无法创建工作文件 请检查临时环境变量
  • 原文地址:https://www.cnblogs.com/oscarli/p/12056826.html
Copyright © 2011-2022 走看看