在 Flask 中集成 Vue


本文摘自php中文网,作者Guanhui,侵删。

本教程回答了这么一个问题, "我怎么把 Vue.js 集成到 Flask中?" 因为你正在阅读本教程,因此我假设您知道 Flask 是一个为快速 Web 开发而构建的 Python 微框架。如果您不熟悉 Flask,或者您认为我可能要说保温瓶,那么我建议在继续本教程之前,您先阅读一下这里。

Vue.js 是用于构建用户界面的渐进式框架。如果您不熟悉它,可以在这里上阅读有关内容。

现在您已经熟悉了 Flask 和 Vue.js,我们可以开始了。

Flask设置

让我们先安装几个依赖:

1

pip install --user cookiecutter

Cookiecutter 是一个很棒的命令行工具,用来快速引导项目模板。 我们正在使用 cookiecutter,所以我们不需要花费太多时间来配置项目。 请记住, Flask 并不像 Django 一样包含电池, 因此必须在项目的初始设置中投入大量工作。

现在您已经安装了Cookiecutter, 我们需要抓取一个项目模板。 对于这个教程, 我们只需要一个简单的 Flask API。运行以下命令:

1

cookiecutter gh:mobidevke/cookiecutter-flask-api-starter

您应该得到以下输出:

1

2

3

repo_name [api-starter]: flask-vuejs-tutorial

api_name [Api]: api

version [1.0.0]: 1.0.0

应该创建一个名为 flask-vuejs-tutorial 的文件夹。 导航到该文件夹,您应该看到以下结构:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

├── app

│   ├── config.py

│   ├── factory.py

│   ├── __init__.py

│   ├── models

│   │   ├── base.py

│   │   ├── database.py

│   │   ├── datastore.py

│   │   └── __init__.py

│   ├── resources

│   │   ├── example.py

│   │   └── __init__.py

│   └── utils.py

├── pytest.ini

├── README.md

├── requirements.txt

├── settings.py

├── tests

│   ├── conftest.py

│   ├── __init__.py

│   ├── test_app.py

│   ├── test_models.py

│   ├── test_resources.py

│   └── utils.py

├── unit-tests.sh

└── wsgi.py

很美丽,不是吗 ?

在继续之前,我们需要设置一个虚拟环境。执行:

1

python -m venv venv

现在,您可以使用喜欢的IDE /文本编辑器打开项目文件夹。在继续下一步之前,请记住激活虚拟环境。
现在我们可以安装依赖项。执行:

1

pip install -r requirements.txt

完成后,打开 app/config.py。您会注意到,此API模板使用了postgres数据库连接。 如果您不介意,可以使用必要的凭据设置postgres db。否则,请使用以下代码行代替该文件夹的内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

import os

 

class Config:

    ERROR_404_HELP = False

 

    SECRET_KEY = os.getenv('APP_SECRET', 'secret key')

 

    SQLALCHEMY_DATABASE_URI = 'sqlite:///tutorial.db'

    SQLALCHEMY_TRACK_MODIFICATIONS = False

 

    DOC_USERNAME = 'api'

    DOC_PASSWORD = 'password'

 

class DevConfig(Config):

    DEBUG = True

 

class TestConfig(Config):

    SQLALCHEMY_DATABASE_URI = 'sqlite://'

    TESTING = True

    DEBUG = True

 

class ProdConfig(Config):

    DEBUG = False

 

config = {

    'development': DevConfig,

    'testing': TestConfig,

    'production': ProdConfig

}

我们已经删除了所有的 postgres 配置,以支持 sqlite 的配置。如果您要使用 postgres,请保持 conf.py 文件不变。
现在我们需要导出 Flask 应用程序。执行:

1

export FLASK_APP=wsgi:app

现在我们已经完成了 Flask 的 API 的设置,执行:

1

flask run

然后在浏览器上打开 http://127.0.0.1:5000/example。您应该能看到以下内容:

1

{"message": "Success"}

Vue.js设置

现在我们的 API 已经准备就绪,我们可以继续引导vue应用程序了。
我们需要做的第一件事是安装 vue cli。执行:

1

2

3

npm install -g @vue/cli

# OR

yarn global add @vue/cli

一旦安装完成后, 您可以使用以下命令检查版本是否正确(3.x):

1

vue --version

在项目文件夹的根目录中运行:

1

vue create web

