Flask学习_Day2_建一个博客(上)

2019.5.25

边学边做创建一个具备基本功能的博客应用

 

今天学习内容:项目布局、应用工厂(Flask())、运行应用(app.run()、pycharm的大坑)、应用过程分析

###############################################################################

 

项目布局:

  初学者需要使用结构化的方法,但flask非常灵活,熟悉后可以跳出这个结构。

  使用包来管理代码,把代码分为不同的模块。

  忽略文件的基本原则是:不是你自己写的文件就可以忽略。假设使用 git 来进行版本控制,那么使用 .gitignore 来设置应当忽略 的文件, .gitignore 文件应当与下面类似:

venv/
*.pyc __pycache__/
instance/
.pytest_cache/ .coverage htmlcov/
dist/ build/ *.egg-info/

###############################################################################

 

应用设置:

  一个Flask 应用是一个Flask 类的实例。所有东西(配置、URL等)会一起注册。

  最简单的创建一个Flask应用是在代码最开始创建一个全局Flask实例。如“hello_flask.py”

  在一个函数内部创建Flask实例代替创建全局实例,这个函数叫“应用工厂”,里面会把所有应用相关的配置、注册和其他设置都在函数内部完成,返回到这个应用。

 

应用工厂:

  flaskr 文件夹内添加 __init__.py 文件。 __init__.py 有两个作用:一是包含应用工厂;二是 告诉 Python flaskr 文件夹应当视作为一个包。

分析:

  1.  app = Flask(__name__,instance_relative_config=True) #创建一个Flask实例

class flask.Flask(import_namestatic_url_path=Nonestatic_folder='static'static_host=Nonehost_matching=Falsesubdomain_matching=Falsetemplate_folder='templates'instance_path=Noneinstance_relative_config=Falseroot_path=None)

  flask对象实现了一个WSGI应用程序并充当中心对象。 它传递了应用程序的模块或包的名称。 一旦创建它,它将充当视图功能,URL规则,模板配置等的中央注册表。

  包的名称用于解析包内或包含模块的文件夹中的资源,具体取决于package参数是否解析为实际的python包(内部带有__init__.py文件的文件夹)或标准模块( 只是一个.py文件)。

  • 第一个参数的想法是让Flask了解属于您的应用程序的内容。 此名称用于查找文件系统上的资源,可以由扩展使用以改进调试信息等等。

    所以你在那里提供的很重要。 如果您使用的是单个模块,则__name__始终是正确的值。 但是,如果您使用的是软件包,通常建议在那里对软件包的名称进行硬编码。(意思就是说,如果是单一的应用,用__name__即可,如果是一个应用程序包,就haedcode一个名字给这个参数,比如:app=Flask("myapp")

   这是为什么? 由于查询了资源,应用程序甚至可以使用__name__。 但是它会使调试更加痛苦。 某些扩展可以根据应用程序的导入名称进行假设。 例如,Flask-SQLAlchemy扩展将查找应用程序中以调试模式触发SQL查询的代码。 如果未正确设置导入名称,则该调试信息将丢失。 (例如,它只会在yourapplication.app中获取SQL查询,而不是yourapplication.views.frontend)

  • __name__ 是当前 Python 模块的名称。应用需要知道在哪里设置路径, 使用 __name__ 是一个方便的方法。
  • instance_relative_config –如果设置为True,则假定加载配置的相对文件名相对于实例路径而不是应用程序根目录。

   instance_relative_config=True 告诉应用配置文件是相对于 instance folder 的相对路径。实例文件夹在 flaskr 包的外面,用于存放本地数据(例如配置密钥和数据库),不应当提交到版本控制系统。

 

  2.@app.route() 创建一个简单的路由。它创建了 URL /hello 和一个函数之间 的关联。这个函数会返回一个响应,即一个 'Hello, World!' 字符串。

 
  3.调用run()方法,运行flask web应用程序。
 
###############################################################################
 
运行应用:

  现在可以通过使用 flask 命令来运行应用。在终端中告诉 Flask 你的应用在哪里, 然后在开发模式下运行应用。

  开发模式下,当页面出错的时候会显示一个可以互动的调试器;当你修改代码保存的 时候会重启服务器。

 在 Linux and Mac 下:

export FLASK_APP=flaskr
export FLASK_ENV=development
flask run

 

 效果:(不加/hello会404,URL是 http://127.0.0.1:5000/

 

 

  为什么是:http://127.0.0.1:5000/   

  因为:flask默认开启的ip地址是:http://127.0.0.1:5000/

  可以改此时需要修改如下:

    

  但是pycharm这里很坑!!!!!!而且flask工程只能用专业版才能建立,这搞死人了,不是flask工程的py文件是没有additional options这一栏的

https://blog.csdn.net/weixin_42359693/article/details/80775511

   这个问题弄了我两个小时,原地爆炸了都,下了个专业版试用,然后从configuration里改host和port:

 ##############################################################################

补充一个重要知识:一个Flask应用运行过程剖析https://segmentfault.com/a/1190000009152550):

使用Flask框架开发的属于Web应用。由于Python使用WSGI网关,所以这个应用也可以叫WSGI应用,因此要遵循WSGI的规范。

  1.实例化一个Flask应用。其中会用到werkzeug库(Request类和Response类 做请求和响应;Map类和Rule类做URL模式的处理)

  这里是app,对于如何添加URL模式,Flask采取装饰器的方法,将URL规则和视图函数结合在一起写,其中主要的函数是route

 

  2.调用app.run() 运行应用:

   会调用werkzeug.serving模块中的run_simple方法。这个方法会创建一个本地的测试服务器,并且在这个服务器中运行Flask应用。

  wsgi_app是真正被调用的WSGI应用,之所以这样设计,就是为了在应用正式处理请求之前,wsgi_app可以被一些“中间件”装饰,以便先行处理一些操作。

 

posted @ 2019-05-25 16:55  Marvin_Tang  阅读(208)  评论(0编辑  收藏  举报