vue前端与Django后端数据交互

本文介绍了如何使用Vue作为前端,Django作为后端进行数据交互,通过Django的ModelViewSet创建API接口,获取数据库中stars最多的五篇文章,并在Vue页面上展示。涉及Vue的代理配置、axios请求以及组件间数据传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在接触的项目是vue作为前端,Django作为后端的。二者之间的数据交互是二者连接起来的关键,这里以get为例,vue将后端拿到的数据进行展示。万事开头难,加油~

后端

数据库

这是数据库中的数据,我们从中以文章获得的stars为标准,选出star最多的五篇文章传到前端作为topArticle进行展示。(里面的数据随便造的,不要在意这些细节)
在这里插入图片描述

models.py

这是文章的model

# 文章
class Article(models.Model):
    # author_id = models.IntegerField(default=0)  # 创建者id
    # algorithm_id = models.IntegerField(default=0)  # 文章类型id
    content = models.TextField(max_length=32765)  # 发布文章内容
    title = models.CharField(max_length=100)  # 文章题目
    author = models.CharField(max_length=100)  # 默认为创建者
    date = models.DateTimeField(auto_created=True)  # 默认为创建的时间
    last_alter = models.DateTimeField(auto_created=True, default=timezone.now)  # 默认为最后一次提交修改
    algorithm = models.CharField(max_length=20)  # 文章类型
    stars = models.IntegerField(default=0)  # 被点赞次数
serializers.py

这是使用drf框架需要进行新创建的文件

class ArticleModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = '__all__'

    def create(self, validated_data):
        return Article.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.content = validated_data.get('content', instance.content)
        instance.title = validated_data.get('title', instance.title)
        instance.author = validated_data.get('author', instance.author)
        instance.date = validated_data.get('date', instance.date)
        instance.last_alter = validated_data.get('last_alter', instance.last_alter)
        instance.algorithm = validated_data.get('algorithm', instance.algorithm)
        instance.stars = validated_data.get('stars', instance.stars)
        # instance.author_id = validated_data.get('author_id', instance.author_id)
        # instance.algorithm_id = validated_data.get('algorithm_id', instance.algorithm_id)
        instance.save()
        return instance
views.py

这里为前端创建了接口,数据从数据库取出并进行处理。

class ArticleViewSet(ModelViewSet):
    parser_classes = [MultiPartParser, JSONParser, FormParser]
    """视图集"""
    queryset = models.Article.objects.all()
    serializer_class = ArticleModelSerializer
    # 搜索
    search_fields = ('id')

    @action(methods=['get'], detail=False)
    def topArticles(self, request, *args, **kwargs):
        obj = models.Article.objects.all().order_by('stars')[:5]
        if obj:
            ser = ArticleModelSerializer(instance=obj, many=True)
            return JsonResponse({
                'code': '200',
                'msg': '获取数据成功',
                'data': ser.data
            })
        else:
            return JsonResponse({
                'code': '1002',
                'msg': '获取失败',
            })
后端测试

因为是get操作,我们直接在浏览器中进行操作访问,数据可以拿到。
在这里插入图片描述

前端

前后端代理问题

这里不进行赘述,具体可以参考这篇文章----->传送门

vue.config.js

不同的版本,文件不同,在module.exports 中加入下面代码,即代理,Django的端口号默认为8000.

