一、环境搭建

1、安装服务器node

  1. 官网下载 https://nodejs.org/zh-cn/
  2. node:用C++语言编写,用来运行JavaScript语言
  3.     node可以为前端项目提供server (包含了socket)

2、安装包管理器npm

  1. 管理员命令行安装:window系统:npm install -g cnpm --registry=https://registry.npm.taobao.org
  2.          Mac系统: sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
  3.  
  4. 索引npm的指令都可以换成cnpm
  5.   npm install vuex => cnpm install vuex

3、安装脚手架:

  1. 命令行安装:cnpm install -g @vue/cli
  2. 如果报错:npm cache clean --force

二、创建Vue项目

1、cd 到目标目录

2、创建项目:vue create 目录名

  1. 注意:要提前进入目标目录(项目应该创建在哪个目录下)
  2.    选择自定义方式创建项目,选取Router, Vuex插件

3、启动项目

①终端启动

  1. 进入项目:cd到项目目录
  2. 启动项目:npm run serve

②pycharm配置

  1. App.vue中安装vue.js插件,如果没有提示,在settings里的plugins里搜Vue.js安装,然后重启
  2. 配置项目的npm启动项:
  3. 直接拷贝,依赖需要自己安装cpm install

三、项目目录

四、组件

1、在根组件中渲染页面组件

①Main.vue 主页组件

  1. <template>
  2. <div class="main">
  3. <h1>{{ title }}</h1>
  4. </div>
  5. </template>
  6.  
  7. <script>
  8. export default {
  9. name: "Main",
  10. data: function () {
  11. return {
  12. title: '主页'
  13. }
  14. }
  15. }
  16. </script>
  17.  
  18. <style scoped>
  19. .main {
  20. height: 100vh;
  21. background-color: orange;
  22. }
  23. h1 {
  24. margin: 0;
  25. color: red;
  26. }
  27. </style>

②App.vue根组件

  1. <template>
  2. <div id="app">
  3. <!-- 3.使用 -->
  4. <Main></Main>
  5. </div>
  6. </template>
  7. <script>
  8. // 1.导入
  9. import Main from '@/views/Main'
  10. export default {
  11. // 2.注册
  12. components: {
  13. Main: Main
  14. }
  15. }
  16. </script>
  17. <style>
  18. html, body {
  19. margin: 0;
  20. }
  21. </style>

五、路由router.js

1、在根组件中设计转跳页面的导航栏

  1. <template>
  2. <div id="app">
  3. <ul class="nav">
  4. <li>主页</li>
  5. <li>商品页</li>
  6. <li>个人页</li>
  7. </ul>
  8.  
  9. </div>
  10. </template>
  11.  
  12. <script>
  13. import Main from '@/views/Main'
  14.  
  15. export default {
  16. components: {
  17. Main: Main
  18. }
  19. }
  20. </script>
  21.  
  22. <style>
  23. .nav {
  24. height: 200px;
  25. background-color: orange;
  26. }
  27. .nav li{
  28. float: left;
  29. height: 200px;
  30. width: 200px;
  31. text-align: center; /* 水平居中 */
  32. line-height: 200px; /* 垂直居中 */
  33. }
  34. .nav li:hover {
  35. background-color: aqua;
  36. }
  37.  
  38. html, body, ul {
  39. margin: 0;
  40. }
  41. ul {
  42. list-style: none;
  43. }
  44. </style>

2、创建三个页面

  1. 主页 Main
  2. 商品页 Goods
  3. 个人页 User

3、组件配置

  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. import Main from './views/Main.vue'
  4. import Goods from './views/Goods.vue'
  5. import User from './views/User.vue'
  6. // import Home from './views/Home.vue'
  7.  
  8. Vue.use(Router)
  9.  
  10. export default new Router({
  11. mode: 'history',
  12. base: process.env.BASE_URL,
  13. routes: [
  14. {
  15. path: '/',
  16. name: 'main',
  17. component: Main
  18. },
  19. {
  20. path: '/goods',
  21. name: 'goods',
  22. component: Goods
  23. },
  24. {
  25. path: '/user',
  26. name: 'user',
  27. component: User
  28. },
  29. ]
  30. })

