vue2-django 实现登录注册

目录

前端vue:

后端django处理请求


前端vue:

cd到目标文件夹,输入:vue init webpack 文件名

 前四个一路回车,后几个选no

接着cd到建好的文件夹,执行npm install ,然后就可以npm run dev 查看初始页面了

 接下来我们通过vue组件来搭建一个前端页面

首先把默认样式清除,删除helloword.vue后将app.vue清除成如下内容。

 然后在components文件夹中新建vue文件,写入我们需要的内容

我构建了三个文件,分别用来登录、注册、登录成功后显示

 我们要做的是注册与登录功能,那么我们需要账号与密码

我们先做注册功能,也就是进入signup.vue中

因此我们在data里构建一个对象loginForm存储输入的账号与密码

data(){
            return{
                loginForm:{
                username:'',
                password:''  
            }
            }  
        },

data写在<script>中,如

而后构建一个form表单,输入框绑定username与password

<template>
    <div id="sign">
        <div style="text-align: center; font-family: 华文琥珀; font-size: larger;">
        <div>欢迎注册</div>
        <div>请输入您的信息</div>
        </div>
        <div style="height: 50px;"></div>
        <div>
      <form v-bind:model="loginForm">
        <input v-model="loginForm.username" type="text" placeholder="请输入用户名"/>
        <input v-model="loginForm.password" type="password" placeholder="请输入密码"/>
    </form>
    <button v-on:click="summiti()">注册</button>
    </div>
    </div>
</template>

写好之后,我们要怎么查看写出来的页面是什么样子呢?

这需要用到vue-router

在项目的根目录的终端执行npm install --legacy-peer-deps vue-router@3.5.2

然后在如图位置新建一个routers文件夹,其中新建一个index.js文件

其中写入

然后在main.js中引入

 最后在app.vue中如图位置加一句<router-view/>

 我们就可以在终端中输入npm run dev,在浏览器中输入指定地址,就可以看到页面了(ctrl+c 停止服务器)

这篇文章主要讲解登录与注册的实现,美观度可以自己调节

 前端的最后一步就是对用户名和密码的提交了,我们需要用到axios对请求进行处理

首先安装:npm install axios 

然后在main.js中引入

import axios from 'axios'

axios.defaults.withCredentials = true// 请求携带cookie
axios.defaults.headers.post['X-CSRFToken']='';//设置请求头的跨域密匙

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

axios.defaults.transformRequest = [function (data) {  //将发送的post参数封装成FROM-DATA,使后端接收
  let ret = ''
  for (let it in data) {
  ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
  }
  return ret
  }];

Vue.prototype.$axios = axios

插入到如图位置

 接下来就在signup.vue中编写提交函数

methods:{
            summiti(){
                this.$axios
              .post(
                '/regester/', //后端执行注册的url
                {'user':this.loginForm.username, //用户名
                'password':this.loginForm.password, //密码
            }
              ).then((res)=>{
                alert("注册成功")
                this.$router.push({  //前往登录界面
                    path: './',
                    });
              }).catch((err)=>{
                alert("注册失败,请更换用户名")
              })
            }
        }

写在如图位置

后端django处理请求

首先,下载django :pip3 install django

然后,cd到一个心仪的文件夹,创建django项目:django-admin startproject djan (djan是项目名称,可以换成一个心仪的名字)

系统就为我们创建了一个框架

 接着,cd到第一个djan文件夹,创建APP : python manage.py startapp eapp(eapp是app名称),然后可以看到系统又为我们创建了一个文件夹

我们可以开始写后端程序了

为了保存注册了的用户,我们需要连接数据库

我们首先需要引入app,不然数据库不知道为什么样的对象建表

在setting.py的INSTALLED_APPS中引入app

然后在setting的DATABASES中配置数据库

 之后进入eapp的models.py文件,写入

