欢迎来到海上华帆的博客园子

记录一些学习过程中的心得体会,供自己和有缘人参考!

Django和MySQL与Vue项目之间的数据是如何流动实现交互响应的

在一个前后端分离的Django和Vue项目中,Django作为后端,MySQL作为数据库,Vue作为前端,数据的流动和交互可以通过API来实现。以下是数据流动的过程及交互的详细说明:

1. 数据流动过程概述

  1. 前端发送请求:Vue应用通过HTTP请求向Django后端发送数据请求(例如获取、创建、更新或删除数据)。
  2. 后端处理请求:Django接收到请求后,通过Django REST framework处理请求,并与MySQL数据库进行交互。
  3. 数据库操作:Django使用ORM(对象关系映射)对MySQL数据库进行操作(例如查询、插入、更新或删除数据)。
  4. 后端返回响应:Django将数据库操作结果转换为JSON格式的数据,并作为响应返回给前端。
  5. 前端处理响应: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作为前端进行数据交互和响应。

posted @   海上华帆  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示