Vue.js 与 Flask/Django 后端配合开发实战

Vue.js 与 Flask/Django 后端配合开发实战

在现代的 Web 开发中,前后端分离已成为一种主流架构,其中前端使用 Vue.js 等流行的框架,后端采用 Flask 或 Django 提供 API 接口。在这种开发模式下,前端负责页面的交互和动态效果,后端负责处理数据、提供 API 接口、完成业务逻辑等。本文将详细介绍如何使用 Vue.js 与 Flask 或 Django 进行配合开发,并展示部分代码实现。
在这里插入图片描述

一、前后端分离架构的优势
  1. 开发效率提高:前端和后端可以分开开发,互不影响。前端开发人员可以专注于用户界面和交互逻辑,后端开发人员则专注于 API 的设计和数据处理。

  2. 技术栈自由选择:前后端分离允许我们根据项目需求选择最合适的技术栈。例如,前端可以使用 Vue.js 或 React,后端可以根据场景选择 Flask、Django、Node.js 等。

  3. 前后端解耦:通过 RESTful API 或 GraphQL 进行通信,前端只需要根据接口调用数据,而后端负责处理和返回数据,前后端之间完全解耦。
    在这里插入图片描述

二、Vue.js 与 Flask/Django 的基础工作流

在前后端分离的架构中,前端 Vue.js 主要通过发送 HTTP 请求来获取后端提供的数据,常见的方式是通过 AJAXFetch API,请求后端的 API,后端返回 JSON 格式的数据供前端使用。

工作流程概述:
  1. 前端:通过 Vue.js 创建动态页面,用户在页面上与应用进行交互。Vue.js 负责处理用户事件、获取输入、发送请求到后端。

  2. 后端:使用 Flask 或 Django 提供 RESTful API 接口,处理前端请求,查询数据库,并返回 JSON 数据。

  3. 数据交互:前端使用 axiosfetch 向后端发出请求,后端处理请求后返回 JSON 响应,前端根据响应更新页面内容。
    在这里插入图片描述

三、Flask 与 Vue.js 配合开发
1. Flask 后端配置

Flask 是一个轻量级的 Python Web 框架,支持快速构建 RESTful API。首先,我们需要安装 Flask 并创建基础的 Flask 应用。

安装 Flask

pip install Flask

创建 Flask 应用

# app.py
from flask import Flask, jsonify, requestapp = Flask(__name__)# 示例 API
@app.route('/api/data', methods=['GET'])
def get_data():sample_data = {'message': 'Hello, Vue.js!','status': 'success','data': [1, 2, 3, 4, 5]}return jsonify(sample_data)if __name__ == '__main__':app.run(debug=True)

在这个示例中,Flask 后端提供了一个简单的 API /api/data,返回一个 JSON 响应,其中包含一个消息和一组数据。

2. Vue.js 前端配置

在前端部分,我们使用 Vue.js 创建一个简单的应用来展示如何从 Flask 后端获取数据并在页面上显示。

安装 Vue CLI

npm install -g @vue/cli
vue create vue-flask-app

创建 Vue 组件

src/components/HelloFlask.vue 中创建一个组件,该组件通过 axios 向 Flask 后端发送请求。

<template><div><h1>{{ message }}</h1><p>Status: {{ status }}</p><ul><li v-for="item in data" :key="item">{{ item }}</li></ul></div>
</template><script>
import axios from 'axios'export default {data() {return {message: '',status: '',data: []}},mounted() {// 请求Flask后端的APIaxios.get('http://localhost:5000/api/data').then(response => {this.message = response.data.messagethis.status = response.data.statusthis.data = response.data.data}).catch(error => {console.log(error)})}
}
</script>

在这个 Vue.js 组件中,我们使用 axios 向 Flask 后端的 /api/data 发送 GET 请求,并将返回的数据展示在页面上。axios.get() 方法用于发起 HTTP 请求,当数据成功返回时,数据将被绑定到 Vue 组件的 data 对象中。

3. 前后端联调

确保 Flask 后端在运行:

python app.py

然后运行 Vue.js 项目:

npm run serve

访问 http://localhost:8080,你应该能够在页面上看到来自 Flask 后端的数据。
在这里插入图片描述

四、Django 与 Vue.js 配合开发

Django 是一个全功能的 Web 框架,适合构建大型 Web 应用。通过 Django Rest Framework(DRF),我们可以快速构建 RESTful API 接口,与 Vue.js 前端进行交互。

1. Django 后端配置

首先,安装 Django 和 Django Rest Framework:

pip install django djangorestframework

创建一个新的 Django 项目:

django-admin startproject django_vue_app
cd django_vue_app
python manage.py startapp api

配置 Django Rest Framework

settings.py 中添加 rest_framework 到已安装应用中:

INSTALLED_APPS = [...'rest_framework','api',
]

api/views.py 中创建一个简单的 API 视图:

# api/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view@api_view(['GET'])
def get_data(request):sample_data = {'message': 'Hello from Django!','status': 'success','data': [6, 7, 8, 9, 10]}return Response(sample_data)

api/urls.py 中定义路由:

# api/urls.py
from django.urls import path
from .views import get_dataurlpatterns = [path('data/', get_data),
]

配置项目的 urls.py 文件

# django_vue_app/urls.py
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('api/', include('api.urls')),
]