我选择 default (babel, eslint) 作为预设,并选择 yarn 作为我的包裹管理器。如果您熟悉node项目,则可以继续并选择您的首选选项。如果没有,请遵循本教程的默认设置。
现在导航到新建的 web 文件夹并运行:

1

2

3

yarn serve

# OR

npm run serve

如果导航到http://localhost:8080/, 您应该可看到 Welcome to Your Vue.js App 文本。

现在我们准备开始集成。

在 Web 文件夹中,创建一个名为 vue.config.js 的文件并粘贴以下内容:

1

2

3

4

5

6

7

8

9

10

11

12

const path = require('path');

 

module.exports = {

  assetsDir: '../static',

  baseUrl: '',

  publicPath: undefined,

  outputDir: path.resolve(__dirname, '../app/templates'),

  runtimeCompiler: undefined,

  productionSourceMap: undefined,

  parallel: undefined,

  css: undefined

};

在这里, 为 Vue cl i定义了一些配置。我们只对三个字段感兴趣: assetsDir, baseUrl, outputDir
让我们从 outputDir 开始。
此文件夹保存已构建的 Vue 文件的位置,即将保存将加载 Vue 应用程序的 index.html 的文件夹。如果您观察这提供的路径, 您将会注意到该文件夹位于flask应用程序的 app 模块内部。
assetsDir 保存用于存放静态文件(css, js 等)的文件夹。 注意 它是相对于 outputDir 字段中提供的值的。
最后, baseUrl 字段将在 index.html 中保存静态文件的路径前缀。 您可以检查 这个 以了解有关其他配置选项的更多信息。
现在运行:

1

2

3

yarn build

# OR

npm run build

如果打开 app 文件夹, 您会注意到已经创建了两个新文件夹, 即templatesstatic。 它们包含内置的vue文件。
现在在app 文件夹中创建一个 views.py 文件并粘贴以下内容:

1

2

3

4

5

6

7

8

9

10

11

from flask import Blueprint, render_template, abort

from jinja2 import TemplateNotFound

 

sample_page = Blueprint('sample_page', 'sample_page', template_folder='templates')

 

@sample_page.route('/sample')

def get_sample():

    try:

        return render_template('index.html')

    except TemplateNotFound:

        abort(404)

现在,这是怎么回事呢?
好吧,现在我们创建一个名为 sample_page 的 Flask 蓝图(blueprint),并添加路由。这条路由将渲染我们的 Vue 应用。

打开 __init__.py 文件并在 app = f.flask 下添加以下几行:

1

2

3

4

5

.....

app = f.flask

from .views import sample_page

 

app.register_blueprint(sample_page, url_prefix='/views')

在这里, 我们正在注册之前创建的蓝图(blueprint)。
我们为蓝图(blueprint)指定了url前缀,以便于可以从 /views/sample访问我们的vue应用程序。

真相时刻到啦。

打开 http://127.0.0.1:5000/views/sample, 您应该能看到以下内容:

Image

如果您检查日志, 将看到正确加载了内置资源:

1

2

3

4

5

6

7

8

9

10

11

12

* Serving Flask app "wsgi:app"

 * 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 - - [24/May/2019 20:45:02] "GET /views/sample HTTP/1.1" 200 -

127.0.0.1 - - [24/May/2019 20:45:02] "GET /static/css/app.e2713bb0.css HTTP/1.1" 200 -

127.0.0.1 - - [24/May/2019 20:45:02] "GET /static/js/chunk-vendors.b10d6c99.js HTTP/1.1" 200 -

127.0.0.1 - - [24/May/2019 20:45:02] "GET /static/js/app.c249faaa.js HTTP/1.1" 200 -

127.0.0.1 - - [24/May/2019 20:45:02] "GET /static/img/logo.82b9c7a5.png HTTP/1.1" 200 -

127.0.0.1 - - [24/May/2019 20:45:02] "GET /views/favicon.ico HTTP/1.1" 404 -

您已经成功将Flask与Vuejs集成

推荐教程:《Python教程》

以上就是在 Flask 中集成 Vue的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

学习Python理由是什么?

Python是开源语言吗

Python简单计算文件md5值的方法示例

windows下Python连接oracle数据库实例方法

Python与c互相调用的详细介绍

Python的注释有哪些

Python源代码被解释器转换后的格式为什么

如何用Python正则表达式匹配字符串?

Python 日志增量抓取实现方法

Python的注释符是什么

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...