zoukankan      html  css  js  c++  java
  • flask之二

    一、请求响应

    from flask import Flask,make_response,jsonify
    from flask import request
    from flask import render_template
    from flask import redirect
    from flask import make_response
    
    
    app = Flask(__name__)
    from werkzeug.datastructures import CombinedMultiDict
    app.debug=True
    @app.route('/login.html', methods=['GET', "POST"])
    def login():
        # print(type(request.values['name']))  # post和get提交的数据总和 还是个字典
        # print(request.full_path) # 全路径
        # print(request.url)      # 带数据
        # print(request.base_url) # 带域名
        # print(request.files)    # 等同于django中的request.FILES
        # 请求相关信息
        # request.method  提交的方法
        # request.args  get请求提及的数据
        # request.form   post请求提交的数据
        # request.values  post和get提交的数据总和
        # request.cookies  客户端所带的cookie
        # request.headers  请求头
        # request.path     不带域名,请求路径
        # request.full_path  不带域名,带参数的请求路径
        # request.script_root
        # request.url           带域名带参数的请求路径
        # request.base_url        带域名请求路径
        # request.url_root      域名
        # request.host_url        域名
        # request.host            127.0.0.1:500
        # request.files
        # obj = request.files['the_file_name']
        # obj.save('/var/www/uploads/' + secure_filename(f.filename))
    
    
    
        # 响应相关信息
        # return "字符串"
        # return render_template('html模板路径',**{})
        # return redirect('/index.html')
        # return jsonify({'k1':'v1'})
    
        # response = make_response(render_template('index.html'))
        # response是flask.wrappers.Response类型
        # response.delete_cookie('key')
        # response.set_cookie('key', 'value')
        # response.headers['X-Something'] = 'A value'
        # return response
    
        # res=make_response('内容xxx') # 响应对象
        # res=make_response(render_template('index.html')) # 响应对象
        res=make_response(jsonify({'name':'lqz'})) # 响应对象
        res.set_cookie('name','lqz')
        # 向响应头中加东西
        res.headers['xyt']='qsb'
    
        return res
    
    
    if __name__ == '__main__':
        app.run(port='8080')

    二、session及源码分析

    1 第一步必须配置秘钥
    2 全局导入session对象
    3 赋值:sesion['key']=value
    4 取值:session['key']
    5 数据加密以后,放到了cookie中----(token)


    源码执行流程

    1 源码分析执行流程
    2 请求来了在open_session中取出cookie,反解数据,包装成session---》视图函数中使用session
    3 只要session修改了,请求走了---》save_session---》把session加密,放到cookie中,返回给前端
    4 不同浏览器,cookie不同(你的淘宝,同一个浏览器只能登陆一个用户)
    
    
    
    
    回想django中的session如何实现的?
        -原理一模一样,它在哪写的,在中间件中,process_request和process_response

    三、闪现

    1 一些数据,放在某个位置,下次请求再取出来,取完就没了(flash)
    2 访问index--》name=lqz,放在某个位置
    3 下次访问order---》把这个数据取出来
    4 放到session中可以吗?
    
    5 本质原理:闪现是基于session的
    
    6 使用
        -设置 flash('aaa')
      -取值:get_flashed_message()
      
    7 分类
        -设置:flash('超时错误',category="x1")
        -取值:data = get_flashed_messages(category_filter=['x1'])

    四、请求扩展(Django中中间间)

    #  请求扩展(等同于django中的中间件,在请求进入视图函数之前,和离开视图函数之后执行一些功能)
    # before_request:请求来之前执行(可以加多个,从上往下执行,等同于中间件的process_request)
    # after_request:请求走之后(可以加多个,从下往上执行,等同于以中间件的process_response)
    # before_first_request:项目运行后的第一次会执行它(初始化的工工作)
    # @app.teardown_request:出错也会走,记录日志
    # @app.errorhandler(404):状态码是响应的,就会触发它的执行
    #@app.template_global()  # 全局函数,在模板中直接使用
    # @app.template_filter() # 全局过滤器,在模板中直接使用
    from flask import Flask,request,render_template
    from flask.views import MethodView
    app = Flask(__name__)
    app.debug=False
    # @app.before_request
    # def before():
    #     #取出访问者的ip,记录一下
    #     print(request.path)
    #     print('我执行了')
    #     # return '回去'  # 直接回去了,等同于django中return Response对象
    # @app.before_request
    # def before2():
    #     print('我执行了2222')
    
    
    # @app.after_request
    # def after(response):
    #     print('我走了')
    #
    #     print(response)
    #     # response.headers['sss']='sss'
    #     #设置cookie
    #     return response
    # @app.after_request
    # def after2(response):
    #     print('我走了22222')
    #     return response
    
    
    
    # @app.before_first_request
    # def first():
    #     print('我的第一次给了这个地址',request.environ.get('REMOTE_ADDR'))
    
    # @app.teardown_request  # 响应走的时候,错误也会走,记录错误日志,前提是debug为false
    # def ter(e):
    #     print('我一直走')
    #     print(e)
    
    
    # @app.errorhandler(404)
    # def error_404(arg):
    #     return "404错误了"
    #     # return render_template('好看的模板')
    
    # @app.errorhandler(500)
    # def error_500(arg):
    #     return "500错误了"
    
    
    # 6 template_global 定义全局函数,直接在模板中使用
    @app.template_global()
    def sb(a1, a2):
        return a1 + a2
    #{{sb(1,2)}}
    
    
    
    # 7 template_filter 过滤器、
    @app.template_filter()
    def db(a1,a2,a3,a4):
        return a1 + 100+a2+a3+a4
    #{{ 1|db(2,3)}}
    
    
    
    @app.route('/')
    def hello_world():
        print('我是视图函数')
        return render_template('index.html',a=100)
    
    
    
    if __name__ == '__main__':
        app.run(port=8080)
  • 相关阅读:
    spring2.5 mvc使用注解upload上传文件
    从5点来分析搜索引擎算法
    搜索引擎算法研究专题六:HITS算法
    搜索引擎算法研究专题五:TFIDF详解
    搜索引擎算法研究专题二:HITS算法及其衍生算法分析
    搜索引擎算法研究专题一:基于页面分块的搜索引擎排序算法改进
    搜索引擎算法研究专题三:聚集索引与非聚集索引介绍
    Spring最佳实践9.1 集成邮件服务
    搜索引擎算法研究专题四:随机冲浪模型介绍
    搜索引擎算法研究专题七:Hilltop算法
  • 原文地址:https://www.cnblogs.com/ltyc/p/14367659.html
Copyright © 2011-2022 走看看