使用Vue.js和Flask来构建一个单页的App的示例

下面我会详细讲解使用Vue.js和Flask来构建一个单页App的示例,包含两个示例说明。

示例1:使用Vue.js和Flask来搭建前后端分离的Todo应用

前端Vue.js

  1. 使用Vue CLI创建项目
vue create todo-vue
  1. 安装axios
npm install axios
  1. 编写Todo.vue组件
<template>
  <div>
    <h1>Todo List</h1>
    <form @submit.prevent="addTodo">
      <input type="text" v-model="newTodoText" placeholder="Add a todo">
      <button>Add</button>
    </form>
    <ul>
      <li v-for="todo in todos" :key="todo.id">
        {{ todo.text }}
      </li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      todos: [],
      newTodoText: '',
    };
  },
  methods: {
    async addTodo() {
      if (!this.newTodoText) return;
      const response = await axios.post('/api/todo', { text: this.newTodoText });
      this.todos.push(response.data);
      this.newTodoText = '';
    },
  },
  async mounted() {
    const response = await axios.get('/api/todo');
    this.todos = response.data;
  },
};
</script>

后端Flask

  1. 创建项目
mkdir todo-flask
cd todo-flask
  1. 创建虚拟环境并激活
python3 -m venv venv
source venv/bin/activate
  1. 安装Flask和Flask-CORS
pip install Flask Flask-CORS
  1. 创建Flask应用文件app.py
from flask import Flask, jsonify, request
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

todos = []

@app.route('/api/todo', methods=['GET'])
def get_todos():
    return jsonify(todos)

@app.route('/api/todo', methods=['POST'])
def add_todo():
    request_data = request.get_json()
    new_todo = {'id': len(todos) + 1, 'text': request_data['text']}
    todos.append(new_todo)
    return jsonify(new_todo)

if __name__ == '__main__':
    app.run(debug=True)
  1. 运行Flask应用
export FLASK_APP=app.py # Windows为 set FLASK_APP=app.py
flask run

将前后端连接起来

  1. 修改前端Vue.js中的axios请求地址
axios.defaults.baseURL = 'http://127.0.0.1:5000'; // Flask应用运行地址
  1. 运行前端Vue.js
npm run serve
  1. 打开浏览器,访问http://localhost:8080 就可以看到Todo应用了。

示例2:使用Vue.js和Flask来进行用户登陆认证

前端Vue.js

  1. 使用Vue CLI创建项目
vue create login-vue
  1. 安装axios和vue-router
npm install axios vue-router
  1. 编写Login.vue组件
<template>
  <div>
    <h1>Login</h1>
    <form @submit.prevent="login">
      <input type="text" v-model="username" placeholder="Username">
      <input type="password" v-model="password" placeholder="Password">
      <button>Login</button>
    </form>
    <br>
    <div v-if="errorMessage">{{ errorMessage }}</div>
  </div>
</template>

<script>
import axios from 'axios';
import { mapState } from 'vuex';

export default {
  data() {
    return {
      username: '',
      password: '',
      errorMessage: '',
    };
  },
  methods: {
    async login() {
      const data = { username: this.username, password: this.password };
      try {
        const response = await axios.post('/api/login', data);
        this.$store.commit('setToken', response.data.token);
        this.$router.push({ name: 'Home' });
      } catch (error) {
        this.errorMessage = 'Login failed, please try again!';
        console.error(error);
      }
    },
  },
  computed: mapState([
    'token',
  ]),
};
</script>
  1. 编写Home.vue组件
<template>
  <div>
    <h1>Home</h1>
    <div>{{ errorMessage }}</div>
    <div v-if="!token">Please Login to access your account!</div>
    <div v-if="token">Welcome to your account!</div>
  </div>
</template>

<script>
import { mapState } from 'vuex';

export default {
  computed: mapState([
    'token',
  ]),
  data() {
    return {
      errorMessage: '',
    };
  },
  async mounted() {
    if (this.token) {
      try {
        const response = await axios.get('/api/user', {
          headers: {
            Authorization: `Bearer ${this.token}`,
          },
        });
        console.log(response.data);
      } catch (error) {
        this.errorMessage = 'Request user information failed!';
        console.error(error);
      }
    }
  },
};
</script>

后端Flask

  1. 安装Flask、Flask-CORS和Flask-JWT-Extended
pip install Flask Flask-CORS Flask-JWT-Extended
  1. 创建Flask应用文件app.py
from flask import Flask, jsonify, request
from flask_jwt_extended import create_access_token, JWTManager, jwt_required, get_jwt_identity
from flask_cors import CORS

app = Flask(__name__)
CORS(app)
app.config['JWT_SECRET_KEY'] = 'jwt-secret-string' # 自行修改
jwt = JWTManager(app)

users = {
    'demo': {'password': 'password'},
}

@app.route('/api/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
    if not username or not password:
        return jsonify({"msg": "Missing username or password"}), 400
    user = users.get(username, None)
    if not user or user['password'] != password:
        return jsonify({"msg": "Invalid username or password"}), 401

    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token)

@app.route('/api/user', methods=['GET'])
@jwt_required
def get_user():
    current_user = get_jwt_identity()
    user = {'username': current_user}
    return jsonify(user)

if __name__ == '__main__':
    app.run(debug=True)