class User(models.Model):
    object = models.Manager()
    name = models.CharField(max_length=15, unique=True)
    password = models.CharField(max_length=20)

 name为用户名,password为密码,系统构造的数据库的结构将依赖这个User对象

在django项目的根目录下输入命令python manage.py makemigrations

这会在eapp目录中的migrations目录中生成一个0001_initial.py迁移记录文件

然后还是根目录中输入python manage.py migrate

系统将为我们建表(下图是通过navicat查看建好的表)

 数据库连接完成

进入eapp中的view.py文件夹 ,我们接下来构建响应路径,将内容改为

from django.shortcuts import render
from eapp.models import User
from django.http import JsonResponse
# Create your views here.

def regester(request):
    user = request.POST.get("user")
    password = request.POST.get("password")
    userinfo = User(name=user,password=password)
    userinfo.save() #保存至数据库
    return JsonResponse({'codestatus':1},safe=False) 

若在import处报错,则使用pycharm右键根目录,如图调整为源代码根目录

再将view导入url,进入url.py中

 那么注册路径就写好了。

到目前,我们为注册的执行部署了接口,但对注册的网页还没部署接口

因此我们接下来对网页的显示进行部署,但一个网站最开始一般是登录而不是注册,因此我打算以登录界面为基页面

先写好登录页面的vue文件

<template>
    <div id="login">
    <div style="text-align: center; font-size: larger;">
        <div>欢迎光临</div>
        <div>请输入您的账户</div>
    </div>
    <div>
      <form action="/index/" method="post">
        <input v-model="loginfo.username" type="text" placeholder="请输入用户名">
        <input v-model="loginfo.password" type="password" placeholder="请输入密码">
    </form>
        <input v-on:click="login()" value="登录" />
        <div style="height: 5px;"></div>
        <div>
          <div style="height: 9px;"></div>
          <a href="/#/signup" style="color:black ;text-decoration:none">注册</a>
        </div>
    </div>
</div>
</template>

<script>

export default {
    name:'login',
    data(){
            return {loginfo:{
                'username':'',
                'password':''
            }}
        },
        methods:{
            login(){
                this.$axios
              .post(
                '/loginn/',//向loginn发送请求,验证密码是否正确
                {'user':this.loginfo.username,
                'password':this.loginfo.password,
            }
              ).then(res=>{
                if(res.data.loginstatus==1) //loginstatus为后端返回的数据,
                {   
                    this.$router.push({ //页面跳转到登录成功界面
                        path: '/welcome',
                        params:{'username':this.loginfo.username}
                        });}
                else{
                    alert('账号或密码错误')
                }
              })
            }
        }
    
}
</script>

<style>

</style>

部署route

 npm run dev查看

 点击注册跳转到signup页面运行成功

在vue根目录终端输入npm run build,可以观察到多了一个dist文件夹

接下来来到django根目录,将整个vue项目的文件夹放入django根目录下

目录排列如图

 然后进入setting.py中首先

import os.path

然后更改其TEMPLATES

 而后在末尾更改(若不存在则引入)

STATIC_URL = '/static/'
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'myvue/dist/static')
]

进入urls.py,添加这两句,引入dist文件中的index.html,并将其设置为首页

 到这一步可以调试注册功能了,但顺便先把登录功能实现

在urls.py中添加一登陆路径,每一个路径都必须与前端发送请求的url对应

path('loginn/',views.loginn),

然后进入views.py中实现登录功能

from eapp import models

然后

def loginn(request):
        username = request.POST.get('user')
        password = request.POST.get('password')
        if username and password:
            try:
                user = models.User.object.get(name=username)
            except:
                return JsonResponse({'loginstatus':2},safe=False) #未注册返回2
            if user.password == password:
                return JsonResponse({'loginstatus':1},safe=False) #登录成功返回1
        return JsonResponse({'loginstatus':3},safe=False)   #密码错误返回3

就放在import的后面

 

一切就ok了

