vue3+django中的类视图 1、完成前端新闻列表展示(任意位置展示:添加新闻 按钮) 2、点击添加按钮,跳转添加新闻页面,实现添加功能 3、添加新闻,需要添加新闻图片,完成图片与数据一起上传 4、新闻列表可以正常展示图片
时间: 2024-10-10 13:08:45 浏览: 41
在Vue3和Django项目中,结合使用类视图(Class-Based Views in Django)和Vue.js进行前端开发可以提供高效的组件化和交互体验。以下是针对您提到的需求的步骤说明:
1. **创建类视图(Class-based View)**: 在Django后端,你可以创建一个基于`CreateView`的视图,用于处理添加新闻的功能。例如,定义一个名为`NewsCreateView`的类,继承自`CreateView`,并重写`form_valid`方法处理表单提交。
```python
from django.views.generic.edit import CreateView
from .models import News
from .forms import NewsForm
class NewsCreateView(CreateView):
model = News
form_class = NewsForm
template_name = 'news/add_news.html'
success_url = '/news/'
```
这里假设已经有了`News`模型和对应的`NewsForm`。
2. **新闻列表展示**:在Django模板`news_list.html`中,通过查询集渲染新闻列表,同时显示图片字段。在`news/add_news.html`中也类似,只是会有一个“添加新闻”按钮。
3. **图片上传**:在`NewsForm`中,可以将图片字段添加到表单里,并使用如`django-storages`这样的库处理文件上传。记得设置`model.ImageField`字段的上传路径。
4. **前端交互**:在Vue组件中,利用axios或fetch发送AJAX请求到Django的API(比如`/api/news/create/`),并将用户输入的数据和图片一起发送。当接收到服务器返回的状态码和新数据时,在前端更新列表。
```javascript
<template>
<!-- ... -->
<button @click="handleAddNews">添加新闻</button>
<!-- 图片预览区域 -->
</template>
<script>
export default {
methods: {
handleAddNews() {
axios.post('/api/news/create/', { newsData, imageUrl }).then(response => {
// 更新列表数据
this.newsList.push(response.data);
});
}
},
data() {
return {
newsList: [],
imageUrl: ''
};
}
};
</script>
```
阅读全文