devServer: {
        proxy: {
            '/api': {
                target: 'http://localhost:8000',
                changeOrigin: true,
                ws: true,
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
    },

api 文件

这个文件是自己建立的,名字默认为api,在src文件夹下

data.js

用于书写与后端交互的函数

import request from "@/utils/request"

export function getTopArticle() {
    return request({
        url: 'article/topArticles/',
        method: 'get',
    })
}
前端页面

这里给出部分代码,因为涉及到其他地方。

<template>
<top-news class="news" :news="news"></top-news></template>

<script>
import TopArticles from "@/components/home/components/TopArticles";
import {getTopArticle} from "@/api/data";

export default {
  name: "HomeComponents",
  components: {TopCoders, TopArticles, ComingCompetitions, TopNews},
  data() {
    return {
    topArticle: []
    }
  },
  created() {
    this.getData();
  },
  methods: {
    getData() {
      getTopArticle().then(res => {
        this.topArticle = res.data;
      })
    }
  }
}
</script>
topArticles.vue
<template>
  <div>
    <sui-card style="width: 90%;left: 5%">
      <sui-card-content>
        <div class="coders" style="margin-left: 0;">
          <ai></ai>
          <span class="title" style="margin-left: 0;"><strong>TOP ARTICLES</strong></span></div>
        <div class="ui divider"></div>
        <sui-list>
          <sui-list-item v-for="(item, key) in topArticles">
            <div style="display: flex">
              <img src="https://himg.bdimg.com/sys/portraitn/item/72a1ced6ccd8b0accec4b6f94cdbed">
              <div style="justify-items: center">
                <span style="font-size: 18px">{{ item.title }}</span>
                <br>
                <span style="color:gray">Author:{{ item.author }}</span>
              </div>
            </div>
          </sui-list-item>
        </sui-list>
      </sui-card-content>

    </sui-card>
  </div>
</template>

<script>
export default {
  name: "topArticle",
  props: {
    topArticles: {
      // 指定类型
      Type: Array,
      required: true
    },
  },
}
</script>

<style scoped>

</style>

展示结果:

在这里插入图片描述

<think>好的,用户想了解如何在uni-app前端Django后端之间进行数据交互。首先,我需要回忆一下这两个技术栈的基本特点。uni-app是一个使用Vue.js开发多端应用的框架,而Django是一个Python后端框架,提供RESTful API支持。数据交互通常通过HTTP请求完成,比如GET、POST等。 接下来,我应该考虑如何设置Django后端。可能需要使用Django REST framework来创建API,这样uni-app前端就可以通过发送HTTP请求来获取或提交数据。要确保Django配置好CORS,因为前端后端可能运行在不同的端口或域名下,跨域问题需要解决。安装django-cors-headers中间件是个常见做法。 然后是uni-app前端的部分。用户需要使用uni.request方法发送请求到Django的API端点。需要处理请求的成功和失败情况,可能需要设置请求头,比如Content-Type为application/json。同时,用户可能需要处理身份验证,比如使用JWT,但基础示例可能先不涉及这个,保持简单。 接下来,我需要考虑具体的步骤。例如,创建一个Django模型,然后通过序列化器暴露为API,再设置URL路由。在uni-app中,编写一个发起请求的函数,并在页面加载时调用它。 另外,用户提到的引用内容中有一个隐私协议页面的例子,使用的是Vite打包的多入口页面。这可能提示用户对部署和构建流程比较熟悉,所以在教程中可能需要提到生产环境的配置,比如设置Django的ALLOWED_HOSTS和跨域白名单。 还需要检查是否有常见的错误点,比如Django的csrf验证,可能在API场景中需要禁用,或者使用适当的方法处理。此外,数据格式的匹配,比如确保前端发送的数据是JSON格式,后端正确解析。 最后,生成相关问题时要覆盖扩展内容,比如身份验证、文件上传、实时通信和HTTPS配置,这些都是实际项目中可能需要的进阶步骤。同时,确保引用正确,用户提供的引用是关于uni-app打包发布的,可能数据交互不直接相关,但可能在部署时需要考虑,所以相关问题可以提到部署配置。</think>### uni-app前端Django后端数据交互实现步骤 #### 一、Django后端搭建 1. **创建API接口** - 使用Django REST Framework构建RESTful API: ```python # serializers.py from rest_framework import serializers from .models import DataModel class DataSerializer(serializers.ModelSerializer): class Meta: model = DataModel fields = '__all__' # views.py from rest_framework import viewsets class DataViewSet(viewsets.ModelViewSet): queryset = DataModel.objects.all() serializer_class = DataSerializer ``` - 配置路由: ```python # urls.py from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register(r'data', DataViewSet) ``` 2. **跨域配置** ```bash pip install django-cors-headers ``` ```python # settings.py INSTALLED_APPS = ['corsheaders'] MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware'] CORS_ORIGIN_WHITELIST = ['http://localhost:8080'] # uni-app开发服务器地址 ``` #### 二、uni-app前端对接 1. **发送GET请求** ```javascript uni.request({ url: 'http://127.0.0.1:8000/api/data/', method: 'GET', success: (res) => { console.log('数据获取成功:', res.data) }, fail: (err) => { console.error('请求失败:', err) } }) ``` 2. **发送POST请求** ```javascript uni.request({ url: 'http://127.0.0.1:8000/api/data/', method: 'POST', header: {'Content-Type': 'application/json'}, data: { field1: 'value1', field2: 'value2' }, success: (res) => { console.log('数据提交成功:', res.data) } }) ``` #### 三、部署注意事项 1. 生产环境需配置HTTPS(参考隐私协议页面的部署方式)[^1] 2. 修改Django设置: ```python # settings.py ALLOWED_HOSTS = ['your-domain.com'] CORS_ORIGIN_WHITELIST = ['https://your-frontend-domain.com'] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值