Python flask学习

  • Post author:
  • Post category:python


  • 转换器 < >

    from flask import Flask
    
    app = Flask(__name__)
    @app.route('/index/<float:id>')
    #路由默认是GET请求,即在浏览器上面的路径的请求
    # @app.route('/index/<float:id>',methods = ['GET','POST'])
    def index(id):
        if id == 1.0:
            return 'cg'
        return 'hello world!!!'
    
    if __name__ == '__main__':
        app.run(debug=True)
    '''
    <>提取参数
    
    < int : id > int自带的转换器
    
    string:接受所有不带斜杠的文本
    
    float:接受浮点类型
    
    int:接受整数类型
    
    path:接受带斜杠的文本
    '''
  • 自定义转换器 < : >

    from flask import Flask
    from werkzeug.routing import BaseConverter
    
    app = Flask(__name__)
    
    class RegexConverter(BaseConverter):
        '''自定义转换器类'''
        def __init__(self,url_map,regex):
            super(RegexConverter, self).__init__(url_map)
            self.regex = regex
        def to_python(self,value):
            print('调用了')
            return value
    '''将自定义的转换器类添加到flask应用中'''
    app.url_map.converters['re'] = RegexConverter
    
    @app.route('/index/<re("[1,9]"):value>')
    def index(value):
        print(value)
        return 'hello world!!!'
    
    if __name__ == '__main__':
        app.run(debug=True)
    '''
    自定义转换器,re正则表达式,规定路由的url路径
    '''
  • 自定义请求(请求异常)

    from flask import Flask, render_template, request, abort
    
    app = Flask(__name__)
    
    @app.route('/index', methods=['GET', 'POST'])
    def index():
        if request.method == 'GET':
            return render_template('index.html')
        elif request.method == 'POST':
            name = request.form.get('zh')
            password = request.form.get('pwd')
            print(name, password, sep='\n')
            if name=='123' and password=='123':
                return 'POST请求'
            else:
                abort(404)  # abort函数是在网页中抛出异常
                # print('服务器渲染,路径无错误')
                # return render_template('index.html')
    
    # 自定义异常
    @app.errorhandler(404)  #抓取abort抛出的异常
    def handle404(err):
        # return f'你出错了{err}'
        return render_template('404.html')
    
    if __name__ == '__main__':
        app.run(debug=True)
    '''
    首先通过render_template 服务器渲染html文件(注意路径不要写错了),
    再通过request模块请求服务器找请求方式
    判断是否是post请求,在表单中的method规定了请求方式
    request.form.get('name')获取表单中的传入值
    '''
    # Html
    '''
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        <form action="" method="post">
            账号:<input type="text" name="zh"><br>
            密码:<input type="password" name="pwd"><br>
            <input type="submit" name="submit" value="提交">
        </form>
        </body>
        </html>
    '''
  • 重定向(redirect)

    from flask import Flask,redirect,url_for
    
    app = Flask(__name__)
    
    @app.route('/4399',methods=['GET','POST'])
    def index1():
        return redirect('http://www.4399.com/')
    
    @app.route('/url_hello',methods=['GET','POST'])
    def index2():
        print(url_for('hello'))  #返回结果:/hello
        return redirect(url_for('hello')) #默认有一个/
    
    @app.route('/hello')
    def hello():
        return 'hello world'
    
    if __name__ == '__main__':
        app.run(debug=True)
    '''
    技术总结:
    redirect库用来重定向网页,自动跳转
    url_for库可以找到当前根目录下的路由地址
    index1可以自动跳转到4399游戏页面
    index2可以自动跳转到/hello页面
    '''
  • 传入数据到前端页面(jsonify)

    from flask import Flask,make_response,json,jsonify
    
    app = Flask(__name__)
    app.config['JSON_AS_ASCII'] = False  #修改配置文件
    
    @app.route('/index')
    def index():
        data = {
            'name':'王者农药'
        }
        # res = make_response(json.dumps(data,ensure_ascii=False))
        # res.mimetype = 'application/json'
        # return res
        return make_response(jsonify(data))
    if __name__ == '__main__':
        app.run(debug=True)
    '''
    技术总结(返回JSON数据给前端):
    导入make_response,json库是一种方式:
    	首先通过json把python字典类型的数据变成json数据类型,
    	其中的ensure_ascii = False 取消掉ascii编码
    	mimetype转换数据类型为application/json类型
    导入jsonify库:
    	可直接把字典数据变成json,不需要转换格式
    	不过需要app.config['JSON_AS_ASCII'] = False 修改一下配置文件才能看到中文
    '''
  • 服务器渲染(render_template)

    from flask import Flask,render_template
    
    app = Flask(__name__)
    
    @app.route('/index', methods=['GET', 'POST'])
    def index():
        data = {
            'name':'laozhu',
            'age': 18,
            'my_list':[1,2,3,4,5,6,7]
        }
        return render_template('index2.html',data=data)
    
    def update_list(li):
    	return li[::2]
    app.add_template_filter(update_list,'li2') #添加自定义过滤器方法 第一参数是自定义方法 第二参数是c
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    '''
    # index2.html
    <p>hello world</p>
    <p>{{data}}</p>
    <p>{{data['name']}}</p>
    <p>{{data.name}}</p>
    <p>{{data['age']}}</p>
    <p>{{data['my_list']}}</p>
    <p>{{'hello'|upper}}</p>   //过滤器 |后面的方法对前面的字符串进行操作
    <p>{{data['my_list'] | li2 }}</p>	//自定义过滤器
    '''
  • 蓝图(Blueprint)

    from flask import Flask,Blueprint
    
    app = Flask(__name__)
    #1、创建蓝图对象
    bp = Blueprint('bp',__name__,url_prefix='users')
    	# Blueprint第一参数是蓝图名字,第二参数自身py文件,第三参数是添加url路由前缀
    #2、定义蓝图路由
    @bp.route('/user')
    def users():
        return 'user'
    #3、注册蓝图对象
    app.register_blueprint(bp)
    
    @app.route('/index', methods=['GET', 'POST'])
    def index():
        return 'hello'
    
    if __name__ == '__main__':
        app.run(debug=True)
    #蓝图 Blueprint flask自带的模块
    查看路由的方法:终端输入  flask routes
  • 返回

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        return 'string',404,{'Server':'python','Date':'2022-04-24'} 
        # return ('string',404,{'Server':'python','Date':'2022-04-24'})
    	'''返回元组信息:flask中返回的数据都是存入元组中,(字符串,状态码,响应头)'''
    if __name__ == '__main__':
        app.run(debug=True)
  • Request 和 make_response 设置获取cookie

    from flask import Flask,make_response,request
    
    app = Flask(__name__)
    
    # 设置cookie
    @app.route('/set', methods=['GET', 'POST'])
    def index():
        res = make_response('这是响应体!')
        res.set_cookie('tysay','ayang',max_age=60)  # max_age设置cookie的有效期为60 秒
        return res
    
    # 获取cookie
    @app.route('/get', methods=['GET', 'POST'])
    def get_cookie():
        res = request.cookies.get('tysay')
        print(res)
        return res
    
    if __name__ == '__main__':
        app.run(debug=True)
  • session

    from flask import Flask,session
    
    app = Flask(__name__)
    
    app.config['SECRET_KEY'] = '2022'   #需要设置密钥才可以设置session信息
    # 设置session
    @app.route('/set', methods=['GET', 'POST'])
    def index():
        session['tysay'] = 'ayang'    #值得注意的是session数据存储在cookie中的
        return 'hello world'
    
    # 获取session
    @app.route('/get', methods=['GET', 'POST'])
    def get_cookie():
        res = session.get('tysay')
        print(res)
        return res
    
    if __name__ == '__main__':
        app.run(debug=True)
  • g对象

    from flask import Flask,g
    
    app = Flask(__name__)
    
    def info():
        yhm = g.user_name
        pwd = g.password
        print(f"用户名:{yhm}密码:{pwd}")
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        g.user_name = 'tysay'
        g.password = '123456'
        info()  #注意:这里并没有传入参数,却也取得到,这就是g对象的作用
        return 'hello world'
    if __name__ == '__main__':
        app.run(debug=True)
    '''
    g对象是flask创建的一个g对象用来存储临时的全局变量
    '''



版权声明:本文为Tysayy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。