# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # "Hello,World" 第一个Flask应用

# 创建microblog目录作为整个项目目录:
#
# `mkdir microblog`
#
# 初始项目结构图：
# ```
# microblog/
#   venv/
#   app/
#     __init__.py
#     routes.py
#   microblog.py
# ```
#
# 创建一个名为app的包来存放整个应用
#
# `mkdir app`
#
# 在app下创建文件__init__.py，输入如下的代码：
#
# ```python
# from flask import Flask
#
# app = Flask(__name__)
#
# from app import routes
# ```
#
# 从flask中导入的类Flask，并以此类创建了一个应用程序对象app。 
#
# 传递给Flask类的`__name__`变量是一个Python预定义的变量，它表示当前调用它的模块的名字。
#
# 当需要加载相关的资源，如模板文件，Flask就使用这个位置作为起点来计算绝对路径。
#
#
# 其一，这里有两个实体名为app。 app包由app目录和`__init__.py`脚本来定义构成，并在from app import routes语句中被引用。
#
# app变量被定义为`__init__.py`脚本中的Flask类的一个实例，以至于它成为app包的属性。
#
# 其二，routes模块是在底部导入的，而不是在脚本的顶部。 
#
# 最下面的导入是解决循环导入的问题，这是Flask应用程序的常见问题。 
#
# 你将会看到routes模块需要导入在这个脚本中定义的app变量，因此将routes的导入放在底部可以避免由于这两个文件之间的相互引用而导致的错误。
#
#
# app/routes.py中的第一个视图函数的代码：
#
# ```python
# from app import app
#
# @app.route('/')
# @app.route('/index')
# def index():
#     return "Hello, World!"
# ```
#
# ＠app.route修饰器在作为参数给出的URL和函数之间创建一个关联。
#
# 要完成应用程序，你需要在定义Flask应用程序实例的顶层（译者注：也就是microblog目录下）创建一个命名为microblog.py的Python脚本。 
# 它仅拥有一个导入应用程序实例的行：
# `from app import app`
#
#  Flask应用程序实例被称为app，是app包的成员。from app import app语句从app包导入其成员app变量。 如果你觉得这很混乱，你可以重命名包或者变量。
#  
#  在运行之前，需要通过设置FLASK_APP环境变量告诉Flask如何导入它：
#  * linux:
#      `(venv) $ export FLASK_APP=microblog.py`
# * windows:     
#     `(venv) $ set FLASK_APP=microblog.py`
#     
#     
# 运行应用
# ```
#  flask run
#  * Serving Flask app "microblog"
#  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
#  ```

StarcoderdataJupyterScriptsDedupFiltered