Flask入门

作者: 以我丶之姓 | 来源:发表于2018-05-22 22:31 被阅读0次

    WEB工作原理

    1.C/S和B/S架构
    2.B/S架构工作原理
    客户端(浏览器)《=》WEB服务器(Apache,nginx)《=》WSGI《=》Python(Flask)

    一、Flask框架

    1.简介
    Flask是一个非常小的python web框架,被称为微型框架,只提供了一个强健的核心。其他的功能都是通过拓展来实现的(所以会使用很多的扩展模块)。
    2.组成
    1.调试、路由、WSGI
    2.模板引擎
    3.安装
    pip install flask
    4.路由配置

    @app.route('/')
    def index():
    #视图函数
    pass
    

    5.完整代码

    # coding=utf-8
    #导入flask
    from flask import Flask
    #创建flask实例
    app = Flask(__name__)
    
    #配置路由
    @app.route('/')
    def index():
        return '我是首页'
    
    if __name__ == '__main__':
        app.run()
    

    调试 127.0.0.1:5000

    6.启动参数

    参数 说明
    debug 是否开启调试模式 True\False 默认为False 如果开启会自动加载代码
    port 指定端口号
    host 指定主机名 设置为0.0.0
    threaded 是否开启多线程,默认False

    app.run(debug=True, threaded=True, port=5050, host='0.0.0.0')

    7.请求与响应

    变量或对象 说明
    current_app 当前运行的应用的实例
    g 处理请求的临时变量 每次请求都会重置
    request 请求对象 保存客户端的所有 HTTP请求的信息
    session 会话控制 用于存储会话信息

    app对象
    全局应用对象
    作用:公共的全局配置,可以加在这个对象上

    #给全局对象 添加一个属性
    app.good = 'goods'
    

    current_app
    在任何的视图中,可以使用current_app访问到全局的app对象
    作用:公共的配置,都写在app对象上,可以在所有的视图中,通过current_app访问到全局对象app

    from flask import current_app
    @app.route('/globalapp/')
    def globalapp():
        return '%s 获取全局good属性值通过current_app'%current_app.good
    

    request
    作用:获取请求报文中的数据
    概述:
    1.浏览器发送到服务器中的所有报文被flask接收后,它会创建出request对象,request对象被用在视图函数中,去获取请求的数据。
    2.request对象由flask创建好以后引入就可以使用
    3.导入
    from flask import request
    request属性:
    1.url 获取完整的请求url
    2.base_url 获取去掉GET参数的url
    3.host_url 获取的只有主机IP和端口号
    4.path 获取路由地址
    5.method 获取请求的方式
    6.remote_addr 获取客户端的ip地址
    7.args 获取get请求的参数

    print(request.args['name'])#获取参数
    print(request.args.get('age'))#通过get方法获取参数
    

    8.form 存储表单的数据
    9.file 用于文件上传
    10.headers 获取请求头信息

    print(request.headers['User-Agent'])
    

    11.cookies 获取cookie
    获取get参数
    url = 'http://127.0.0.1:5000/request/?a=xxx&b=19'

    print(request.args.get('a'))
    print(request.args.get('b'))
    

    获取get参数
    url = 'http://127.0.0.1:5000/request/?a=xxx&a=19'

    print(request.args.get('a'))
    print(request.args.getlist('a'))
    

    二、路由设置

    (1)无参路由

    @app.route('/test/')
    def test():
      return '测试无参路由'
    

    注意:路由的地址,可以和视图函数的名称不一致

    (2)有参路由

    @app.route('/welcome/<name>')
    def welcome(name):
        print('欢迎%s'%name)
        return '欢迎%s'%name
    

    (3)路由的参数的限定

    @app.route('/welcome2/<int:arg>')
    @app.route('/welcome2/<float:arg>')
    @app.route('/welcome2/<path:arg>')
    @app.route('/welcome2/<string:arg>')#默认
    def welcome2(arg):
        print(arg)
        print(type(arg))
        return '参数类型约定'
    

    注意事项
    1.路由末尾的 / 建议都加上,因为在路由需要 / 的时候,浏览器会帮我们自动加上,也就是说,在输入的时候 / 就可加可不加了。
    2.若需要制定参数,将参数名称写在<>中,视图函数的参数和路由的参数保持一致。
    3.若要限定参数的类型,在<>中写上<int/float/string/path:参数名称>
    4.不指定类型 默认为string类型,如果使用path的话,那么这条 / 不再是路由的分隔符,而是代表路径的返回。

    三、路由的响应(response)

    (1)响应状态码404(但请求是成功的)

    @app.route('/res/')
    def res():
        return 'Page not found',404#改变返回的状态码值,其实请求的成功的。
    

    (2)通过make_response构造响应

    导入:

    from  flask import make_response
    @app.route('/res/')
    def res():
        # response = make_response('Page not fount',404)#弹出响应结果,改变HTTP状态码
        response = make_response('Page not fount')#弹出响应结果
    return response
    

    四、重定向(redirect)

    作用:可以在视图中直接去跳转
    导入:
    from flask import redirect
    实例:

    @app.route('/r_redirect/')
    def r_redirect():
        return redirect('/test/')#参数是路由名称
    return url_for('t')#通过视图函数 反向构造出路由
    return url_for('t', a=1, b=2) #通过视图函数 反向构造处路由和参数,关键字为参数名
    return redirect(url_for('welcome2', arg=1)) #重定向 带参数
    

    五、abort(终止)

    • 如果视图处理中,出现了异常错误,可以使用abort函数立即终止视图函数的执行
    • 如果abort函数被触发,后面的代码或者程序就不再执行,类似于python的raise
    • 通过abort函数,可以向前端(浏览器端)返回一个 http标准中的状态码,表示出错误的信息,如果想浏览器返回一个不存在的http的状态码是没有任何意义的。
      示例:
    @app.route('/')
    def index
    

    相关文章

      网友评论

        本文标题:Flask入门

        本文链接:https://www.haomeiwen.com/subject/cvtkjftx.html