Vue 项目 Vue + restfulframework

实现登录认证

- django

views

class MyResponse():
def __init__(self):
self.status = 100
self.msg = None @property
def get_dic(self):
return self.__dict__ #token
def get_token(username):
import hashlib
import time
md = hashlib.md5()
# update内必须传bytes格式
md.update(username.encode('utf-8'))
md.update(str(time.time()).encode('utf-8'))
return md.hexdigest()
#认证
class Login(APIView):
authentication_classes = []
def post(self, request):
response = MyResponse()
name = request.data.get('username')
pwd = request.data.get('password')
user = models.User.objects.filter(username=name, password=pwd).first()
print(name,pwd)
name1 =request.GET.get('username')
print(name1)
if user:
response.msg = '登陆成功'
response.username = name
# 登陆成功,返回一个随机字符串,以后在发请求,都携带这个字符串
token = get_token(name)
response.token = token
# 把随机字符串保存到数据库,有就更新,没有就创建
# ret=models.UserToken.objects.update_or_create(user_id=user.id,kwargs={'token':token})
ret = models.UserToken.objects.update_or_create(user=user, defaults={'token': token}) else:
response.msg = '用户名或密码错误'
response.status = 101
obj = JsonResponse(response.get_dic)
obj['Access-Control-Allow-Origin']='*'
return obj #解决跨域问题 中间件
from django.utils.deprecation import MiddlewareMixin class CorsMiddleWare(MiddlewareMixin):
def process_response(self,request,response):
if request.method=="OPTIONS":
print(111)
#不能加*
response["Access-Control-Allow-Headers"]="*"
response["Access-Control-Allow-Origin"] = "*"
response['Access-Control-Allow-Methods'] = 'POST'
return response

setting

把中间件添加到setting的配置中
注释csrftoken认证
MIDDLEWARE = [
'app01.views.CorsMiddleWare',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', ]

urls

urlpatterns = [
re_path('login/', views.Login.as_view()),
]

- Vue

安装包

cnpm install --save axios vuex

npm install vue-cookie --save

route.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import Index from '../src/components/index.vue'
// import Login from '../src/components/Login.vue' Vue.use(Router); export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/index',
name: 'Index',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
// 两种都可以,要不上面导入进来,或者直接定vue组件的路径
// component: () => import(/* webpackChunkName: "about" */ '../src/components/index.vue')
component:Index
},
{
path: '/login',
name: 'Login',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '../src/components/Login.vue')
}
]
})

store.js

import Vue from 'vue'
import Vuex from 'vuex'
import Cookie from 'vue-cookies' Vue.use(Vuex); export default new Vuex.Store({
state: {
username:Cookie.get('username'),
token:Cookie.get('token')
// Cookie.get('username') Cookie.get('token')
},
mutations: {
//组件中通过this.$store.commit(参数)调用
saveToken (state,data) {
state.username = data.username;
state.token = data.token;
Cookie.set('username',data.username,'1min');
Cookie.set('token',data.token,'1min')
},
//清空token和cookie
clearToken (state) {
state.username = null;
state.token = null;
Cookie.remove('username');
Cookie.remove('token')
} },
actions: { }
})

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import Axios from 'axios'
import VueCookie from 'vue-cookies'
// import 'bootstrap/dist/css/bootstrap.css'
Vue.prototype.$axios = Axios;
Vue.prototype.$Cookies = VueCookie; Vue.config.productionTip = false; new Vue({
router,
store,
render: h => h(App)
}).$mount('#app');

App.vue

<template>
<div>
<!--首页里面永远都是固定的东西--> <nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">
<img alt="Brand">
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li>
<router-link to="/index">首页</router-link>
</li>
<li>
<router-link to="/micro">学位课</router-link>
</li>
<li>
<router-link to="/course">课程</router-link>
</li>
<li>
<router-link to="/news">深科技</router-link>
</li>
<li v-if=this.$store.state.username>
<span>欢迎 {{ this.$store.state.username }} 登录
<a @click="logout">注销</a>
</span>
</li>
<li v-else="">
<router-link to="/login">登录</router-link>
</li>
<!--{{ this.$store.state.username }}-->
</ul>
</div>
</div>
</nav>
<router-view></router-view> </div>
</template>
<script>
export default {
name: 'App',
methods: {
logout() {
this.$store.state.username = '';
this.$store.state.token = ''
}
}
}
</script>
<style> </style>

components --> Login.vue

<template>
<div class="container ">
<h2 class="modal-title">登录页面</h2>
<p></p>
<p></p>
<p></p>
<div class="form-group " >
<label for="1111" >
用户名
</label>
<input type="text" class="form-control " v-model="username" placeholder="username" id="1111">
</div>
<div class="form-group ">
<label for="">
密码
</label>
<input type="text" class="form-control " placeholder="password" v-model="password">
</div>
<p>
{{ msg }}
</p>
<button @click="DoLogin()" class="btn btn-success">提交</button>
</div>
</template> <script>
export default {
name: "Login",
data(){
return{
username:'',
password:'',
msg :''
}
},
methods:{
DoLogin(){
let _this = this;
this.$axios.request({
url:'http://127.0.0.1:8000/login/',
method:"POST",
data:{
"username": this.username,
"password": this.password
},
// responseType:'json',
}).then(function (res) {
window.console.log(res.data)
window.console.log(res.data.status)
if (res.data.status == 100){
_this.title = res.data;
_this.$store.commit('saveToken',res.data)
_this.$router.push('/index');
}else {
_this.msg = res.data.msg;
_this.$data.passowrd = ''
} })
}
}
}
</script> <style scoped> </style>

