跳转至

1.0 Quick Start

Theory

  • Client-Side = Restaurant
  • Server = Kitchen
  • Database = Larder

网站就像一家餐厅,服务员和厨师从数据库中拿取数据进行加工渲染重新组合成新的 HTML CSS 和 JS 文件呈现给用户

  • Framework 和 Library 最大的区别就是你必须按照框架的规则进行编程

Basics

Flask Import
1
2
3
4
5
from flask import Flask

app = Flask(__name__)

print(__name__) # (1)!
  1. 🙋‍♂️

Flask 当中的 __name__ 用于确定应用当前位置,这里如果直接打印 __name__ 会显示 __main__

__main__ is the name of the scope in which top-level code executes. A module's __name__ is set equal to __main__ when read from standard input, a script, or from an interactive prompt.

if __name__ = "__main__":
    main()

只有当它作为一个脚本运行时才会执行

路由

客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask 应用实例。应用实例需要知道对每个 URL 的请求要运行哪些代码,所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。

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

@app.route('/user/<name>')
def user(name):
    return 'Hello, {}!'.format(name)

尖括号里的内容就是动态部分,Flask 会将动态部分作为参数传入函数:

路由 /user/<int:id> 只会匹配动态片段,路由中支持 string, float 和 path 类型

Python Decorators

# Functions can be nested in other functions

def outer_function():
    print("I'm outer")

    def nested_function():
        print("I'm inner")

    nested_function()  
outer_function()

# Functions can be returned from other functions

def outer_function():
    print("I'm outer")

    def nested_function():
        print("I'm inner")
    return nested_function

inner_function = outer_function()
inner_function()

启动方法

指令行启动:

set FLASK_APP=hello.py
flask run

单元测试调试:

set FLASK_APP=hello.py
set FLASK_DEBUG=1
flask run

或在代码内部直接定义调试

if __name__ == '__main__':
    app.run(debug=True)

重载器和调试器会自动检测代码变动在 Web 端抛出异常

flask run 的详细拓展参数直接输入 flask --help 直接查看即可