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

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

时间:2024-05-26 10:34:30浏览次数:19  
标签:Vue py Django blog MySQL import

在一个前后端分离的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作为前端进行数据交互和响应。

标签:Vue,py,Django,blog,MySQL,import
From: https://www.cnblogs.com/aiparallelworld/p/18213395

相关文章

  • Java项目:校园周边美食探索(java+SpringBoot+Mybaits+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue实现的校园周边美食探索及分享平台本系统包含管理员、用户两个角色。管理员:用户管理、美食鉴赏管理、好友管理、收藏管理、系统管理用户:登录、注册、个人中心管理、美食鉴赏管理、好友管理、收藏管理......
  • 基于SpringBoot+Vue的在线商城系统
    !!!有需要的小伙伴可以通过文章末尾名片咨询我哦!!! ......
  • MySQL报错注入之Xpath报错&floor函数报错
    目录前言Xpath报错注入updatexml()函数extractvalue()函数floor函数报错count与groupby的虚拟表总结前言报错注入的使用场景一般是页面无法正常回显数据库查询的内容,但是会详细显示查询过程的错误信息。如果连错误信息都没有,那就是盲注了。报错注入的原理就是将子查询语句查询......
  • MySQL入门——增删查改(下)
    数据库约束约束类型NOTNULL-指示某列不能存储NULL值。UNIQUE-保证某列的每行必须有唯一的值。DEFAULT-规定没有给列赋值时的默认值。PRIMARYKEY-NOTNULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的......
  • MySQL函数
    MySQL数据库提供了很多函数包括:数学函数;字符串函数;日期和时间函数;条件判断函数;系统信息函数;加密函数;格式化函数;mysql高级教程:http://cainiao.guashuw.com/一、数学函数数学函数主要用于处理数字,包括整型、浮点数等。函数作用ABS(x)返回x的绝对值......
  • MySQL Grant命令
    MySQL赋予用户权限命令的简单格式可概括为:grant权限on数据库对象to用户 MySQL高级教程:http://cainiao.guashuw.com/一、grant普通数据用户,查询、插入、更新、删除数据库中所有表数据的权利。grantselectontestdb.*tocommon_user@'%'grantinsertontestdb.*......
  • 宠物服务系统 毕业设计 Springboot+Vue+Mysql+Java
    作者主页:毕业设计精选作者简介:9年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家摘要随着人类生存质量的提升以及生活模式的改变,越来越多的人在闲暇之余饲养宠物,来满足精神上的需求 。从而 使得宠物服务行业也得到了繁荣发展 ......
  • MySQL命令大全
    1、连接Mysql格式:mysql-h主机地址-u用户名-p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql-uroot-p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。如果刚安装好MYSQL,超级......
  • Django上传图片实操不会上传图片的拿走
    上传图片当Django在处理文件上传的时候,文件数据被保存在request.FILESFILES中的每个键为<inputtype="file"name=""/>中的name注意:FILES只有在请求的方法为POST且提交的<form>带有enctype="multipart/form-data"的情况下才会包含数据。否则,FILES将为一个空的类似于字典的......
  • MySQL权限管理
    一、MySQL权限简介   关于mysql的权限简单的理解就是mysql允许你做你全力以内的事情,不可以越界。比如只允许你执行select操作,那么你就不能执行update操作。只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。MySQL高级教程:http://cainiao.guas......