在 Flask 中集成 Vue

Guanhui
发布: 2020-06-15 18:09:27
转载
4006 人浏览过

在 Flask 中集成 Vue

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

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

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

Flask设置

让我们先安装几个依赖:

pip install --user cookiecutter
登录后复制

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

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

cookiecutter gh:mobidevke/cookiecutter-flask-api-starter
登录后复制

您应该得到以下输出:

repo_name [api-starter]: flask-vuejs-tutorial api_name [Api]: api version [1.0.0]: 1.0.0
登录后复制

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

├── 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
登录后复制

很美丽,不是吗 ?

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

python -m venv venv
登录后复制

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

pip install -r requirements.txt
登录后复制

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

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 应用程序。执行:

export FLASK_APP=wsgi:app
登录后复制

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

flask run
登录后复制

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

{"message": "Success"}
登录后复制

Vue.js设置

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

npm install -g @vue/cli # OR yarn global add @vue/cli
登录后复制

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

vue --version
登录后复制

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

vue create web
登录后复制

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

yarn serve # OR npm run serve
登录后复制

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

现在我们准备开始集成。

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

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中保存静态文件的路径前缀。 您可以检查 这个 以了解有关其他配置选项的更多信息。
现在运行:

yarn build # OR npm run build
登录后复制

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

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下添加以下几行:

..... 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

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

* 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的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:learnku.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!