当前位置:首页 > VUE

django vue实现登录

2026-02-20 08:18:12VUE

Django 与 Vue 实现登录功能

后端 Django 配置

创建 Django 项目并安装必要依赖:

pip install django djangorestframework django-cors-headers

配置 settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'corsheaders',
]

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

CORS_ORIGIN_ALLOW_ALL = True  # 开发时允许所有跨域请求

创建用户认证视图(views.py):

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()),
]

前端 Vue 实现

安装 Vue 和相关依赖:

npm install vue axios vue-router

创建登录组件(Login.vue):

<template>
  <div>
    <input v-model="username" placeholder="Username">
    <input v-model="password" type="password" placeholder="Password">
    <button @click="handleLogin">Login</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    handleLogin() {
      axios.post('http://localhost:8000/api/login/', {
        username: this.username,
        password: this.password
      }).then(response => {
        if (response.data.status === 'success') {
          this.$router.push('/dashboard')
        }
      })
    }
  }
}
</script>

配置路由(router.js):

import Vue from 'vue'
import Router from 'vue-router'
import Login from './components/Login'

Vue.use(Router)

export default new Router({
  routes: [
    { path: '/login', component: Login }
  ]
})

前后端联调

启动 Django 开发服务器:

python manage.py runserver

启动 Vue 开发服务器:

npm run serve

确保 Django 的 CORS_ORIGIN_ALLOW_ALL 设置为 True,以便 Vue 应用可以访问 Django 后端接口。

安全性增强

生产环境中应添加以下安全措施:

  • 使用 HTTPS
  • 配置更严格的 CORS 策略
  • 添加 CSRF 保护
  • 实现 JWT 认证替代 session

常见问题解决

跨域问题:确保 django-cors-headers 已正确安装和配置。

认证失败:检查 Django 用户模型中是否存在对应的用户,并确认密码正确。

路由问题:确保 Vue 路由和 Django URL 配置没有冲突。

django vue实现登录

标签: djangovue
分享给朋友:

相关文章

vue 页签实现

vue 页签实现

Vue 页签实现方法 在 Vue 中实现页签功能通常涉及动态组件、路由或状态管理。以下是几种常见的实现方式: 使用动态组件 通过 Vue 的 <component> 动态组件结合 v-…

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue…

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项目…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。 基…