Install Flask-CORS extension https://flask-cors.readthedocs.io/
$ pip install -U flask-cors
from flask_cors import CORS
We'll be using the Vue CLI https://cli.vuejs.org/
$ vue create client
This will require you to answer a few questions about the project.
Vue CLI v4.5.11
? Please pick a preset: (Use arrow keys)
❯ Default ([Vue 2] babel, eslint)
Default (Vue 3 Preview) ([Vue 3] babel, eslint)
Manually select features
Use the down arrow key to highlight
Run development server:
$ cd client
$ npm run serve
Install Bootstrap https://getbootstrap.com/docs/5.0/getting-started/download/
$ npm install bootstrap
Install Axios
https://github.com/axios/axios
$ npm install axios
app.py
from flask import Flask, jsonify from flask_cors import CORS MEMBERS = [ { 'id': '1', 'name': 'cairocoders Ednalan', 'email': 'cairocoders@gmail.com', 'address': 'Olongapo city' }, { 'id': '2', 'name': 'clydey Ednalan', 'email': 'clydey@gmail.com', 'address': 'Angles city' }, { 'id': '3', 'name': 'claydren Ednalan', 'email': 'clyderen@gmail.com', 'address': 'San Fernando city' } ] # configuration DEBUG = True # instantiate the app app = Flask(__name__) app.config.from_object(__name__) # enable CORS CORS(app, resources={r'/*': {'origins': '*'}}) # sanity check route @app.route('/ping', methods=['GET']) def ping_pong(): return jsonify('pong!') @app.route('/members', methods=['GET']) def all_members(): return jsonify({ 'status': 'success', 'members': MEMBERS }) if __name__ == '__main__': app.run()client/scr/main.js
//client/scr/main.js import Vue from 'vue' import App from './App.vue' import router from './router'; import 'bootstrap/dist/css/bootstrap.css'; Vue.config.productionTip = false new Vue({ router, render: (h) => h(App), }).$mount('#app');client/src/App.vue
//client/src/App.vue <template> <div id="app"> <router-view/> </div> </template>client/src/Ping.vue
//client/src/Ping.vue <template> <div> <p>{{ msg }}</p> </div> </template> <script> import axios from 'axios'; export default { name: 'Ping', data() { return { msg: '', }; }, methods: { getMessage() { const path = 'http://localhost:5000/ping'; axios.get(path) .then((res) => { console.log(res) this.msg = res.data; }) .catch((error) => { console.error(error); }); }, }, created() { this.getMessage(); }, }; </script>client/src/components/Home.vue
//client/src/components/Home.vue <template> <div class="container"> <div class="row"> <div class="col-sm-10"> <h1>Member</h1> <hr><br><br> <button type="button" class="btn btn-success btn-sm">Add Member</button> <br><br> <table class="table table-hover"> <thead> <tr> <th scope="col">Name</th> <th scope="col">Email</th> <th scope="col">Address</th> <th></th> </tr> </thead> <tbody> <tr v-for="(rs, index) in members" :key="index"> <td>{{ rs.name }}</td> <td>{{ rs.email }}</td> <td>{{ rs.address }}</td> <td> <div class="btn-group" role="group"> <button type="button" class="btn btn-warning btn-sm">Update</button> <button type="button" class="btn btn-danger btn-sm">Delete</button> </div> </td> </tr> </tbody> </table> </div> </div> </div> </template> <script> import axios from 'axios'; export default { data() { return { members: [], }; }, methods: { getMembers() { const path = 'http://localhost:5000/members'; axios.get(path) .then((res) => { console.log(res); this.members = res.data.members; }) .catch((error) => { console.error(error); }); }, }, created() { this.getMembers(); }, }; </script>client/src/router/index.js
//client/src/router/index.js import Vue from 'vue'; import Router from 'vue-router'; import Ping from '../components/Ping.vue'; import Home from '../components/Home.vue'; Vue.use(Router); export default new Router({ mode: 'history', base: process.env.BASE_URL, routes: [ { path: '/', name: 'Home', component: Home, }, { path: '/ping', name: 'Ping', component: Ping, }, ], });