使用Vue.js和Flask来构建一个单页的App的示例
本篇文章主要介绍了使用Vue.js和Flask来构建一个单页的App的示例,我觉得挺不错的,现在分享给大家,也给大家做个参考。一起过来看看吧
在这个教程中,我们将讲解如何将vue.js单页应用与Flask后端进行连接。
一般来说,如果你只是想通过Flask模板使用vue.js库也是没有问题的。但是,实际上是一个很明显的问题那就是,Jinja(模板引擎)也和Vue.js一样采用双大括号用于渲染,但只是一个还算过的去的解决方案。
我想要一个不同的例子。如果我需要建立一个单页应用程序(应用程序使用单页组成, vue-router 在HTML5的History-mode以及其他更多好用的功能)用vue.js,由Flask提供Web服务?简单地说应该这样,如下所示:
Flask为 index.html 服务, index.html 包含我的vue.js App。
在前端开发中我使用Webpack,它提供了所有很酷的功能。
Flask有API端,我可以从我的SPA访问。
我可以访问API端,甚至当我为了前端开发而运行Node.js的时候。
听起来是不是很有趣?那让我们这样动手做做吧。
客户端
我将使用Vue CLI产生基本vue.js App。如果你还没有安装它,请运行:
$ npm install -g vue-cli
客户端和后端代码将被拆分到不同的文件夹。初始化前端部分运行跟踪:
$ mkdir flaskvue $ cd flaskvue $ vue init webpack frontend
通过安装向导。我的设置是:
Vue 只在运行时构建。
安装Vue-router。
使用ESLint检查代码。
选择一个ESLint 标准预设 。
不试用Karma + Mocha进行单位测试。
不使用Nightwatch建立端到端的测试。
ok,接着来:
$ cd frontend $ npm install # after installation $ npm run dev
这就可以开始安装 vue.js 应用程序。让我们从添加一些页面开始吧。
添加 home.vue 和 about.vue 到 frontend/src/components 文件夹。它们非常简单,像这样:
// Home.vue <template> <p> <p>Home page</p> </p> </template>
and
// About.vue <template> <p> <p>About</p> </p> </template>
我们将使用它们正确地识别我们当前的位置(根据地址栏)。现在我们需要改变 frontend/src/router/index.js 文件以便使用我们的新组件:
import Vue from 'vue' import Router from 'vue-router' const routerOptions = [ { path: '/', component: 'Home' }, { path: '/about', component: 'About' } ] const routes = routerOptions.map(route => { return { ...route, component: () => import(`@/components/${route.component}.vue`) } }) Vue.use(Router) export default new Router({ routes, mode: 'history' })
如果你试着输入 localhost:8080 和 localhost:8080/about ,你应该看到相应的页面。
我们几乎已经准备好构建一个项目,并且能够创建一个静态资源文件包。在此之前,让我们为它们重新定义一下输出目录。在 frontend/config/index.js 找到下一个设置:
index: path.resolve(__dirname, '../dist/index.html'), assetsRoot: path.resolve(__dirname, '../dist'),
把它们改为
index: path.resolve(__dirname, '../../dist/index.html'), assetsRoot: path.resolve(__dirname, '../../dist'),
所以/dist文件夹的HTML、CSS、JS会在同一级目录/frontend 。现在你可以运行 $ npm run build 创建一个包。
后端
对于Flask服务器,我将使用Python版本3.6。在 /flaskvue 创建新的子文件夹存放后端代码并初始化虚拟环境:
$ mkdir backend $ cd backend $ virtualenv -p python3 venv
为了使虚拟环境中运行(MacOS):
$ source venv/bin/activate
在Windows中需要激活此文档(http://pymote.readthedocs.io/en/latest/install/windows_virtualenv.html)。
在虚拟环境下安装:
(venv) pip install Flask
现在让我们为Flask服务端编写代码。创建根目录文件run.py:
(venv) cd .. (venv) touch run.py
向这个文件添加下一个代码:
from flask import Flask, render_template app = Flask(__name__, static_folder = "./dist/static", template_folder = "./dist") @app.route('/') def index(): return render_template("index.html")
这段代码与Flask的 **“Hello World”**代码略有不同。主要的区别是,我们指定存储静态文件和模板位置在文件夹 /dist ,以便和我们的前端文件夹区别开。在根文件夹中运行Flask服务端:
(venv) FLASK_APP=run.py FLASK_DEBUG=1 flask run
这将启动本地主机上的Web服务器: localhost:5000 上的 FLASK_APP 服务器端的启动文件, flask_debug = 1 将运行在调试模式。如果一切正确,你会看到熟悉的主页,你已经完成了对Vue的设置。
同时,如果您尝试输入/about页面,您将面临一个错误。Flask抛出一个错误,说找不到请求的URL。事实上,因为我们使用了HTML5的History-Mode在Vue-router需要配置Web服务器的重定向,将所有路径指向index.html。用Flask做起来很容易。将现有路由修改为以下:
@app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def catch_all(path): return render_template("index.html")
现在输入网址localhost:5000/about 将重新定向到index.html和vue-router将处理路由。
添加404页
因为我们有一个包罗万象的路径,我们的Web服务器在现在已经很难赶上404错误,Flask将所有请求指向index.html(甚至不存在的页面)。所以我们需要处理未知的路径在vue.js应用。当然,所有的工作都可以在我们的路由文件中完成。
在frontend/src/router/index.js添加下一行:
const routerOptions = [ { path: '/', component: 'Home' }, { path: '/about', component: 'About' }, { path: '*', component: 'NotFound' } ]
这里的路径'*'是一个通配符, Vue-router 就知道除了我们上面定义的所有其他任何路径。现在我们需要更多的创造 NotFound.vue 文件在**/components**目录。试一下很简单:
// NotFound.vue <template> <p> <p>404 - Not Found</p> </p> </template>
现在运行的前端服务器再次 npm run dev ,尝试进入一些毫无意义的地址例如: localhost:8080/gljhewrgoh 。您应该看到我们的“未找到”消息。
添加API端
我们的 vue.js/flask 教程的最后一个例子将是服务器端API创建和调度客户端。我们将创建一个简单的Api,它将从1到100返回一个随机数。
打开run.py并添加:
from flask import Flask, render_template, jsonify from random import * app = Flask(__name__, static_folder = "./dist/static", template_folder = "./dist") @app.route('/api/random') def random_number(): response = { 'randomNumber': randint(1, 100) } return jsonify(response) @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def catch_all(path): return render_template("index.html")
首先我导入random库和jsonify函数从Flask库中。然后我添加了新的路由 /api/random 来返回像这样的JSON:
{ "randomNumber": 36 }
你可以通过本地浏览测试这个路径: localhost:5000/api/random。
此时服务器端工作已经完成。是时候在客户端显示了。我们来改变home.vue组件显示随机数:
<template> <p> <p>Home page</p> <p>Random number from backend: {{ randomNumber }}</p> <button @click="getRandom">New random number</button> </p> </template> <script> export default { data () { return { randomNumber: 0 } }, methods: { getRandomInt (min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min }, getRandom () { this.randomNumber = this.getRandomInt(1, 100) } }, created () { this.getRandom() } } </script>
在这个阶段,我们只是模仿客户端的随机数生成过程。所以,这个组件就是这样工作的:
在初始化变量 randomNumber 等于0。
在methods部分我们通过 getRandomInt(min, max) 功能来从指定的范围内返回一个随机数, getrandom 函数将生成随机数并将赋值给 randomNumber
组件方法 getrandom 创建后将会被调用来初始化随机数
在按钮的单击事件我们将用 getrandom 方法得到新的随机数
现在在主页上,你应该看到前端显示我们产生的随机数。让我们把它连接到后端。
为此目的,我将用 axios 库。它允许我们用响应HTTP请求并用 Json 返回 JavaScript Promise 。我们安装下它:
(venv) cd frontend (venv) npm install --save axios
打开 home.vue 再在 部分添加一些变化:
import axios from 'axios' methods: { getRandom () { // this.randomNumber = this.getRandomInt(1, 100) this.randomNumber = this.getRandomFromBackend() }, getRandomFromBackend () { const path = `http://localhost:5000/api/random` axios.get(path) .then(response => { this.randomNumber = response.data.randomNumber }) .catch(error => { console.log(error) }) } }
在顶部,我们需要引用Axios库。然后有一个新的方法 getrandomfrombackend 将使用Axios异步调用API和检索结果。最后, getrandom 方法现在应该使用 getrandomfrombackend 函数得到一个随机值。
保存文件,到浏览器,运行一个开发服务器再次刷新 localhost:8080 。你应该看到控制台错误没有随机值。但别担心,一切都正常。我们得到了 CORS 的错误意味着Flask服务器API默认会关闭其他Web服务器(在我们这里,vue.js App是在 Node.js服务器上运行的应用程序)。如果你 npm run build 项目,那在 localhost:5000 (如Flask服务器)你会看到App在工作的。但是,每次对客户端应用程序进行一些更改时,都创建一个包并不十分方便。
让我们用打包了CORS插件的Flask,将使我们能够创建一个API访问规则。插件叫做FlaskCORS,让我们安装它:
(venv) pip install -U flask-cors
你可以阅读文档,更好的解释你要使你的服务器怎么样使用CORS。我将使用特定的方法,并将**{“origins”: “*”}**应用于所有/api/*路由(这样每个人都可以使用我的API端)。在run.py加上:
from flask_cors import CORS app = Flask(__name__, static_folder = "./dist/static", template_folder = "./dist") cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
有了这种改变,您就可以从前端调用服务端。
更新:
事实上,如果你想通过Flask提供静态文件不需要CORS。感谢Carson Gee的下面的这一招。
这个主意是这样的。如果应用程序在调试模式下,它只会代理我们的前端服务器。否则(在生产中)只为静态文件服务。所以我们这样做:
import requests @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def catch_all(path): if app.debug: return requests.get('http://localhost:8080/{}'.format(path)).text return render_template("index.html")
很优雅的魔法:sparkles:!
现在有了一个完整的全栈**(full-stack) 应用程序,用您最喜爱 Vue.js 和 Flask**技术构建。
后记
最后,我想就如何改进这个解决方案谈几句话。
首先利用CORS,如果你想让你的API端访问外部的服务器。否则的话只需要使用代理服务器与前端开发技巧。
另一个改进是避免客户端硬编码API路由。也许你需要考虑一些API端点的字典。因此,当您更改API路由时,只需刷新一个字典即可。前端仍然有一个有效的端点。
通常在开发过程中,你将至少有2个终端窗口:一个是Flask和另一个是vue.js。在生产中可以摆脱Vue而只单独运行Node.js服务器。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
解决微信返回上一页,页面中的AJAX的请求,对Get请求无效的问题
Atas ialah kandungan terperinci 使用Vue.js和Flask来构建一个单页的App的示例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Django dan Flask adalah kedua-duanya peneraju dalam rangka kerja Web Python, dan kedua-duanya mempunyai kelebihan dan senario yang boleh digunakan. Artikel ini akan menjalankan analisis perbandingan kedua-dua rangka kerja ini dan memberikan contoh kod khusus. Pengenalan Pembangunan Django ialah rangka kerja Web berciri penuh, tujuan utamanya adalah untuk membangunkan aplikasi Web yang kompleks dengan cepat. Django menyediakan banyak fungsi terbina dalam, seperti ORM (Pemetaan Hubungan Objek), borang, pengesahan, bahagian belakang pengurusan, dsb. Ciri-ciri ini membolehkan Django mengendalikan besar

Bermula dari awal, saya akan mengajar anda langkah demi langkah cara memasang Flask dan cepat membina blog peribadi Sebagai seorang yang suka menulis, mempunyai blog peribadi adalah sangat penting. Sebagai rangka kerja Web Python yang ringan, Flask boleh membantu kami membina blog peribadi yang ringkas dan berfungsi sepenuhnya dengan cepat. Dalam artikel ini, saya akan bermula dari awal dan mengajar anda langkah demi langkah cara memasang Flask dan membina blog peribadi dengan cepat. Langkah 1: Pasang Python dan pip Sebelum bermula, kita perlu memasang Python dan pi terlebih dahulu

Tutorial pemasangan rangka kerja Flask: Ajar anda langkah demi langkah cara memasang rangka kerja Flask dengan betul. Contoh kod khusus diperlukan. Ia mudah dipelajari, mudah digunakan dan padat dengan ciri yang hebat. Artikel ini akan membawa anda langkah demi langkah untuk memasang rangka kerja Flask dengan betul dan memberikan contoh kod terperinci untuk rujukan. Langkah 1: Pasang Python Sebelum memasang rangka kerja Flask, anda perlu terlebih dahulu memastikan bahawa Python dipasang pada komputer anda. Anda boleh bermula dari P

Penggunaan aplikasi flask: Perbandingan Gunicorn vs suWSGI Pengenalan: Flask, sebagai rangka kerja Web Python yang ringan, disukai oleh banyak pembangun. Apabila menggunakan aplikasi Flask ke persekitaran pengeluaran, memilih Antara Muka Gerbang Pelayan (SGI) yang sesuai adalah keputusan penting. Gunicorn dan uWSGI ialah dua pelayan SGI biasa Artikel ini akan menerangkannya secara terperinci.

Bagaimana untuk menggunakan aplikasi Flask menggunakan Gunicorn? Flask ialah rangka kerja Web Python ringan yang digunakan secara meluas untuk membangunkan pelbagai jenis aplikasi Web. Gunicorn (GreenUnicorn) ialah pelayan HTTP berasaskan Python yang digunakan untuk menjalankan aplikasi WSGI (WebServerGatewayInterface). Artikel ini akan memperkenalkan cara menggunakan Gunicorn untuk menggunakan aplikasi Flask, dengan

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Tutorial pemasangan dan konfigurasi kelalang: Alat untuk membina aplikasi Web Python dengan mudah, contoh kod khusus diperlukan Pengenalan: Dengan peningkatan populariti Python, pembangunan Web telah menjadi salah satu kemahiran yang diperlukan untuk pengaturcara Python. Untuk menjalankan pembangunan web dalam Python, kita perlu memilih rangka kerja web yang sesuai. Di antara banyak rangka kerja Web Python, Flask ialah rangka kerja yang ringkas, mudah digunakan dan fleksibel yang digemari oleh pembangun. Artikel ini akan memperkenalkan pemasangan rangka kerja Flask,

Gunicorn dan Flask: Kombinasi penggunaan yang sempurna, memerlukan contoh kod khusus Gambaran Keseluruhan: Sangat penting bagi pembangun untuk memilih kaedah penggunaan yang sesuai, terutamanya untuk aplikasi web Python. Antara rangka kerja web Python, Flask ialah pilihan yang sangat popular, dan Gunicorn ialah pelayan untuk menggunakan aplikasi Python. Artikel ini akan memperkenalkan gabungan Gunicorn dan Flask dan menyediakan beberapa contoh kod khusus untuk membantu pembaca
