侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

在 Flask 中集成 Vue

前端  /  管理员 发布于 6年前   416

本教程回答了这么一个问题, "我怎么把 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-tutorialapi_name [Api]: apiversion [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 osclass 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 = Trueclass TestConfig(Config):    SQLALCHEMY_DATABASE_URI = 'sqlite://'    TESTING = True    DEBUG = Trueclass ProdConfig(Config):    DEBUG = Falseconfig = {    '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# ORyarn global add @vue/cli

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

vue --version

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

vue create web

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

yarn serve# ORnpm 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# ORnpm run build

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

from flask import Blueprint, render_template, abortfrom jinja2 import TemplateNotFoundsample_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.flaskfrom .views import sample_pageapp.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的详细内容,更多请关注其它相关文章!


  • 上一条:
    Vue 动态加载 Vuex
    下一条:
    vue项目怎么嵌入jsp页面?(方法介绍)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客