Vue3+Django4全新技术实战全栈项目

247 阅读6分钟

Vue3+Django4全新技术实战全栈项目(完结)

 Vue3+Django4全新技术实战全栈项目

Vue 3 + Django 4 全新技术全栈项目

在现代全栈开发中,Vue 3 和 Django 4 是非常受欢迎的技术组合。Vue 3 以其高效的响应式系统和组件化开发模式受到前端开发者的青睐,而 Django 4 则以其强大的 ORM 和安全性受到后端开发者的喜爱。本文将详细介绍如何使用 Vue 3 和 Django 4 打造一个全新的全栈项目,涵盖从项目搭建到核心功能实现的全过程。

1. 项目概述

假设我们要开发一个简单的博客系统,该系统包含用户注册、登录、文章发布、文章列表展示、文章详情查看等功能。我们将使用 Vue 3 作为前端框架,Django 4 作为后端框架,并使用 Django REST framework 来构建 RESTful API。

2. 项目搭建
2.1 后端:Django 4
  1. 创建 Django 项目
  • 安装 Django:pip install django

  • 创建项目:django-admin startproject blog_project

  • 进入项目目录:cd blog_project

  1. 创建应用
  • 创建应用:python manage.py startapp blog_app
  1. 配置应用
  • blog_project/settings.py 中添加应用:

INSTALLED_APPS = [

...

'rest_framework',

'blog_app',

]

  1. 配置数据库
  • blog_project/settings.py 中配置数据库(默认使用 SQLite):

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': BASE_DIR / 'db.sqlite3',

}

}

  1. 创建模型
  • blog_app/models.py 中定义模型:

from django.contrib.auth.models import User

from django.db import models

class Post(models.Model):

title = models.CharField(max_length=200)

content = models.TextField()

author = models.ForeignKey(User, on_delete=models.CASCADE)

created_at = models.DateTimeField(auto_now_add=True)

updated_at = models.DateTimeField(auto_now=True)

def __str__(self):

return self.title

  1. 迁移数据库
  • 生成迁移文件:python manage.py makemigrations

  • 应用迁移:python manage.py migrate

  1. 创建序列化器
  • blog_app/serializers.py 中创建序列化器:

from rest_framework import serializers

from .models import Post

class PostSerializer(serializers.ModelSerializer):

class Meta:

model = Post

fields = ['id', 'title', 'content', 'author', 'created_at', 'updated_at']

  1. 创建视图
  • blog_app/views.py 中创建视图:

from rest_framework import viewsets

from .models import Post

from .serializers import PostSerializer

class PostViewSet(viewsets.ModelViewSet):

queryset = Post.objects.all()

serializer_class = PostSerializer

  1. 配置 URL
  • blog_app/urls.py 中配置 URL:

from django.urls import path, include

from rest_framework.routers import DefaultRouter

from .views import PostViewSet

router = DefaultRouter()

router.register(r'posts', PostViewSet)

urlpatterns = [

path('', include(router.urls)),

]

  • blog_project/urls.py 中包含应用的 URL:

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

path('admin/', admin.site.urls),

path('api/', include('blog_app.urls')),

]

  1. 运行开发服务器
  • 运行 Django 开发服务器:python manage.py runserver
2.2 前端:Vue 3
  1. 创建 Vue 3 项目
  • 安装 Vue CLI:npm install -g @vue/cli

  • 创建项目:vue create blog_frontend

  • 进入项目目录:cd blog_frontend

  1. 安装必要的依赖
  • 安装 Axios:npm install axios

  • 安装 Vuex:npm install vuex

  • 安装 Vue Router:npm install vue-router

  • 安装 Element Plus:npm install element-plus

  1. 配置项目
  • main.js 中导入并初始化 Vuex 和 Vue Router:

import { createApp } from 'vue';

import App from './App.vue';

import store from './store';

import router from './router';

import ElementPlus from 'element-plus';

import 'element-plus/lib/theme-chalk/index.css';

const app = createApp(App);

app.use(store);

app.use(router);

app.use(ElementPlus);

app.mount('#app');

  1. 创建组件
  • 创建 Login.vueRegister.vuePostList.vuePostDetail.vue 等组件。
  1. 配置路由
  • router/index.js 中配置路由:

import { createRouter, createWebHistory } from 'vue-router';

import Login from '../components/Login.vue';

import Register from '../components/Register.vue';

import PostList from '../components/PostList.vue';

import PostDetail from '../components/PostDetail.vue';

const routes = [

{ path: '/', component: PostList },

{ path: '/login', component: Login },

{ path: '/register', component: Register },

{ path: '/post/:id', component: PostDetail },

];

const router = createRouter({

history: createWebHistory(),

routes,

});