components -> index.vue

<template>

    <div class="row">
<h2>
{{ msg }}
</h2>
<div class="col-md-2">
<div style="background-color: #2aabd2">
1
</div>
</div>
<div style="width: 100%">
<div style="background-color: #8c8c8c">
2
</div>
</div> </div>
</template> <script>
export default {
name: "Index",
data() {
return {
msg: '这是首页'
}
}
}
</script> <style scoped> </style>

Vue 项目 Vue + restfulframework的更多相关文章

  1. vue-cli快速构建Vue项目

    vue-cli是什么? vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. vue-cli怎么使用? 安装vue-cli之前,需要先装好vue 和 webpack npm i ...

  2. 如何搭建一个VUE项目

    搭建环境 搭建node环境 下载 1.进入node.js官方网站下载页,点击下图中框出位置,进行下载即可,当前版本为8.9.4,下载网址为:https://nodejs.org/zh-cn/downl ...

  3. 使用 vs code 搭建vue项目(一)

    1. 配置环境 1.1. 安装nodejs,下载地址:https://nodejs.org/en/download/. 步骤-..安装完成后,输入node-v,提示如下,则安装完成. 1.2. 安装v ...

  4. vue项目打包问题

    使用vue-cli脚手架构建vue项目 vue init webpack project npm run build 打包时出现 Tip: built files are meant to be se ...

  5. 快速搭建Vue项目

    快速搭建Vue项目 第一次安装vue项目Vue推荐开发环境Node.js 6.2.0.npm 3.8.9.webpack 1.13.vue-cli 2.5.1.webstrom2016 安装环境: 安 ...

  6. 创建一个vue 项目 必备的几个插件

    第一步npm安装 首先:先从nodejs.org中下载nodejs 打开控制命令行程序(CMD),node -v 检查是否正常 使用淘宝NPM 镜像 npm  install  -g  cnpm  - ...

  7. vue-cli快速构建vue项目模板

    vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 1.使用npm安装vue-cli 需要先装好vue 和 webpack(前提是已经安装了nodejs,否则连npm都用不了 ...

  8. 教你如何搭建vue项目

    笔者工作也有一些时间,需要用vue写项目时也总是项目组长已经把项目搭建好了, 偶尔心血来潮想试着自己搭建一个vue项目 我们搭建vue项目呢主要是用到了vue-cli来搭建,但是前提是必须要已经安装好 ...

  9. Linux下创建vue项目

    前提:已经安装了node.js.cnpm 1.全局安装vue脚手架vue-cli:#cnpm install -g vue-cli 注意:全局安装没有建立软链接前是无法使用刚刚安装的vue命令的,所以 ...

随机推荐

  1. 笔记javascript

    // var demo1=12;// alert('点击确定按钮看结果'+demo1);// for(var i = 0; i<10;i++)// {//     document.write( ...

  2. 面向对象(特殊成员 组合 self)

  3. 项目管理 - PM、 SRS、SOW简介及范例

    PM在一个IT项目中的主要管理任务 http://blog.csdn.net/eaglezhang/article/details/1717171 计算机软件需求说明编制指南 http://blog. ...

  4. java34

    局部内部类:定义在方法中的类 -1局部类中可引用局部变量(定义在方法中的变量),但是局部变量必须已经初始化, 因为局部变量前默认带着final. 2.局部内部类的东西只能在定义的方法中使用(在方法中创 ...

  5. oracle 数据定义语言(DDL)语法

    DDL语言包括数据库对象的创建(create).删除(drop)和修改(alter)的操作 1.创建表语法 create table table_name( column_name datatype  ...

  6. 团队-爬虫豆瓣top250项目-模块测试过程

    模块测试: 项目托管平台地址:https://github.com/gengwenhao/GetTop250.git 模块测试:"获取250排名的全部电影信息"功能,测试方法:手动 ...

  7. mktime 夏令时

    我们的最终目的是把字符串格式的时间转换为内部使用的“日历时间”,即到UTC 1970年1月1日零时的秒数.这里就存在夏令时的问题.比如俄罗斯时间2008年10月26日2:30由于夏令时的跳变会经过两次 ...

  8. 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

    web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...

  9. python之支付

    一,alipay方式 1,国内的alipay支付:我在网上找了好多的教程,大多数都是属于国内内支付的,所以在这里我就不详细介绍了, 操作:https://www.cnblogs.com/xuanan/ ...

  10. Linux下mysql定时自动备份并FTP到远程脚本

    1.添加backupmysqleveryday.sh(vi /data/shell/backupmysqleveryday.sh) #!/bin/sh #this shell is user for ...