接下来我们调试,看看结果

django根目录输入 python manage.py runserver 127.0.0.1:8000

然后进入  http://127.0.0.1:8000/

成功进入页面

但当我们点击登录时,会发现浏览器报错,显示CSRF token missing

这是因为django会检测请求头cookies中的csrftoken与请求头的X-CSRFToken,若二者一致则通过请求,二者不同则拒绝请求,因此我们需要设置我们的请求头

此方法并不好,新方法已在文尾更新

进入浏览器的开发者模式,切换到network,再点击一下页面的登录,就会出现一个东西,我们查看一下他的Headers里的Request Headers,复制其cookie中csrftoken的值

 再来到vue项目的main.js,将值填入X-CSRFToken后的双引号中

 保存之后,重新再vue项目的根目录下执行npm run build,就完成了

回到浏览器页面,刷新

 随便输入账号与密码,发现不会报错了,我们查看后端返回返回结果

 正如所设置的,返回结果是2,没有错误,

点击注册来到注册页

页面显示注册成功,我们看看数据库是否有记录

 确实有记录,接着回到登录页试试看登录

status为1并且如同login.vue中定义的函数,跳转到了welcom页面。

完成! 

更新

在处理跨域问题时我们处理的比较草率,只是获取了自己的一个cookie,属于是面向调试编程,经过不断的搜索,我找到了一个更好的办法

思路是发送一个get请求从后端获取csrftoken的值,而后把这个值设置为请求头,以下为步骤

1.在django项目的urls中新增一条路径

path('getcsrf/',views.getcsrf),

2.在views文件中构建这条路径

from django.http import JsonResponse, HttpResponse
from django.middleware.csrf import get_token

def getcsrf(request):
     return JsonResponse({'csrftoken': get_token(request) or 'NOTPROVIDED'})
//get_token(request) 的返回值即为csrftoken

3.来到vue项目的main.js

//在import axios后添加
axios.defaults.withCredentials = true// 允许请求携带cookie

4.修改vue文件中的函数,以我的login.vue为例,将原来的axios请求套在一个向新地址提交的axios请求中

login(){
                this.$axios.get('/getcsrf/').then(res=>{
                var csrftoken=res.data.csrftoken
                this.$axios.post(
                '/loginn/', //向loginn发送请求,验证密码是否正确
                {'user':this.loginfo.username,
                'password':this.loginfo.password,
            },{
              headers:{
                'X-CSRFToken':csrftoken
              }
            }
              ).then(res=>{
                if(res.data.loginstatus==1) //loginstatus为后端返回的数据,
                {   
                    this.$router.push({ //页面跳转到登录成功界面
                        path: '/welcome',
                        params:{'username':this.loginfo.username}
                        });}
                else{
                    alert('账号或密码错误')
                }
              })})
            }