export default router;

  1. 状态管理
  • store/index.js 中配置 Vuex:

import { createStore } from 'vuex';

export default createStore({

state: {

user: null,

posts: [],

},

mutations: {

setUser(state, user) {

state.user = user;

},

setPosts(state, posts) {

state.posts = posts;

},

},

actions: {

async fetchPosts({ commit }) {

const response = await axios.get('http://127.0.0.1:8000/api/posts/');

commit('setPosts', response.data);

},

},

getters: {

getUser: state => state.user,

getPosts: state => state.posts,

},

});

  1. API 调用
  • 在组件中使用 Axios 发送 HTTP 请求,与后端进行数据交互。
  1. 运行开发服务器
  • 运行 Vue 开发服务器:npm run serve
3. 核心功能实现
3.1 用户管理
  • 注册

  • 前端:在 Register.vue 中实现表单提交,发送 POST 请求到后端。

  • 后端:在 blog_app/views.py 中处理注册请求,保存用户信息。

  • 登录

  • 前端:在 Login.vue 中实现表单提交,发送 POST 请求到后端。

  • 后端:在 blog_app/views.py 中处理登录请求,验证用户信息,返回 JWT 令牌。

  • 权限管理

  • 使用 Django REST framework 的权限类(如 IsAuthenticated)来保护 API 端点。

3.2 文章管理
  • 文章列表

  • 前端:在 PostList.vue 中调用 Vuex 的 fetchPosts 动作,获取文章列表。

  • 后端:在 PostViewSet 中处理 GET 请求,返回文章列表。

  • 文章详情

  • 前端:在 PostDetail.vue 中根据文章 ID 获取文章详情。

  • 后端:在 PostViewSet 中处理 GET 请求,返回指定文章的详细信息。

  • 文章发布

  • 前端:在 PostForm.vue 中实现表单提交,发送 POST 请求到后端。

  • 后端:在 PostViewSet 中处理 POST 请求,保存文章信息。

  • 文章编辑

  • 前端:在 PostForm.vue 中实现表单提交,发送 PUT 请求到后端。

  • 后端:在 PostViewSet 中处理 PUT 请求,更新文章信息。

  • 文章删除

  • 前端:在 PostList.vue 中实现删除按钮,发送 DELETE 请求到后端。

  • 后端:在 PostViewSet 中处理 DELETE 请求,删除文章。

4. 安全性与性能优化
4.1 安全性
  • 认证与授权

  • 使用 Django REST framework 的 TokenAuthenticationJWTAuthentication 进行用户认证。

  • 使用 IsAuthenticated 权限类保护 API 端点。

  • 数据加密

  • 使用 Django 的 User 模型和 bcrypt 加密用户密码。

  • 防止 CSRF 攻击

  • 在 Vue 项目中使用 axioswithCredentials 选项,确保 CSRF 令牌的传递。

4.2 性能优化
  • 缓存

  • 使用 Django 的缓存框架(如 LocMemCacheRedis)缓存频繁访问的数据。

  • 在前端使用 Vuex 的 state 缓存数据,减少不必要的 API 请求。

  • 异步处理

  • 使用 Django 的 async 支持,实现异步任务处理。

  • 在前端使用 asyncawait 处理异步请求。

  • 负载均衡

  • 使用 Nginx 进行负载均衡,提高系统的可用性和性能。

  • 数据库优化

  • 使用索引优化查询性能。

  • 使用分页查询减少数据传输量。

5. 部署与运维
5.1 容器化
  • Docker

  • 使用 Docker 容器化应用,编写 Dockerfiledocker-compose.yml 文件,实现一键部署。

  • 为后端和前端分别创建 Docker 镜像。

5.2 持续集成/持续部署(CI/CD)
  • Jenkins

  • 使用 Jenkins 实现自动化构建、测试和部署。

  • 配置 Jenkins 任务,自动拉取代码、构建镜像并部署到生产环境。

  • GitLab CI/CD

  • 使用 GitLab CI/CD 进行持续集成和持续部署。

  • 配置 .gitlab-ci.yml 文件,定义构建和部署流程。

5.3 监控与日志
  • PrometheusGrafana

  • 使用 Prometheus 和 Grafana 进行应用监控。

  • 配置监控指标,实时监控系统性能和健康状况。

  • ELKLoki

  • 使用 ELK(Elasticsearch, Logstash, Kibana)或 Loki 进行日志管理。

  • 配置日志收集和分析,帮助排查问题和优化系统。

总结

通过以上步骤,你可以使用 Vue 3 和 Django 4 打造一个高效、可靠的全栈项目。这个项目不仅具备强大的功能,还能确保安全性和性能。希望本文对你有所帮助,如果你有任何问题或建议,欢迎留言交流!