运行 Django 服务器:

python manage.py runserver
2. Vue.js 前端配置

在前端部分,我们可以直接复用之前的 Vue 组件,但需要将 API 请求的 URL 改为指向 Django 后端:

<script>
import axios from 'axios'export default {data() {return {message: '',status: '',data: []}},mounted() {// 请求Django后端的APIaxios.get('http://localhost:8000/api/data/').then(response => {this.message = response.data.messagethis.status = response.data.statusthis.data = response.data.data}).catch(error => {console.log(error)})}
}
</script>

确保 Django 服务器在端口 8000 运行,然后在 Vue.js 项目中发送请求,数据将会成功从 Django 后端加载并展示在页面上。
在这里插入图片描述

五、跨域问题处理

在前后端分离开发时,通常会遇到 跨域问题。浏览器出于安全考虑,禁止从不同的域名、端口或协议中请求资源,这就是所谓的 同源策略

我们可以通过后端设置 CORS(Cross-Origin Resource Sharing) 来解决跨域问题。

Flask 中配置 CORS

pip install flask-cors

在 Flask 项目中添加 CORS 支持:

from flask_cors import CORSapp = Flask(__name__)
CORS(app)

Django 中配置 CORS

pip install django-cors-headers

settings.py 中配置 CORS:

INSTALLED_APPS = [...'corsheaders',
]MIDDLEWARE = [...'corsheaders.middleware.CorsMiddleware',
]CORS_ALLOW_ALL_ORIGINS = True

在这里插入图片描述

六、总结

在前后端分离的架构下,Vue.js 作为前端框架与 Flask/Django 后端配合,可以充分发挥各自的优势。通过 RESTful API 接口,前端可以灵活地请求后端的数据并动态展示,后端则负责处理业务逻辑、数据库操作等。

通过本文的示例,我们学习了如何使用 Vue.js 和 Flask/Django 构建前后端分离的 Web 应用。无论是轻量级的 Flask 还是功能强大的 Django,它们都可以很好地与 Vue.js 前端框架协同工作,实现高效、灵活的 Web 开发。

这种前后端分离的架构在实际开发中非常常见,适用于大多数中大型项目。希望通过本文的学习,能帮助你在实际项目中更好地应用这一技术栈。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434548.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将Mixamo的模型和动画导入UE5

首先进入Mixamo的官网 , 点击 Character 选择一个模型 (当然你也可以自己上传模型/绑定动画) 然后点击下载 , 这个作为带骨骼的模型 选择FBX格式 , T Pose 直接下载 点击 Animations 选择动画 , 搜索 idle 默认站立动画 点击下载 , 格式选择 FBX , 不带模型只要骨骼 , 帧数选6…

前端面试经验总结2(经典问题篇)

谈谈你对前端的理解 前端主要负责产品页面部分的实现&#xff0c;是最贴近于用户的程序员。 基本工作要求&#xff1a; 1.参与项目&#xff0c;通过与团队成员&#xff0c;UI设计&#xff0c;产品经理的沟通&#xff0c;快速高质量的实现效果图&#xff0c;并能够精确到1px 2.做…

大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲

LLaMA-Factory ——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型&#xff0c;并且提供了丰富的训练算法&#xff0c;包括增量预训练、多模态指令监督微调、奖励模型训练等。 LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的…

TypeScript介绍和安装

TypeScript介绍 TypeScript是由微软开发的一种编程语言&#xff0c;它在JavaScript的基础上增加了静态类型检查。静态类型允许开发者在编写代码时指定变量和函数的类型&#xff0c;这样可以在编译时捕获潜在的错误&#xff0c;而不是等到运行时才发现问题。比如&#xff0c;你…

论文笔记:iCaRL: Incremental Classifier and Representation Learning

1. Contribution 提出了一种新的训练策略&#xff0c;iCaRL&#xff1a;允许以增量方式学习&#xff1a;只需要同时存在一小部分类别的训练数据&#xff0c;新类别可以逐步添加。同时学习分类器和数据表示&#xff1a;iCaRL能够同时学习强大的分类器和数据表示&#xff0c;这与…

[SAP ABAP] SELECTION-SCREEN

SELECTION-SCREEN用来调节系统生成的画面 REPORT z437_test_2024.TABLES: mara, zdbt_sch_437.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. " Title1 PARAMETERS:p_1 DEFAULT A,p_2 TYPE char10. SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN …

实现微信小程序中点击单词显示在input的交互功能指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

基于SSH的酒店管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSH的酒店管理系统拥有三种角色 管理员&#xff1a;用户管理、房间分类管理、房间信息管理、开房管理、退房管理、开房和预订记录查询等 前台&#xff1a;房间分类管理、房间信息管…

【Go】-Websocket的使用

目录 为什么需要websocket 使用场景 在线教育 视频弹幕 Web端即时通信方式 什么是web端即时通讯技术&#xff1f; 轮询 长轮询 长连接 SSE websocket 通信方式总结 Websocket介绍 协议升级 连接确认 数据帧 socket和websocket 常见状态码 gorilla/websocket实…

LaTex符号不好记忆?

总结在Matlab中常用的LaTeX符号如下&#xff1a; 1. **希腊字母**&#xff1a; - \alpha 表示 α - \beta 表示 β - \gamma 表示 γ - \delta 表示 δ - \epsilon 表示 ε - \zeta 表示 ζ - \eta 表示 η - \theta 表示 θ - \iota 表示 ι -…

1-仙灵之谜(区块链游戏详情介绍)

1-仙灵之谜&#xff08;区块链游戏详情介绍&#xff09; 前言&#xff08;该游戏仅供娱乐&#xff09;正文 前言&#xff08;该游戏仅供娱乐&#xff09; 依稀记得本科那会儿参加了一个区块链实验室&#xff0c;那时每周末大家都会爬山或者抽出一下午讨论区块链以及未来&#x…

全国省、市、县(区)土地利用类型及面积面板数据(2019-2022年)

土地利用类型是根据土地利用方式和地域差异对土地资源单元进行划分的基本土地地域单元。 2019年-2022年全国省、市、县&#xff08;区&#xff09;土地利用类型及面积面板数据_土地利用类型数据下载资源-CSDN文库https://download.csdn.net/download/2401_84585615/89466102 …

9.28每日作业

1> 创建一个新项目&#xff0c;将默认提供的程序都注释上意义 01Demo.pro QT core gui # QT表示要引入的类库 core&#xff1a;核心库例如IO操作在该库中 gui&#xff1a;图形化界面库 # 如果要使用其他类库中的相关函数&#xff0c;则需要加对于的类库后&#…

IO(Reader/Writer)

1.Reader a.简介 i.是Java的IO库提供的另一种输入流。和InputStream的区别是&#xff1a;InputStream是字节流&#xff0c;以byte为单位&#xff0c;Reader是字符流&#xff0c;以char为单位。 ii.java.io.Reader是所有字符输入流的超类。 b.FileReader i.FileReader默认的编…

QT基础 制作简单登录界面

作业&#xff1a; 1、创建一个新项目&#xff0c;将默认提供的程序都注释上意义 01zy.pro代码 QT core gui # QT表示要引入的类库 core&#xff1a;核心库例如IO操作在该库中 gui&#xff1a;图形化界面库 # 如果要使用其他类库中的相关函数&#xff0c;则需要加对…

PHP爬虫淘宝商品SKU详细信息获取指南

在电子商务领域&#xff0c;获取商品的SKU&#xff08;Stock Keeping Unit&#xff0c;库存单位&#xff09;详细信息对于商家进行库存管理、订单处理和客户服务至关重要。淘宝作为中国最大的电商平台之一&#xff0c;提供了丰富的API接口&#xff0c;使得开发者能够通过PHP爬虫…

影院管理革新:小徐的Spring Boot应用

第二章开发技术介绍 2.1相关技术 小徐影城管理系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言&#xff0c;易于学习&#xff0c;实用且面向用户。全球超过35&#xff05;的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统&#xff0c;因为它…

Java: 数据类型与变量和运算符

目录 一 .字面常量 二.数据类型 三.变量 1.语法格式 2.整型变量 (1).整型变量 (2). 长整型变量 (3).短整型变量 (4).字节型变量 3.浮点型变量 (1).双精度浮点型 (2).单精度浮点型 4.字符型变量 5.布尔型变量 四.类型转换 1.自动类型转换(隐式) 2.强制类型转换(…

四种主要的IO模型

多路复用 **阻塞式IO**流程:特点:**非阻塞式IO**流程:特点:优点:**缺点:****IO多路复用**流程:优点缺点:异步IO流程如下:特点:缺点:阻塞式IO 默认情况下linux进程对所有socket连接进行的IO操作都是同步阻塞IO,在阻塞IO模型中,从进程发起IO系统调用开始,一直到系统…

如何通过Dockfile更改docker中ubuntu的apt源

首先明确我们有一个宿主机和一个docker环境&#xff0c;接下来的步骤是基于他们两个完成的 1.在宿主机上创建Dockerfile 随便将后面创建的Dockerfile放在一个位置,我这里选择的是 /Desktop 使用vim前默认你已经安装好了vim 2.在输入命令“vim Dockerfile”之后&#xff0c;…