将前后端连接起来

  1. 修改前端Vue.js中的axios请求地址
axios.defaults.baseURL = 'http://127.0.0.1:5000'; // Flask应用运行地址
  1. 修改/src/store/index.js文件,添加token状态和其对应的mutations
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    token: null,
  },
  mutations: {
    setToken(state, token) {
      state.token = token;
    },
  },
});
  1. 修改/src/main.js文件,添加vue-router
import Vue from 'vue';
import App from './App.vue';
import store from './store';
import VueRouter from 'vue-router';
import Home from './components/Home.vue';
import Login from './components/Login.vue';

Vue.config.productionTip = false;
Vue.use(VueRouter);

const routes = [
  { path: '/', redirect: '/home' },
  { path: '/home', name: 'Home', component: Home },
  { path: '/login', name: 'Login', component: Login },
];

const router = new VueRouter({
  routes,
});

new Vue({
  store,
  router,
  render: h => h(App),
}).$mount('#app');
  1. 运行前端Vue.js
npm run serve
  1. 运行后端Flask
export FLASK_APP=app.py # Windows为 set FLASK_APP=app.py
flask run
  1. 打开浏览器,访问http://localhost:8080 就可以看到用户登陆认证的应用了。

至此,我们就成功地使用Vue.js和Flask来构建了一个单页App和一个用户登陆认证的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Vue.js和Flask来构建一个单页的App的示例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Flask 数据库集成的介绍

    Flask 是一款轻量级的 Web 框架,不仅提供了方便的路由定义和模板引擎,还支持多种数据库集成。在此文中,我们将介绍 Flask 中几种常见数据库的集成方式。 Flask-SQLAlchemy Flask-SQLAlchemy 是 Flask 中使用最广泛的数据库集成扩展,它基于 SQLAlchemy 实现了对 Flask 框架的扩展,并提供了一系列更方…

    Flask 2023年5月15日
    00
  • Python中import导入上一级目录模块及循环import问题的解决

    导入上一级目录模块在Python中十分常见,可以通过修改Python路径或使用相对路径解决。而循环import问题则需要注意模块之间的依赖关系,防止出现无限循环导致程序崩溃问题。本文将详细讲解这两个问题的解决方案,其中包含两个示例代码。 导入上一级目录模块 在Python中,导入上一级目录模块,可以通过修改系统路径添加或使用相对路径来解决。 修改系统路径添加…

    Flask 2023年5月16日
    00
  • AJAX请求与跨域问题解决方法详解

    AJAX(异步 JavaScript 和 XML)是一种用于创建动态网页的技术,它无需页面重载即可向服务器发送请求并获取响应结果。虽然AJAX技术进一步提高了Web应用程序的交互性和性能,但它也带来了一些跨域问题。在下面的文章中,我们将探讨AJAX请求以及如何解决跨域问题。 AJAX请求的基本原理 AJAX的工作原理是通过JavaScript发起异步HTTP…

    Flask 2023年5月16日
    00
  • Flask框架web开发之零基础入门

    下面我将详细讲解“Flask框架web开发之零基础入门”的完整攻略,并且提供两条示例说明。 标题一:Flask框架web开发之零基础入门 1. Flask框架简介 Flask是一款Python web框架,使用简单灵活,受到了广大开发者的喜爱。它以微框架的形式出现,核心只包含了路由、调试等核心组件,避免了臃肿的代码。另外,Flask有着强大的扩展支持,也非常…

    Flask 2023年5月15日
    00
  • python flask开发的简单基金查询工具

    下面是详细讲解“python flask开发的简单基金查询工具”的完整攻略。 介绍 Python Flask是一个轻量级的Web框架,它可以帮助我们快速地搭建Web应用程序。在这篇攻略中,我们将使用Python Flask框架来构建一个简单的基金查询工具。 环境要求 在开始之前,我们需要准备好以下环境: Python 3.x Flask requests b…

    Flask 2023年5月15日
    00
  • Python的Flask框架中@app.route的用法教程

    下面是Python Flask框架中@app.route的用法教程攻略及示例说明。 什么是@app.route @app.route是一个装饰器,它用来注册一个网页的URL路径,每次当用户发送请求到该URL时,相应的函数就会被执行。这个装饰器通常用于Flask中的视图函数。 @app.route所装饰的函数将会作为视图函数,当访问被装饰的URL路径时,将触发…

    Flask 2023年5月15日
    00
  • Flask模板引擎之Jinja2语法介绍

    Flask模板引擎之Jinja2语法介绍 在Flask中,Jinja2是为构建动态web应用程序提供的一个模板引擎,可以轻松地将应用程序与HTML(或其他文本)集成,并在呈现页面之前修改动态内容。 变量 在Jinja2中,使用双大括号来包含变量名,如 {{ variable_name }}。 <!DOCTYPE html> <html&gt…

    Flask 2023年5月15日
    00
  • python中Flask框架简单入门实例

    Flask框架是一种轻型的Web框架,使用Python编写。它的设计理念是简单、灵活、易于扩展和学习。本文将为您提供 Flask 框架的入门实例攻略。 环境搭建 首先,您需要在本地安装Python 3.x。推荐使用Anaconda作为python环境。接着安装Flask框架,您可以直接通过pip安装。 pip install Flask 示例一:Flask框…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部