router.js

  1. <template>
  2. <div id="app">
  3. <ul class="nav">
  4. <!--<router-link>组件支持用户在具有路由功能的应用中点击导航。
  5. 通过to属性指定目标地址,默认渲染为带有正确连接的<a>标签-->
  6. <li><router-link to="/">主页</router-link></li>
  7. <li><router-link to="/goods">商品页</router-link></li>
  8. <li><router-link to="/user">个人页</router-link></li>
  9. </ul>
  10. <!--不想跳转到新页面,只在当前页面切换着显示,那么就要涉及到路由的嵌套。
  11. 点击每个导航链接会跳转到不同的组件,并且加上<router-view></router-view>这个标签-->
  12. <router-view/>
  13.  
  14. </div>
  15. </template>
  16.  
  17. <script>
  18. import Main from '@/views/Main'
  19.  
  20. export default {
  21. components: {
  22. Main: Main
  23. }
  24. }
  25. </script>
  26.  
  27. <style>
  28. .nav {
  29. height: 200px;
  30. background-color: red;
  31. }
  32. .nav li{
  33. float: left;
  34. height: 200px;
  35. width: 400px;
  36. text-align: center; /* 水平居中 */
  37. line-height: 200px; /* 垂直居中 */
  38. }
  39. .nav li:hover {
  40. background-color: aqua;
  41. }
  42. .nav li a {
  43. text-decoration: none;
  44. font: bold 30px/30px 'STSong';
  45. }
  46.  
  47. html, body, ul, h1 {
  48. margin: 0;
  49. }
  50. ul {
  51. list-style: none;
  52. }
  53. </style>

4、路由前后台交互

①生命周期钩子

