• 06.flask博客项目实战一之项目框架搭建


    配套视频教程

    本文B站配套视频教程

    1、创建一个目录,名为:microblog;
    2、创建虚拟环境

    C:UsersAdministrator>d:
    
    D:>cd D:microblog
    
    D:microblog>python -m venv venv
    
    D:microblog>
    
    

    3、激活虚拟环境:activate

    D:microblog>cd D:microblogvenvScripts
    
    D:microblogvenvScripts>activate
    (venv) D:microblogvenvScripts>
    
    

    注:退出虚拟环境 deactivate

    4、安装Flask:pip install flask
    安装指定版本的第三方库可用命令:pip install flask==版本号

    (venv) D:microblogvenvScripts>pip install flask
    Collecting flask
      Using cached https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl
    Collecting Werkzeug>=0.14 (from flask)
      Using cached https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl
    Collecting itsdangerous>=0.24 (from flask)
      Using cached https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz
    Collecting Jinja2>=2.10 (from flask)
      Using cached https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl
    Collecting click>=5.1 (from flask)
      Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
    Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
      Using cached https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz
    Installing collected packages: Werkzeug, itsdangerous, MarkupSafe, Jinja2, click, flask
      Running setup.py install for itsdangerous ... done
      Running setup.py install for MarkupSafe ... done
    Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-1.0.2 itsdangerous-0.24
    
    

    可看到会附带安装好:Werkzeug, itsdangerous, MarkupSafe, Jinja2, click。
    并可在目录D:microblogvenvLibsite-packages下查看到。
    上述重要库对应版本:

    库名 版本号 简要说明
    flask 1.0.2 内核
    werkzeug 0.14.1 核心1,路由模块
    jinja2 2.10 核心2,模板引擎
    itsdangerous 0.24 (加密数据)签名模块
    MarkupSafe 0.23 为Python实现XML / HTML / XHTML 标记安全字符串
    click 5.1 命令行工具库

    以上的库均由Armin Ronacher及其Flask团队pallets开发编写。

    5、创建一个“Hello,World!” Flask应用程序

    0)、该应用程序将存在于一个包(app)中。在Python中,包含init.py文件的子目录被视为包,其可被导入。当导入一个包时,init.py将会执行并定义“暴露”给外部的标识(告诉你们,我是一个包 package)。

    在D:microblog下创建一个目录,名为app。并写一个init.py文件,表明app是一个包 package。

    init.py,它将创建Flask应用程序实例,代码如下:

    from flask import Flask#从flask包中导入Flask类
    
    app = Flask(__name__)#将Flask类的实例 赋值给名为 app 的变量。这个实例成为app包的成员。
    
    #print('等会谁(哪个包或模块)在使用我:',__name__)
    
    from app import routes#从app包中导入模块routes
    
    #注:上面两个app是完全不同的东西。两者都是纯粹约定俗成的命名,可重命名其他内容。
    
    

    上述脚本只是创建了一个作为Flask类的实例的应用程序对象,Flask类是从flask包中导入的。传递给Flask类的变量name是一个Python预定义的变量,该变量设置为使用它的模块的名字。可加入一句打印用于理解,如上(不用时注释掉或删除该行代码)。当应用程序运行时,可看到打印的是包 app
    当需要加载如模板文件等相关资源时,Flask将使用此处传递的模块的位置作为起点。
    传递的变量name总是以正确的方式配置给Flask。
    接着,从包 app中导入模块routes,目前尚未编写它。

    还注意到:routes模块是在脚本底部导入,而不是顶部,因为它始终是完成的。底部导入是避免循环导入(circular import)问题的解决方法。在接下来的routes模块中,需要导入这个脚本(init.py)中的变量app,因此将其放置在底部导入,以避免由这俩个文件之间的相互引用引起的error。

    1)、routes模块

    路由,是处理URL 和函数 之间关系的程序。使用route()装饰器来把函数绑定到URL。
    在Flask中,应用程序 路由的处理程序被编写为Python函数,称为 视图函数,例此模块中的index()。 视图函数映射到一个或多个路由URL,以便Flask知道客户端请求给定URL时要执行的逻辑(Python代码)。

    image.png

    app/routes.py代码:

    from app import app#从app包中导入 app这个实例
    
    #2个路由
    @app.route('/')
    @app.route('/index')
    #1个视图函数
    def index():
    	return "Hello,World!"#返回一个字符串
    
    

    @app.route装饰器 为作为一个参数给定的URL和函数之间创建关联。代码中有两个装饰器,它们共同将URL / 和 /index 关联至index()函数。这意味着当浏览器这俩个URL中任一个时,Flask将调用此函数(index())并将其返回值(字符串)作为响应 Response传递回浏览器。

    2)、为完成这个简单的应用程序,还需在顶层 top-level定义一个Flask应用程序实例 的Python脚本,命名为microblog.py,并仅有一行代码,即导入应用程序实例。代码如下:

    from app import app#从app包中导入变量app(它是作为app包成员的变量)
    
    

    目前为止,项目结构图:

    microblog/
      venv/
      app/
        __init__.py
        routes.py
      microblog.py
    
    

    3)运行程序。
    运行之前,设置FLASK_APP环境变量,它会告诉Flask如何导入刚写的应用程序。

    (venv) D:microblogvenvScripts>cd D:microblog
    
    (venv) D:microblog>set FLASK_APP=microblog.py
    
    

    使用命令 flask run运行程序:

    (venv) D:microblog>flask run
     * Serving Flask app "microblog.py"
     * Environment: production
       WARNING: Do not use the development server in a production environment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [02/Aug/2018 16:36:28] "GET / HTTP/1.1" 200 -
    127.0.0.1 - - [02/Aug/2018 16:36:29] "GET /favicon.ico HTTP/1.1" 404 -
    127.0.0.1 - - [02/Aug/2018 16:36:41] "GET /index HTTP/1.1" 200 -
    
    

    服务器初始化后,它将等待客户端链接。flask run命令指示服务器在IP地址127.0.0.1上运行,也即 localhost。
    网络服务器侦听特定端口号上的连接。部署在生产Web服务器上的应用程序通常侦听端口443(若未实施加密,可能是侦听80),但访问这些端口需要管理权限。上述应用程序是开发环境中运行,Flask将使用免费提供的端口5000。浏览器地址栏输入如下URL并回车:

    http://localhost:5000/
    
    

    或使用其他URL:

    http://localhost:5000/index
    
    

    注:环境变量不会在终端中被记住,比如打开新的终端窗口时,得重新设置它。不过,Flask允许注册 在运行flask 命令时要自动导入的环境变量。要使用这个选项,得安装python-dotenv包:

    (venv) D:microblog>pip install python-dotenv
    
    

    然后,在项目的顶级目录中创建一个.env文件(如microblog/microblog.env),文件中编写环境变量名称、值:

    FLASK_APP=microblog.py
    
    

    python-dotenv文档

    参考
    https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

  • 相关阅读:
    jquery中的Ajax
    javascript 中状态改变触发事件
    关于sql 资源竞争死锁现象
    Attribute 特性
    JavaScript的垃圾回收
    委托和事件
    彻底弄懂AngularJS中的transclusion
    理解AngularJS中的依赖注入
    用postal.js在AngularJS中实现订阅发布消息
    AngularJS 1.3中的一次性数据绑定(one-time bindings)
  • 原文地址:https://www.cnblogs.com/songboriceboy/p/13851912.html
Copyright © 2020-2023  润新知