然后重新npm run build,就完成了。

  • 27
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: 将 Vue-element-admin 与 Django 后台对接需要进行以下步骤: 1. 编写 Django 后台 API 接口,提供数据交互服务; 2. 在 Vue-element-admin 中安装 Axios,用于向后台发送请求; 3. 在 Vue-element-admin 中编写与后台 API 对接的代码; 4. 在 Vue-element-admin 中使用前端路由(vue-router)跳转到对应页面。 具体操作步骤如下: 1. 编写 Django 后台 API 接口 在 Django 中编写后台 API 接口,提供数据交互服务。可以使用 Django REST framework 来快速构建 RESTful API。 2. 安装 Axios 在 Vue-element-admin 中安装 Axios,可以使用以下命令: ``` npm install axios ``` 3. 编写与后台 API 对接的代码 在 Vue-element-admin 中编写与后台 API 对接的代码,可以使用 Axios 发送请求,例如: ``` import axios from 'axios' export default { // 获取用户列表 getUsers() { return axios.get('/api/user/') }, // 创建用户 createUser(user) { return axios.post('/api/user/', user) }, // 删除用户 deleteUser(id) { return axios.delete(`/api/user/${id}/`) } } ``` 4. 使用前端路由跳转到对应页面 在 Vue-element-admin 中使用前端路由(vue-router)跳转到对应页面,例如: ``` import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Dashboard', component: () => import('@/views/dashboard/index') }, { path: '/user', name: 'User', component: () => import('@/views/user/index') }, { path: '/user/create', name: 'CreateUser', component: () => import('@/views/user/create') }, { path: '/user/:id/edit', name: 'EditUser', component: () => import('@/views/user/edit') } ] }) ``` 以上就是将 Vue-element-admin 与 Django 后台对接的基本步骤,具体实现还需要根据具体需求进行调整。 ### 回答2: Vue-element-admin是一个基于Vue.js和Element UI开发的后台管理系统框架,而Django是一个基于Python的Web开发框架。对接Vue-element-admin和Django后台,需要以下几个步骤: 1. 了解Vue-element-admin的架构和功能:首先需要熟悉Vue-element-admin的组件和页面结构,了解其提供的基本功能和接口。 2. 安装Django并配置数据库:在Django中创建一个新的项目,并配置好数据库信息,确保Django与数据库的连接正常。 3. 创建Django的URL和路由:根据Vue-element-admin的路由规则,在Django中创建对应的URL和路由,用于响应前端请求。 4. 编写Django的视图函数:编写Django的视图函数,处理前端请求并返回相应的数据。可以根据需要,操作数据库、调用其他后台服务等。 5. 前后端数据交互:根据Vue-element-admin的接口规范,与Django进行数据交互。可以使用axios库发送请求,同时使用Django的序列化器将数据转化为JSON格式返回给前端。 6. 数据权限控制:在Vue-element-admin中,可以根据用户权限动态显示菜单和路由。可以在Django实现相应的权限控制逻辑,根据用户角色或权限限制相应的数据访问。 7. 进行前后端联调和测试:在前后端对接完成后,通过联调和测试确保系统的正常运行。可以使用开发者工具进行调试,在两端之间传递数据并检查返回结果。 总结起来,对接Vue-element-admin和Django后台,需要根据Vue-element-admin的组件和路由规则,在Django中进行相应的配置和编码,实现前后端的数据交互和权限控制。通过以上步骤,可以构建一个完整的Vue-element-admin后台管理系统,使用Django作为后台支持。 ### 回答3: vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统模板。而 Django 是一个使用 Python 编写的高级 Web 开发框架。 对接 vue-element-admin 和 Django 后台的过程中,需要进行以下几个步骤: 1. 安装和配置 vue-element-admin 和 Django 工程。 - 首先,在本地搭建好 Django 工程,确保能够正常运行。 - 然后,在 vue-element-admin 的基础上建立 Vue.js 工程,配置好相关依赖。 - 将 Djangovue-element-admin 的工程整合在一起,确保两者可以同时运行。 2. 定义接口和数据交互方式。 - 在 Django 的工程中,根据需求定义后台接口,用于前后台数据的交互。 - 在 vue-element-admin 的工程中,使用 axios 等ajax库,通过 HTTP 请求与 Django 后台进行数据交互。 3. 配置路由和权限控制。 - 在 Django 的工程中,配置好路由,将前端请求映射到对应的后端视图函数。 - 在 vue-element-admin 的工程中,配置好前端路由,确保前端页面可以正确访问,并实现权限控制策略。 4. 前后台数据的处理和展示。 - 在 vue-element-admin 的工程中,通过获取 Django 后台的数据,对数据进行处理和展示。 - 可以使用 vue.js 的组件化开发思想,将数据展示和页面交互的逻辑进行拆分和重复利用。 通过以上步骤的对接,vue-element-admin 和 Django 后台可以实现前后台的数据交互、权限控制和页面展示。以此来构建一个完整的后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值