当前位置:首页 > VUE

django vue实现

2026-02-10 01:13:13VUE

Django 与 Vue.js 集成实现

后端配置 (Django)

在 Django 项目中创建 API 接口,使用 Django REST framework 提供数据支持。安装依赖:

pip install djangorestframework django-cors-headers

配置 settings.py

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

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    ...
]

CORS_ORIGIN_ALLOW_ALL = True  # 开发时允许所有跨域请求

创建序列化器和视图:

# serializers.py
from rest_framework import serializers
from .models import YourModel

class YourModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = YourModel
        fields = '__all__'

# views.py
from rest_framework import viewsets
from .models import YourModel
from .serializers import YourModelSerializer

class YourModelViewSet(viewsets.ModelViewSet):
    queryset = YourModel.objects.all()
    serializer_class = YourModelSerializer

配置路由:

# urls.py
from rest_framework.routers import DefaultRouter
from .views import YourModelViewSet

router = DefaultRouter()
router.register(r'api/yourmodel', YourModelViewSet)

urlpatterns = [
    ...
] + router.urls

前端配置 (Vue.js)

初始化 Vue 项目:

vue create frontend
cd frontend
npm install axios vue-router

配置 API 调用:

// src/api.js
import axios from 'axios'

const api = axios.create({
    baseURL: 'http://localhost:8000',  // Django 开发服务器地址
    timeout: 5000
})

export default {
    getData() {
        return api.get('/api/yourmodel/')
    },
    postData(data) {
        return api.post('/api/yourmodel/', data)
    }
}

创建 Vue 组件:

<!-- src/components/DataList.vue -->
<template>
    <div>
        <ul>
            <li v-for="item in items" :key="item.id">
                {{ item.name }}
            </li>
        </ul>
    </div>
</template>

<script>
import api from '../api'

export default {
    data() {
        return {
            items: []
        }
    },
    async created() {
        try {
            const response = await api.getData()
            this.items = response.data
        } catch (error) {
            console.error(error)
        }
    }
}
</script>

部署方案

开发模式分离部署

  • Django 运行在 http://localhost:8000
  • Vue 运行在 http://localhost:8080
  • 通过 CORS 处理跨域请求

生产环境整合部署

  1. 构建 Vue 项目:
    npm run build
  2. dist 目录内容复制到 Django 的静态文件目录
  3. 配置 Django 的 urls.py
    
    from django.views.generic import TemplateView

urlpatterns = [ ... path('', TemplateView.as_view(template_name='index.html')), ]


#### 高级集成方案

使用 `django-webpack-loader` 实现热重载:
1. 安装依赖:
```bash
pip install django-webpack-loader
npm install webpack-bundle-tracker --save-dev
  1. 配置 webpack.config.js
    
    const BundleTracker = require('webpack-bundle-tracker')

module.exports = { output: { publicPath: 'http://localhost:8080/', path: path.resolve('./frontend/dist/'), }, plugins: [ new BundleTracker({filename: './webpack-stats.json'}) ] }

django vue实现


3. Django 配置:
```python
# settings.py
WEBPACK_LOADER = {
    'DEFAULT': {
        'BUNDLE_DIR_NAME': 'bundles/',
        'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats.json'),
    }
}

标签: djangovue
分享给朋友:

相关文章

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用i…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动渲…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <div…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue computed实现

vue computed实现

计算属性的基本用法 在Vue中,计算属性通过computed选项定义,用于声明依赖于其他属性的动态值。计算属性基于它们的依赖进行缓存,只有依赖发生变化时才会重新计算。 new Vue({ dat…