首頁 web前端 js教程 Vue.js+Flask做出手機App

Vue.js+Flask做出手機App

Jun 14, 2018 pm 02:56 PM
vue.js 單頁

這次帶給大家Vue.js Flask做出手機App,Vue.js Flask做出手機App的注意事項有哪些,以下就是實戰案例,一起來看一下。

一般來說,如果你只是想透過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的時候。

聽起來是不是很有趣?那讓我們這樣動手做做吧。

完整的原始碼,你可以在這裡找到:https://github.com/oleg-agapov/flask-vue-spa

客戶端

我將使用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.vueabout.vuefrontend/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:8080localhost: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>
登入後複製

在这个阶段,我们只是模仿客户端的随机数生成过程。所以,这个组件就是这样工作的:

  1. 在初始化变量 randomNumber 等于0。

  2. 在methods部分我们通过 getRandomInt(min, max) 功能来从指定的范围内返回一个随机数, getrandom 函数将生成随机数并将赋值给 randomNumber

  3. 组件方法 getrandom 创建后将会被调用来初始化随机数

  4. 在按钮的单击事件我们将用 getrandom 方法得到新的随机数

现在在主页上,你应该看到前端显示我们产生的随机数。让我们把它连接到后端。

为此目的,我将用 axios 库。它允许我们用响应HTTP请求并用 Json 返回 JavaScript Promise 。我们安装下它:

(venv) cd frontend
(venv) npm install --save axios
登入後複製

打开 home.vue 再在

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

深入探討vite是怎麼解析.env檔的 深入探討vite是怎麼解析.env檔的 Jan 24, 2023 am 05:30 AM

使用vue框架開發前端專案時,我們部署的時候都會部署多套環境,往往開發、測試以及線上環境呼叫的介面網域都是不一樣的。如何能做到區分呢?那就是使用環境變數和模式。

圖文詳解如何在Vue專案中整合Ace程式碼編輯器 圖文詳解如何在Vue專案中整合Ace程式碼編輯器 Apr 24, 2023 am 10:52 AM

Ace 是一個用 JavaScript 寫的可嵌入程式碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和效能相符。它可以很容易地嵌入到任何網頁和 JavaScript 應用程式中。 Ace 被維護為Cloud9 IDE的主要編輯器 ,並且是 Mozilla Skywriter (Bespin) 專案的繼承者。

vue中組件化和模組化有什麼區別 vue中組件化和模組化有什麼區別 Dec 15, 2022 pm 12:54 PM

組件化和模組化的區別:模組化是從程式碼邏輯的角度進行劃分的;方便程式碼分層開發,確保每個每個功能模組的職能一致。元件化是從UI介面的角度進行規劃;前端的元件化,方便UI元件的重複使用。

探討如何在Vue3中撰寫單元測試 探討如何在Vue3中撰寫單元測試 Apr 25, 2023 pm 07:41 PM

在當今前端開發中,Vue.js 已經成為了一個非常流行的框架。隨著 Vue.js 的不斷發展,單元測試變得越來越重要。今天,我們將探討如何在 Vue.js 3 中編寫單元測試,並提供一些最佳實踐和常見的問題及解決方案。

深入聊聊vue3中的reactive() 深入聊聊vue3中的reactive() Jan 06, 2023 pm 09:21 PM

前言:在vue3的開發中,reactive是提供實現響應式資料的方法。日常開發這個是使用頻率很高的api。這篇文章筆者就來探索其內部運作機制。

Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Mar 23, 2023 pm 07:53 PM

在Vue.js中,開發人員可以使用兩種不同的語法來建立使用者介面:JSX語法和範本語法。這兩種文法各有優劣,以下就來探討它們的差異和優劣勢。

如何使用Golang開發單頁面網頁應用 如何使用Golang開發單頁面網頁應用 Jun 05, 2023 am 09:51 AM

隨著網路的不斷發展,對Web應用的需求也與日俱增。在過去,Web應用程式通常都是由多個頁面組成的,但是現在越來越多的應用程式選擇採用單頁面應用程式(SPA)。單頁面應用程式非常適合行動端的訪問,而且用戶無需等待頁面的整個重新加載,增加了用戶的體驗。在本文中,將介紹如何使用Golang開發SPA應用程式。什麼是單一頁面應用程式單頁面應用程式是指只有一個HTML檔案的網頁應用程式。它使用Jav

怎麼查詢目前vue的版本 怎麼查詢目前vue的版本 Dec 19, 2022 pm 04:55 PM

查詢目前vue版本的兩種方法:1、在cmd控制台內,執行「npm list vue」指令查詢版本,輸出結果就是vue的版本號資訊;2、在專案中找到並開啟package.json文件,查找「dependencies」項目即可看到vue的版本資訊。

See all articles