第二章  flask程序的基本结构

2.1 初始化
    from flask import Flask
    app = Flask(__name__)

2.2 路由和视图函数
    在flask程序中定义路由的最简便方式,是使用程序实例提供的app.route修饰器,把修饰的函数注册称为路由;
    处理函数和URL和关系的程序称路由 

    @app.route('/')    # 表示这个网址默认访问这个函数
    def hello_world():
        return 'Hello World!'
    
    像hello_world()的这样的函数称为视图函数,
    视图函数的响应可以是包含HTML的简单字符串,也可以是复杂的表单(表单在网页中主要负责数据采集功能,有表单标签,表单域,表单按钮)


2.3 启动服务器
    if __name__ == '__main__':
        app.run(debug = true)    # debug 调试模式

2.4 一个完整的程序
    from flask import Flask
    app = Flask(__name__)

    @app.route('/')
    def hello_world():
        return 'Hello World!'

    @app.route('/user/<name>')    #动态路由
    def user(name):
        return 'hello, %s!' % name
    
    if __name__ == '__main__':
        app.run()


2.5 请求响应

    2.5.1 程序和请求上下文

        current_app: 程序上下文:当前激活程序的程序实例
        g      : 程序上下文: 处理请求时用作临时存储的对象,每次请求都会重设这个变量
        request  : 请求上下文:  封装了客户端发来的HTTP请求中的内容
        session       : 请求上下文:  用户会话,用于存储请求之间需要“记住”的值的词典
        
        
        app_ctx = current_app.name
        app_ctx.push()
        current_app.name
        app_ctx.pop()
        

    2.5.2 请求调度
        程序收到客户端的请求时,要找到处理该请求的视图函数。
        print(app.url_map)
        输出映射的关系


    2.5.3 请求钩子
        有时在处理请求之前或之后执行代码会很有用。
        before_first_request: 注册一个函数, 在处理一个请求之前运行
        before_request: 注册一个函数, 在处理第次请求之前运行
        after_request: 注册一个函数, 如果没有未处理的异常抛出, 在每次请求之后运行
        teardown_request: 注册一个函数, 即使有未处理的异常抛出,也在每次请求之后运行

    2.5.4 响应
        a, 返回的第二个参数可以是状态码
            return "abc", 200
        b,重定向 (状态码302)
            return redirect("http://www.baidu.com");
        c,abort  中断处理
            @app.route('/user/<id>')    #动态路由
            def get_user(id):
                user = True
                if not user:
                    abort(404)
                return '<h1> hello, %s </h1>' % id
            abort不会把控制权交给调用它的函数,而是抛出异常把控制权交给服务器
    
2.6 Flask扩展
    flask被设计为扩展形式,故没有提供一些重要的功能,例如数据库和用户认证;

    使用Flask_script支持命令行选项
        
    from flask_script import Manager
    app = Flask(__name__)
    manager = Manager(app)
    
    
        
        


 

发布了86 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/julicliy/article/details/104117034