<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近學習了一下前後端分離技術,前端用的是Vue,後段用的是Flask。
vue官網:開源的 Javascript 框架,vue是一套構建使用者介面的漸進式框架,Vue採用自底向上的增量開發設計。vue是輕量級的,有很多獨立的功能和庫。
vue.js滿足當前webapp專案的開發需求,MVVM框架誕生,而Vue.js便是這樣一種js框架。兩大核心:資料驅動和元件化。
Flask:用Python實現,是一個web框架,屬於微框架。
以下專案的建立都是在Python虛擬環境和npm區域性安裝的,只有Vue-CLI是全域性安裝的。
npm ls -g --depth 0 查詢npm全域性安裝的包
防止依賴的混亂,首先建立虛擬環境。
Mac:code hubo$ mkdir flask-vue-crud Mac:code hubo$ cd flask-vue-crud/ Mac:flask-vue-crud$ python -m venv venv Mac:flask-vue-crud$ source venv/bin/activate (venv) Mac:flask-vue-crud hubo$ ls venv
第一行建立flask-vue-crud資料夾,第三行建立python虛擬環境python3.3版本可以通過venv模組,python2版本可以使用virtualenv模組。
第四行啟用虛擬環境。
首先安裝Flask和Flask-CORS擴充套件。
Flask—CORS:
如果使用不同的協定,或者請求來自於其他的 IP 地址或域名或埠,就需要用到 Cross Origin Resource Sharing (CORS),這正是 Flask-CORS 擴充套件幫我們做到的。實際環境中只設定來自前端應用所在的域的請求。
(venv) Mac:flask-vue-crud hubo$ pip install Flask Flask-Cors
然後在根目錄下建立app.py檔案:
from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app) @app.route('/', methods=['GET']) def ping_pong(): return jsonify('Hello World!') #(jsonify返回一個json格式的資料) if __name__ == '__main__': app.run()
然後執行:
(venv) Mac:flask-vue-crud hubo$ python app.py
開啟瀏覽器,輸入http://localhost:5000/ping,會看到輸出
Hello World!
目前Flask環境已經設定好,並且已經建立了一個Flask小Demo。
Vue CLI:官方釋出 vue.js 專案腳手架,使用 vue-cli 可以快速建立 vue 專案。
首先全域性安裝vue Cli:npm install -g(全域性安裝),npm下載的國外的依賴,可以使用淘寶的cnpm。
下載淘寶的cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
使用npm或cnom下載vue cli
(venv) Mac:flask-vue-crud hubo$ npm insatll -g vue-cli
檢視安裝成功
Mac:~ hubo$ vue -V 2.9.6
接下來通過webpack初始化一個新的Vue專案client:
Mac:flask-vue-crud hubo$ vue init webpack client ? Project name client ? Project description A Vue.js project ? Author hubo <1290259791@qq.com> ? Vue build standalone ? Install vue-router? Yes ? Use ESLint to lint your code? Yes ? Pick an ESLint preset Airbnb ? Set up unit tests No ? Setup e2e tests with Nightwatch? No ? Should we run `npm install` for you after the project has been created? (recom mended) npm
主要寫程式碼的位置:/flask-vue-crud/client/src/,目錄結構如下所示:
. ├── App.vue ├── assets │ └── logo.png ├── components │ ├── HelloWorld.vue │ └── Ping.vue ├── main.js └── router └── index.js
各個目錄的意思:
名字 | 作用 |
---|---|
main.js | app 的入口,它會載入和初始化 Vue 和根元件 |
App.vue | 根元件 - 其他元件的入口 |
assets | 靜態檔案如圖片和字型等都放在這裡 |
components | UI 元件放在這裡 |
router | URL 同元件的對映關係在這裡定義 |
client/src/components/HelloWord.vue是自動生成的單檔案元件,有三部分組成:
template
: 元件的 HTML 內容script
: 元件的邏輯程式碼(Javascript)style
: 元件的樣式(CSS)執行該程式:
(venv) Mac:flask-vue-crud hubo$ cd client/ (venv) Mac:client hubo$ ls README.md index.html package.json build node_modules src config package-lock.json static (venv) Mac:client hubo$ npm run dev 啟動dev
存取http://localhost:8080 能看到前端頁面
建立client/src/components/Ping.vue:
<template> <div> <p>{{ msg }}</p> </div> </template> <script> export default { name: 'Ping', data() { return { msg: 'Hello!', }; }, }; </script>
更新client/src/router/index.js,對映/ping到Ping元件:
import Vue from 'vue'; import Router from 'vue-router'; import HelloWorld from '@/components/HelloWorld'; import Ping from '@/components/Ping'; Vue.use(Router); export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld, }, { path: '/ping', name: 'Ping', component: Ping, }, ], mode: 'history', });
上面的mode: 'history’是為了讓 URL 變成http://localhost:8080/ping的形式。如果,不加該設定,預設的 URL 為http://localhost:8080/#/ping的形式。
存取http://localhost:8080/ping 能看到Hello!
通過axios傳送AJAX請求,安裝axios:
(venv) Mac:client hubo$ cnpm install axios --save ✔ Installed 1 packages ✔ Linked 4 latest versions ✔ Run 0 scripts ✔ All packages installed (5 packages installed from npm registry, used 1s, speed 12.01kB/s, json 5(12.96kB), tarball 0B)
更新Ping.vue元件,程式碼如下。
<template> <div class="container"> <button type="button" class="btn btn-primary">{{ msg }}</button> </div> </template> <script> import axios from 'axios'; export default { name: 'Ping', data() { return { msg: 'Hello World!', }; }, methods: { getMessage() { const path = 'http://localhost:5000/ping'; axios.get(path) .then((res) => { this.msg = res.data; }) .catch((error) => { // eslint-disable-next-line console.error(error); }); }, }, created() { this.getMessage(); }, }; </script>
啟動後端 Flask 應用,存取http://localhost:8080/ping,會看到頁面會呈現後端返回的資料。
將後段的資料改為:{1:‘a’,2:‘b’,3:‘c’}
啟動Flask:
(venv) Mac:flask-vue-crud hubo$ python app.py * Serving Flask app "app" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 239-628-485
啟動dec:
(venv) Mac:client hubo$ npm run dev
引入 CSS 框架 bootstrap,通過如下命令安裝bootstrap:使用的是cnpm
下面的cnpm都是區域性安裝。
(venv) Mac:client hubo$ cnpm install bootstrap@4.0.0 --save ✔ Installed 1 packages ✔ Linked 0 latest versions ✔ Run 0 scripts peerDependencies WARNING bootstrap@4.0.0 requires a peer of jquery@1.9.1 - 3 but none was installed peerDependencies WARNING bootstrap@4.0.0 requires a peer of popper.js@^1.12.9 but none was installed ✔ All packages installed (1 packages installed from npm registry, used 770ms, speed 6.85kB/s, json 1(5.27kB), tarball 0B)
我這裡缺少兩個依賴,繼續下載依賴
(venv) Mac:client hubo$ cnpm install jquery@1.9.1 --save ✔ Installed 1 packages ✔ Linked 0 latest versions ✔ Run 0 scripts ✔ All packages installed (1 packages installed from npm registry, used 1s, speed 335.44kB/s, json 1(5.19kB), tarball 482.88kB) (venv) Mac:client hubo$ cnpm install popper.js --save ✔ Installed 1 packages ✔ Linked 0 latest versions ✔ Run 0 scripts ✔ All packages installed (1 packages installed from npm registry, used 543ms, speed 16.56kB/s, json 1(8.99kB), tarball 0B)
再次下載bootstrap:
(venv) Mac:client hubo$ cnpm install bootstrap@4.0.0 --save ✔ Installed 1 packages ✔ Linked 0 latest versions ✔ Run 0 scripts ✔ All packages installed (used 647ms, speed 41.65kB/s, json 1(26.95kB), tarball 0B)
在 app 的入口檔案client/src/main.js中匯入 bootstrap:
import 'bootstrap/dist/css/bootstrap.css'; import Vue from 'vue'; import App from './App'; import router from './router'; Vue.config.productionTip = false; /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>', });
去掉根元件client/src/App.vue中多餘的樣式:
<style> #app { margin-top: 60px; } </style>
在Ping.vue元件中增加樣式:
<template> <div class="container"> <button type="button" class="btn btn-primary">{{ msg }}</button> </div> </template>
再次存取http://localhost:8080/ping檢視效果。
Newline required at end of file but not found
這種錯誤處理方法:
我的錯誤是在33行後面新增一個空白行就可以了。
bootstrap最新版的好像和vue不相容,使用的是4.0.0版本。
有遇到其他的問題,可以留言板討論,目前除了bootstrap是4.0版本其他的應該都是最新的版本。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45