前端点击页面要显示页面的信息,要从后端拿数据,那么什么时候拿,当页面一加载时就拿,这个时候就涉及到生命周期钩子

  1. 生命周期钩子:
  2. 表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数
  3. 钩子函数: 满足特点条件被回调的方法
  4. new Vue({
  5. el: "#app",
  6. data: {
  7. msg: "message"
  8. },
  9. beforeCreate () {
  10. console.log("实例刚刚创建");
  11. console.log(this.msg
  12.  
  13. },
  14. created () {
  15. console.log("实例创建成功, data, methods已拥有");
  16. console.log(this.msg);
  17. },
  18. mounted () {
  19. console.log("页面已被vue实例渲染, data, methods已更新");
  20. }
  21. 拿到需求 => 确定钩子函数 => 解决需求的逻辑代码块
  22. })
  23. 开始创建的时候往后端发送请求,发送请求完渲染得到之后在mouted做数据替换

②如何前后端交互?去创建一个Django项目

  1. 首先在Vue项目中
  2. 安装 axios(ajax)的命令
  3. npm install axios --save
  4. 为项目配置全局axios
  5. import Axios from 'axios'
  6. Vue.prototype.$ajax = Axios

③配置完成之后开始请求后端,写完之后开始在后端写路由接口

  1. <template>
  2. <div class="goods">
  3. <h1>商品页</h1>
  4. <h2>{{ msg }}</h2>
  5. </div>
  6. </template>
  7.  
  8. <script>
  9. export default {
  10. name: "Goods",
  11. data: function() {
  12. return {
  13. msg: ''
  14. }
  15. },
  16. beforeCreate() {
  17. window.console.log('开始创建Goods组件')
  18. },
  19. created() {
  20. window.console.log('创建Goods组件完毕')
  21. },
  22. mounted() {
  23. window.console.log('Goods组件渲染完毕');
  24. // 请求后台
  25. let _this = this;
  26. this.$ajax({
  27. method: 'post',
  28. url: ' http://127.0.0.1:8000/goods/',
  29. params: {
  30. info: '前台数据'
  31. }
  32. }).then(function (result) {
  33. let data = result.data;
  34. // this 指向的是then的function
  35. _this.mas = data
  36. })
  37.  
  38. }
  39. }
  40. </script>
  41.  
  42. <style scoped>
  43. .goods {
  44. height: 100vh;
  45. background-color: pink;
  46. }
  47. </style>

Vue前端

  1. def goods(request):
  2. print(request.method) # POST
  3. # axios的请求不管是get请求还是post请求,前端把所有的数据都解析到GET里,原生Django在GET里拿数据
  4. print(request.GET) # <QueryDict: {'info': ['前台数据']}>
  5. print(request.POST) # <QueryDict: {}>
  6. return HttpResponse('后端数据')

Django后端

④前端和后端在交互的过程中会出现跨域问题:

  1. A网页访问B服务器资源时,不满足以下三个条件其一就是跨域访问
  2. 1. 协议不同
  3. 2. 端口不同
  4. 3. 主机不同
  5.  
  6. Django解决跨域:
  7. 1、安装django-cors-headers模块
  8. 2、在settings.py中配置
  9. 注册app
  10. INSTALLED_APPS = [
  11. 'corsheaders'
  12. ]
  13. 3、添加中间件
  14. MIDDLEWARE = [
  15. 'corsheaders.middleware.CorsMiddleware'
  16. ]
  17. 4、允许跨域源
  18. CORS_ORIGIN_ALLOW_ALL = True

⑤最后两者能够正常的交互,需要注意的是

axios的请求不管是get请求还是post请求,前端把所有的数据都解析到GET里,原生Django在GET里拿数据

Vue-CLI项目搭建的更多相关文章

  1. [转]Vue CLI 3搭建vue+vuex 最全分析

    原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...

  2. Vue的项目搭建及请求生命周期

    目录 Vue的项目搭建及请求生命周期 Vue-CLI的项目搭建 环境搭建 项目创建 pycharm运行Vue项目 Vue项目的大体结构 Vue的请求生命周期 两个小用法 Vue的项目搭建及请求生命周期 ...

  3. VUE CLI环境搭建文档

    VUE CLI环境搭建文档 1.安装Node.js 下载地址 https://nodejs.org/zh-cn/download/ 2.全局安装VUE CLI win+R键打开运行cmd窗口输入一下代 ...

  4. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  5. 改造@vue/cli项目为服务端渲染-ServerSideRender

    VUE SEO方案二 - SSR服务端渲染 在上一章中,我们分享了预渲染的方案来解决SEO问题,个人还是很中意此方案的,既简单又能解决大部分问题.但是也有着一定的缺陷,所以我们继续来看下一个方案--服 ...

  6. 使用Vue CLI脚手架搭建vue项目

    本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...

  7. Vue Cli 3 搭建单页应用项目刷新 404 问题 解决方案(以Apache为例)

    vue 项目 版本 Vue Cli 3.3 官方文档 https://router.vuejs.org/zh/guide/essentials/history-mode.html 因为本项目部署在 A ...

  8. node+mysql+vue+express项目搭建

    第一步:项目搭建之前首先需要安装node环境和MySQL数据库. 在已经完成上述的条件下开始进行以下操作: npm install @vue/cli -g   (-g 代表全局安装) 初始化项目  v ...

  9. VUE 脚手架项目搭建

    1. 概述 1.1 说明 vue-cli是一个官方发布vue.js项目脚手架,使用vue-cli可以快速创建vue项目.GitHub地址是:https://github.com/vuejs/vue-c ...

  10. (转)windows环境vue+webpack项目搭建

    首先,vue.js是一种前端框架,一般利用vue创建项目是要搭配webpack项目构建工具的,而webpack在执行打包压缩的时候是依赖node.js的环境的,所以,要进行vue项目的开发,我们首先要 ...

随机推荐

  1. windows下命令行利器---Cmder(安装,中文乱码,配置右键菜单)

    很多人都是在win下开发的,这样就会出现,经常需要命令行操作,而win cmd命令和linux命令有很大差异,导致大家很难受,今天给大家介绍一个win下命令行的利器-Cmder 一.先看一下它的容颜 ...

  2. FFmpeg4.0笔记:封装ffmpeg的视频帧转换功能类CSws

    Github https://github.com/gongluck/FFmpeg4.0-study/tree/master/Cff CSws.h /************************* ...

  3. 谷歌官方颜色库 MaterialDesignColor

    谷歌官方颜色库 MaterialDesignColor

  4. Java switch case 语句

    switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch(expression){ case value : //语句 break; //可选 ca ...

  5. linux 安装 python 最全教程

    环境:centos6.5 centos6.5 自带的 python 版本是 2.6.6,需要重新安装 2.7: centos7 自带的 python 版本是 2.7.5 基本操作 在安装新版本之前,一 ...

  6. 数据绑定-@ CookieValue

    测试:

  7. 数据库学习笔记3 基本的查询流 2 select lastname+','+firstname as fullname order by lastname+','+firstname len() left() stuff() percent , select top(3) with ties

    数据库学习笔记3 基本的查询流 2   order by子句对查询结果集进行排序 多列和拼接 多列的方式就很简单了 select firstname,lastname from person.pers ...

  8. Linux系统吃“内存”现象

    而当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件.这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃 ...

  9. 模块之time与datetime

    模块之time与datetime import time print (time.clock()) print(time.process_time()) #测量处理器运算时间 print(time.a ...

  10. NFS 网络文件系统快速部署手册

    NFS服务端部署配置 一.安装nfs-utils和rpcbind服务,安装完后检查 # yum install -y nfs-utils rpcbind # rpm -qa nfs-utils rpc ...