当前位置:首页 > VUE

django vue 实现登录

2026-01-18 17:46:58VUE

Django 和 Vue 实现登录功能

后端 (Django) 配置

安装 Django 和必要的包:

pip install django djangorestframework django-cors-headers

创建 Django 项目和应用:

django-admin startproject backend
cd backend
python manage.py startapp accounts

配置 settings.py

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

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

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

创建用户模型和序列化器(accounts/models.pyaccounts/serializers.py):

# models.py
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass
# serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model

User = get_user_model()

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email')

配置认证视图(accounts/views.py):

django vue 实现登录

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
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({'message': 'Login successful'}, status=status.HTTP_200_OK)
        return Response({'message': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)

配置 URL(backend/urls.py):

from django.contrib import admin
from django.urls import path
from accounts.views import LoginView

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

前端 (Vue) 配置

创建 Vue 项目:

vue create frontend
cd frontend
npm install axios vue-router

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

django vue 实现登录

<template>
  <div>
    <h2>Login</h2>
    <form @submit.prevent="handleSubmit">
      <input v-model="username" type="text" placeholder="Username" required>
      <input v-model="password" type="password" placeholder="Password" required>
      <button type="submit">Login</button>
    </form>
    <p v-if="error">{{ error }}</p>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      username: '',
      password: '',
      error: ''
    };
  },
  methods: {
    async handleSubmit() {
      try {
        const response = await axios.post('http://localhost:8000/api/login/', {
          username: this.username,
          password: this.password
        });
        console.log(response.data);
        // 处理登录成功后的逻辑,如跳转页面
      } catch (err) {
        this.error = 'Login failed. Please check your credentials.';
      }
    }
  }
};
</script>

配置路由(src/router/index.js):

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

Vue.use(Router);

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

运行项目

启动 Django 后端:

python manage.py migrate
python manage.py runserver

启动 Vue 前端:

npm run serve

访问 http://localhost:8080/login 测试登录功能。

标签: djangovue
分享给朋友:

相关文章

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现双击

vue实现双击

Vue 实现双击事件的方法 在Vue中实现双击事件可以通过以下几种方式完成,具体选择取决于项目需求和开发习惯。 使用 @dblclick 指令 Vue提供了内置的@dblclick指令,可以…

vue实现settimeout

vue实现settimeout

在 Vue 中实现 setTimeout Vue 中可以通过 JavaScript 原生的 setTimeout 方法实现延时操作,但需要注意结合 Vue 的响应式特性和生命周期管理。以下是几种常见实…

vue计算属性 实现

vue计算属性 实现

Vue 计算属性的实现 计算属性(Computed Properties)是 Vue 中的一个核心功能,用于声明式地定义依赖其他属性的值。计算属性会缓存结果,只有当依赖的响应式数据发生变化时才会重新计…