Django+VUE交互——第二部分
作者:互联网
四、构建Vue前端项目
1、安装node.js,查看是否安装成功:
$node –v
2、先用npm安装vue-cli脚手架工具(vue-cli是官方脚手架工具,能迅速帮你搭建起vue项目的框架):
$npm install -g vue-cli
4、cd 到 Ats_Web,新建一个前端工程目录template,根据提示按回车,安装中把vue-router选上,我们须要它来做前端路由
$vue-init webpack template
5、进入 template,运行命令来安装vue所须要的node依赖
$cd template
$npm install //安装vue所须要的node依赖
$npm run dev //run起来
打开浏览器http://localhost:8080/ 能打开就配好了
6 、文件目录结构解析
7、我们在src/component文件夹下新建一个名为BookTest.vue的组件,通过调用之前在Django上写好的api,实现添加书籍和展示书籍信息的功能。在样式组件上我们使用了饿了么团队推出的element-ui,这是一套专门匹配Vue.js框架的功能样式组件。
(1). npm 安装vue依赖
cd Ats_Web
cnpm install
cnpm install vue-resource
cnpm install element-ui
(2).在main.js中引入 整个Element,就可以使用了,详细的用法可以去官网查看。
import Vue from 'vue' import App from './App' import router from './router' import ElementUI from 'element-ui' import VueResource from 'vue-resource' import 'element-ui/lib/theme-chalk/index.css' Vue.config.productionTip = false Vue.use(ElementUI) Vue.use(VueResource) /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })
(3)创建BookTest.vue,下面的是自己随便写的,刚学vue不久,可以参考一下:
<template> <div class="home"> <el-row display="margin-top:10px"> <el-input v-model="input" placeholder="请输入书名" style="display:inline-table; width: 30%; float:left"></el-input> <el-button type="primary" @click="addBook()" style="float:left; margin: 2px;">新增</el-button> </el-row> <el-row> <el-table :data="bookList" style="width: 100%" border> <el-table-column prop="id" label="编号" min-width="100"> <template scope="scope"> {{ scope.row.pk }} </template> </el-table-column> <el-table-column prop="book_name" label="书名" min-width="100"> <template scope="scope"> {{ scope.row.fields.book_name }} </template> </el-table-column> <el-table-column prop="add_time" label="添加时间" min-width="100"> <template scope="scope"> {{ scope.row.fields.add_time }} </template> </el-table-column> </el-table> </el-row> </div> </template> <script> export default { name: 'home', data () { return { input: '', bookList: [], } }, mounted: function() { this.showBooks() }, methods: { addBook(){ this.$http.get('http://127.0.0.1:8000/api/add_book?book_name=' + this.input) .then((response) => { var res = JSON.parse(response.bodyText) if (res.error_num == 0) { this.showBooks() } else { this.$message.error('新增书籍失败,请重试') console.log(res['msg']) } }) }, showBooks(){ this.$http.get('http://127.0.0.1:8000/api/show_books') .then((response) => { var res = JSON.parse(response.bodyText) console.log(res) if (res.error_num == 0) { this.bookList = res['list'] } else { this.$message.error('查询书籍失败') console.log(res['msg']) } }) } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> h1, h2 { font-weight: normal; } ul { list-style-type: none; padding: 0; } li { display: inline-block; margin: 0 10px; } a { color: #42b983; } </style>
8、在src/router目录的index.js中,我们把新建的Home组件,配置到vue-router路由中:
import BookTest from '@/components/BookTest' export default new Router({ routes: [ { path: '/', name: 'Home', component: Home } ] })
9、在前端工程 目录下,输入 npm run dev
启动 node 自带的服务器,自动打开浏览器,如下页面
10、解决跨域问题
因为我们使用 vuejs 的开发环境脱离了 django 环境,访问 django 写的 api,出现了跨域问题,有两种方法解决,一种是在 vuejs 层上做转发(proxytable),另一种是在 django 层注入 header,这里使用后者,用 django 的第三方包 django-cors-headers 来解决跨域问题。
pip install django-cors-headers
修改django中setting配置
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', 'corsheaders', #新增1 ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', #新增2 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] CORS_ORIGIN_ALLOW_ALL = True #新增3
标签:vue,res,middleware,django,VUE,contrib,import,Django,交互 来源: https://www.cnblogs.com/like1824/p/16481544.html