当前位置:首页 > VUE

vue加django实现登录

2026-02-25 07:31:15VUE

Vue 与 Django 实现登录功能

技术栈分工

  • Django:提供 RESTful API 接口,处理用户认证(如 JWT 或 Session),数据库操作。
  • Vue:构建前端界面,发送登录请求,管理用户状态(如 Vuex 或 Pinia)。

Django 后端实现

安装必要依赖

pip install django djangorestframework django-cors-headers

配置 Django 项目

  1. 创建用户认证模型(Django 默认已提供 User 模型)。
  2. settings.py 中启用相关配置:
    
    INSTALLED_APPS = [
     ...,
     'rest_framework',
     'corsheaders',
    ]

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

CORS_ALLOWED_ORIGINS = [ "http://localhost:8080", # Vue 开发服务器地址 ]

REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', ], }


创建登录 API
在 `views.py` 中编写登录逻辑:
```python
from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth import authenticate, login

class LoginView(APIView):
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return Response({'status': 'success'})
        return Response({'status': 'error'}, status=400)

配置路由urls.py 中添加路由:

from django.urls import path
from .views import LoginView

urlpatterns = [
    path('api/login/', LoginView.as_view(), name='login'),
]

Vue 前端实现

安装必要依赖

npm install axios vuex

创建登录组件Login.vue 中实现表单和请求:

<template>
  <form @submit.prevent="handleLogin">
    <input v-model="username" placeholder="Username" />
    <input v-model="password" type="password" placeholder="Password" />
    <button type="submit">Login</button>
  </form>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: '',
    };
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('http://localhost:8000/api/login/', {
          username: this.username,
          password: this.password,
        });
        if (response.data.status === 'success') {
          this.$router.push('/dashboard');
        }
      } catch (error) {
        console.error('Login failed:', error);
      }
    },
  },
};
</script>

状态管理(可选) 使用 Vuex 存储用户登录状态:

// store.js
import { createStore } from 'vuex';

export default createStore({
  state: {
    isAuthenticated: false,
  },
  mutations: {
    setAuth(state, status) {
      state.isAuthenticated = status;
    },
  },
});

跨域问题解决

开发环境

  • Django 的 corsheaders 已配置允许 Vue 的源(见 CORS_ALLOWED_ORIGINS)。
  • 确保 Vue 的 axios 请求地址与 Django 服务端口一致。

生产环境

  • 部署时配置 Nginx/Apache 反向代理,将 API 请求转发到 Django。
  • 示例 Nginx 配置:
    location /api {
      proxy_pass http://django-server:8000;
    }

安全增强建议

  1. HTTPS:生产环境启用 HTTPS 加密通信。
  2. CSRF 保护:Django 默认启用 CSRF,Vue 需在请求中携带 CSRF Token:
    axios.defaults.xsrfCookieName = 'csrftoken';
    axios.defaults.xsrfHeaderName = 'X-CSRFToken';
  3. JWT 替代 Session:如需无状态认证,可使用 djangorestframework-simplejwt 库。

vue加django实现登录

标签: vuedjango
分享给朋友:

相关文章

vue实现多级弹窗

vue实现多级弹窗

Vue 多级弹窗实现方法 方法一:使用动态组件与递归组件 在 Vue 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例: &…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Reflec…

vue实现setinterval

vue实现setinterval

在 Vue 中使用 setInterval Vue 中可以通过生命周期钩子和方法结合 setInterval 实现定时任务。以下是一个完整的实现示例: <template> <…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 路由可以通过 Vue Router 库来实现,Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue Router 通…