当前位置:首页 > 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实现

项目基于vue实现

基于Vue实现项目的关键方法 搭建基础环境 安装Node.js和npm/yarn,确保开发环境具备运行Vue的能力。通过Vue CLI快速初始化项目结构,选择所需配置(如Babel、Router、Vu…

vue实现帖子

vue实现帖子

Vue 实现帖子功能 使用 Vue 实现帖子功能需要结合前端框架和后端数据交互,以下是实现的关键步骤和代码示例。 帖子列表展示 创建帖子列表组件,使用 v-for 渲染帖子数据,通过 axios 获…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…

vue 实现拖拉

vue 实现拖拉

Vue 实现拖拽功能的方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue scrolltop 实现

vue scrolltop 实现

实现 Vue 中的 scrollTop 在 Vue 中实现滚动到顶部功能可以通过多种方式完成,包括使用原生 JavaScript、Vue 指令或第三方库。以下是几种常见的实现方法: 使用原生 Jav…