zoukankan      html  css  js  c++  java
  • 请求与响应、闪现、请求扩张、中间件等等

    请求与响应

    from flask import Flask,request,make_response,render_template
    
    app = Flask(__name__)
    
    
    
    
    @app.route('/login.html', methods=['GET', "POST"])
    def login():
        # 请求相关信息
        # request.method  提交的方法
        print(request.method)
        # request.args  get请求提及的数据
        print(request.args)
        # request.form   post请求提交的数据
        print(request.form)
        # request.values  post和get提交的数据总和
        print(request.values)
        # request.cookies  客户端所带的cookie
        print(request.cookies)
        # request.headers  请求头
        print(request.headers)
        # request.path     不带域名,请求路径
        print(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
    
        #返回字符串
        #response = make_response("内容")
        #response.set_cookie("tank_love","piao")
    
        #返回html
        response=make_response(render_template("index.html"))
        #响应头
        response.headers['X-Something'] = 'sb'
        #返回响应的时候删除cookie里的值
        response.delete_cookie('jason')
        return response
    
    
    if __name__ == '__main__':
        app.run()
    
    

    闪现

    '''
    此闪现非彼闪现
    闪现解决的问题:-假设在a页面操作出错,c页面(不管操作了多少个页面),跳转到b页面之后,在b页面显示a页面的错误信息
    
    '''
    from flask import Flask,flash,get_flashed_messages,request
    
    app = Flask(__name__)
    app.secret_key = 'asdfasdf'
    
    
    @app.route('/index')
    def index():
    	#这里存入了一个flash
        flash('超时错误')
        #这里又存入了一个flash,但是取出的时候有所不同
        flash('李健是dsb',category="py11")
        return "ssdsdsdfsd"
        # return redirect('/error')
    
    @app.route('/error1')
    def error1():
        return "ok"
    
    @app.route('/error')
    def error():
        """
        展示错误信息
        :return:
        如果get_flashed_messages(with_category=True)
        """
        #这里第一个参数是设置返回结果是元组,或者列表套元组,True就是列表套元组,第二个参数就是取前面设置flash的时候设置了category的内容。
        data = get_flashed_messages(with_categories=True,
                                    category_filter=('py11',))
        data2 = get_flashed_messages()
        print(data)
        print(data2)
        return  "ojbk"
    
    @app.route('/error2')
    def error2():
        data = get_flashed_messages()
    
        print("error2",data)
    
    
        return "ok1"
    
    if __name__ == '__main__':
        app.run()
    
    
    
    

    请求扩展

    请求扩展:利用before_request装饰器,可以实现在请求开始之前执行多个函数,执行顺序是谁在前面就先执行谁,如果前面的before_request有返回值,后面的都不会执行了。(但是before_first_request,不会影响)

    @app.before_first_request
    def sb1():
        # print(request)
        print("我是请求1前的")
        #并不会让后面的before_request都不执行了。
        return '我是请求1之前的返回'
    
    @app.before_request
    def sb2():
        print('我是请求之前2')
        #如果return了,后面的before_request都不会执行了
        # return '我是请求之前2的返回'
    
    @app.before_request
    def sb3():
        print('我是请求之前3')
        # return '我是请求之前3的返回'
    
    
    @app.after_request
    def process_response1(response):
        print('process_response1 走了')
        return response
    
    @app.after_request
    def process_response2(response):
        print('process_response2 走了')
        return response
    
    
    @app.before_first_request
    def first():
       print("我的第一次")
    
    
    '''
    可以在请求之后添加多个after_request
    
    执行顺序是谁在前面谁后执行
    before_request对我的after_request没有影响,有没有返回值都会执行
    
    
    
    
    '''
    @app.after_request
    def process_response1(response):
        print('process_response1 走了')
        return response
    
    @app.after_request
    def process_response2(response):
        print('process_response2 走了')
        return response
    
    
    @app.before_first_request
    def first():
       print("我的第一次")
    
    

    teardown_request

    '''
    无论有没有异常都会执行,有异常会把异常传递进来
    
    '''
    
    @app.teardown_request
    def ter(e):
        print(e)
        print("我是异常")
    
    
    
    

    errorhandler

    '''
    @app.errorhandler(要捕获的错误码)
    '''
    @app.errorhandler(500)
    def error_404(arg):
        print(arg)
        return "500错误了"
    

    template_global

    如果想要给前端传一个函数,按照我们传统的方法就是通过

    return redirect_template('index.html',sb=sb),如果很多页面都要用,就会很麻烦,所以就有了这个,不用传,直接在前端就可以使用。

    @app.template_global()
    def sb(a1, a2):
        return a1 + a2
    

    index.html

    {{sb(1,2)}}
    

    template_filter

    #过滤器,比django的强大,强大在可以传多个参数
    @app.template_filter()
    def db(a1, a2, a3):
        return a1 + a2 + a3
    

    index.html

    //12就是要过滤的对象,会变成第一个参数传进去,后面两个也是参数。
    {{12|db(1,1)}}
    

    偏函数

    什么是偏函数,就是可以暂时存档。他需要四个参数,你可以先给他传两个,下次再给他传两个。不会报错。

    from functools import partial
    def test(a,b,c,d):
        return a+b+c+d
    
    tes=partial(test,a=1,b=2)
    
    print(tes(c=3,d=4))
    #如果传多了就会报错了。
    

    注意:偏函数的传参方式严格按照传参规则来

  • 相关阅读:
    讨论一下,乌云漏洞库的学习方法
    a
    asss
    密码重置
    SQL注入2
    起名字真难
    Header
    SQL注入1
    伪装者
    ofbiz 代码日记
  • 原文地址:https://www.cnblogs.com/chanyuli/p/12051865.html
Copyright © 2011-2022 走看看