Django和MySQL与Vue项目之间的数据是如何流动实现交互响应的
1.Django应用创建到启动的简单示例2.Django中型项目的目录结构和一个应用创建启动示例3.Ubungu+Django简单项目创建代码全4.Django+Vue构建前后端分离开发模式
5.Django和MySQL与Vue项目之间的数据是如何流动实现交互响应的
6.Django项目中关于静态文件的引用7.Django+nginx+静态网站8.Django项目中Ajax的应用,博客分类文章阅读,左右栏目自动更新9.Ajax代码运行前应该先加载jQuery10.关于css选择器和样式表的应用11.Django项目中使用markdown语法12.关于静态文件目录与模板引用和Nginx location块的适配设置13.html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化14.Flask与Django返回json数据的等价方法在一个前后端分离的Django和Vue项目中,Django作为后端,MySQL作为数据库,Vue作为前端,数据的流动和交互可以通过API来实现。以下是数据流动的过程及交互的详细说明:
1. 数据流动过程概述
- 前端发送请求:Vue应用通过HTTP请求向Django后端发送数据请求(例如获取、创建、更新或删除数据)。
- 后端处理请求:Django接收到请求后,通过Django REST framework处理请求,并与MySQL数据库进行交互。
- 数据库操作:Django使用ORM(对象关系映射)对MySQL数据库进行操作(例如查询、插入、更新或删除数据)。
- 后端返回响应:Django将数据库操作结果转换为JSON格式的数据,并作为响应返回给前端。
- 前端处理响应:Vue接收到响应后,根据数据进行页面更新或其他操作。
2. 具体实现步骤
1. 配置Django和MySQL
确保Django项目已配置MySQL数据库。在 settings.py
中配置数据库连接:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost', # 或者你的MySQL服务器地址
'PORT': '3306', # 默认MySQL端口
}
}
安装MySQL数据库驱动:
pip install mysqlclient
2. 创建Django模型
在 blog/models.py
中创建一个简单的博客文章模型:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
运行迁移命令:
python manage.py makemigrations
python manage.py migrate
3. 创建Django REST API
在 blog/serializers.py
中定义序列化器:
from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['id', 'title', 'content', 'created_at']
在 blog/views.py
中创建视图:
from rest_framework import generics
from .models import Post
from .serializers import PostSerializer
class PostListCreate(generics.ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
在 blog/urls.py
中定义API路由:
from django.urls import path
from .views import PostListCreate
urlpatterns = [
path('api/posts/', PostListCreate.as_view(), name='post-list-create'),
]
在主项目的 urls.py
中包含 blog
应用的URL:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
4. 配置CORS
安装并配置 django-cors-headers
以解决跨域请求问题:
pip install django-cors-headers
在 settings.py
中添加配置:
INSTALLED_APPS = [
...
'corsheaders',
'rest_framework',
'blog',
]
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]
CORS_ORIGIN_ALLOW_ALL = True # 或者配置具体允许的域名
5. 创建Vue前端
创建一个新的Vue项目,并安装Axios:
vue create frontend
cd frontend
npm install axios
在 src
目录下创建 api
文件夹,并创建 index.js
文件以配置Axios:
// src/api/index.js
import axios from 'axios';
const apiClient = axios.create({
baseURL: 'http://127.0.0.1:8000/blog/api',
withCredentials: false,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
});
export default {
getPosts() {
return apiClient.get('/posts/');
},
createPost(post) {
return apiClient.post('/posts/', post);
}
}
6. 创建Vue组件
在 src/components
目录下创建 PostList.vue
文件:
<template>
<div>
<h1>Blog Posts</h1>
<ul>
<li v-for="post in posts" :key="post.id">
{{ post.title }} - {{ post.created_at }}
</li>
</ul>
<form @submit.prevent="createPost">
<input v-model="newPost.title" placeholder="Title" />
<textarea v-model="newPost.content" placeholder="Content"></textarea>
<button type="submit">Create Post</button>
</form>
</div>
</template>
<script>
import api from '../api'
export default {
data() {
return {
posts: [],
newPost: {
title: '',
content: ''
}
}
},
created() {
this.fetchPosts();
},
methods: {
fetchPosts() {
api.getPosts().then(response => {
this.posts = response.data;
});
},
createPost() {
api.createPost(this.newPost).then(response => {
this.posts.push(response.data);
this.newPost.title = '';
this.newPost.content = '';
});
}
}
}
</script>
<style>
/* Add some basic styling */
</style>
7. 配置Vue路由
在 src/router/index.js
中配置路由:
import Vue from 'vue'
import Router from 'vue-router'
import PostList from '@/components/PostList'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'PostList',
component: PostList
}
]
})
8. 启动开发服务器
首先,启动Django开发服务器:
python manage.py runserver
然后,在 frontend
目录下启动Vue开发服务器:
npm run serve
3. 数据交互总结
- 前端发送请求:Vue通过Axios发送HTTP请求(GET、POST、PUT、DELETE等)到Django后端的API端点。
- 后端处理请求:Django REST framework处理请求,使用序列化器验证和序列化数据,并与MySQL数据库进行交互。
- 数据库操作:Django ORM执行数据库操作(查询、插入、更新、删除),并返回结果。
- 后端返回响应:Django将处理结果(通常是JSON格式)作为HTTP响应返回给前端。
- 前端处理响应:Vue接收到响应数据,并更新视图或进行其他操作(例如表单重置、显示通知等)。
通过以上步骤,你可以实现前后端分离的开发模式,利用Django和MySQL作为后端,Vue作为前端进行数据交互和响应。
合集:
Python Web
标签:
django+mysql+vue
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本