当前位置:首页 > 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 开发服务器地址 ]

vue加django实现登录

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 前端实现

安装必要依赖

vue加django实现登录

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 库。

标签: vuedjango
分享给朋友:

相关文章

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安装…

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…

vue分页实现

vue分页实现

实现Vue分页的几种方法 使用Element UI的分页组件 安装Element UI库后,可以直接使用其分页组件。以下是一个基本示例: <template> <div>…

vue如何实现mvvm

vue如何实现mvvm

Vue 实现 MVVM 的核心机制 Vue 的 MVVM(Model-View-ViewModel)实现依赖于数据绑定和响应式系统,通过以下核心机制完成: 数据劫持(响应式系统) Vue 使用 Ob…