Python项目44-前后端分离项目(前戏)

2022-09-26 14:04:27 浏览数 (1)

-曾老湿, 江湖人称曾老大。


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


项目分析


简单分析

代码语言:javascript复制
"""
1、业务逻辑:登录注册 - 主页(基础信息展示) - 课程页(复杂信息展示)- 课程订单生产与支付 - 上线订单生成
2、实际项目开发的技术点:
    git版本控制
    第三方短信认证
    接口缓存 - redis数据库
    celery异步任务,接口缓存异步同步数据
    支付宝支付
    真实服务器项目上线
    
3、前台:页面现成的、前后台的数据交互代码、element-ui、jq、bootstrap、原生
"""

pip全局换源

代码语言:javascript复制
"""
1、采用国内源,加速下载模块的速度
2、常用pip源:
    -- 豆瓣:https://pypi.douban.com/simple
    -- 阿里:https://mirrors.aliyun.com/pypi/simple
3、加速安装的命令:
    -- >: pip install -i https://pypi.douban.com/simple 模块名
"""

永久配置安装源


Windows

代码语言:javascript复制
"""
1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:Users电脑用户AppDataRoaming 文件夹中
2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件
3、新增 pip.ini 配置文件内容
"""

MacOS、Linux

代码语言:javascript复制
"""
1、在用户根目录下 ~ 下创建 .pip 隐藏文件夹,如果已经有了可以跳过
    -- mkdir ~/.pip
2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件
    -- cd ~/.pip && touch pip.conf
3、启动 Finder(访达) 按 cmd shift g 来的进入,输入 ~/.pip 回车进入
4、新增 pip.conf 配置文件内容
"""

配置文件内容

代码语言:javascript复制
"""
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
"""

虚拟环境的搭建


优点

代码语言:javascript复制
1、使不同应用开发环境相互独立
2、环境升级不影响其他应用,也不会影响全局的python环境
3、防止出现包管理混乱及包版本冲突

windows


Windows安装

代码语言:javascript复制
# 建议使用pip3安装到python3环境下
pip3 install virtualenv
pip3 install virtualenvwrapper-win

配置虚拟环境管理器工作目录

代码语言:javascript复制
# 配置环境变量:
# 控制面板 => 系统和安全 => 系统 => 高级系统设置 => 环境变量 => 系统变量 => 点击新建 => 填入变量名与值
变量名:WORKON_HOME  变量值:自定义存放虚拟环境的绝对路径
eg: WORKON_HOME: D:Virtualenvs

# 同步配置信息:
# 去向Python3的安装目录 => Scripts文件夹 => virtualenvwrapper.bat => 双击

MacOS、Linux


MacOS、Linux安装

代码语言:javascript复制
# 建议使用pip3安装到python3环境下
pip3 install -i https://pypi.douban.com/simple virtualenv
pip3 install -i https://pypi.douban.com/simple virtualenvwrapper

工作文件

代码语言:javascript复制
# 先找到virtualenvwrapper的工作文件 virtualenvwrapper.sh,该文件可以刷新自定义配置,但需要找到它
# MacOS可能存在的位置 /Library/Frameworks/Python.framework/Versions/版本号文件夹/bin
# Linux可能所在的位置 /usr/local/bin  |  ~/.local/bin  |  /usr/bin
# 建议不管virtualenvwrapper.sh在哪个目录,保证在 /usr/local/bin 目录下有一份
# 如果不在 /usr/local/bin 目录,如在 ~/.local/bin 目录,则复制一份到 /usr/local/bin 目录
    -- sudo cp -rf ~/.local/bin/virtualenvwrapper.sh /usr/local/bin

配置

代码语言:javascript复制
# 在 ~/.bash_profile 完成配置,virtualenvwrapper的默认默认存放虚拟环境路径是 ~/.virtualenvs
# WORKON_HOME=自定义存放虚拟环境的绝对路径,需要自定义就解注
VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

# 在终端让配置生效:
    -- source ~/.bash_profile

使用

代码语言:javascript复制
# 在终端工作的命令

# 1、创建虚拟环境到配置的WORKON_HOME路径下
# 选取默认Python环境创建虚拟环境:
    -- mkvirtualenv 虚拟环境名称
# 基于某Python环境创建虚拟环境:
    -- mkvirtualenv -p python2.7 虚拟环境名称
    -- mkvirtualenv -p python3.6 虚拟环境名称

# 2、查看已有的虚拟环境
    -- workon

# 3、使用某个虚拟环境
    -- workon 虚拟环境名称
    
# 4、进入|退出 该虚拟环境的Python环境
    -- python | exit()

# 5、为虚拟环境安装模块
    -- pip或pip3 install 模块名

# 6、退出当前虚拟环境
    -- deactivate

# 7、删除虚拟环境(删除当前虚拟环境要先退出)
    -- rmvirtualenv 虚拟环境名称

pycharm使用


新建项目


添加环境


使用环境

后台项目创建


创建虚拟环境

代码语言:javascript复制
MacBook-pro:Virtualenvs driverzeng$ mkvirtualenv luffy

安装django环境

代码语言:javascript复制
## 安装django,drf和pymysql
pip install django==2.0.7
pip install djangorestframework
pip install pymysql

## 查看当前虚拟环境的包
(luffy) MacBook-pro:Virtualenvs driverzeng$ pip list
Package             Version
------------------- -------
Django              2.0.7
djangorestframework 3.11.0
pip                 20.1.1
PyMySQL             0.9.3
pytz                2020.1
setuptools          47.3.1
wheel               0.34.2

创建django项目

代码语言:javascript复制
## 先创建一个luffy的前台后台项目目录
(luffy) MacBook-pro:Desktop driverzeng$ mkdir luffy

## 进入luffy目录
(luffy) MacBook-pro:Desktop driverzeng$ cd luffy/

## 查看位置(我创建在我的桌面上了)
(luffy) MacBook-pro:luffy driverzeng$ pwd
/Users/driverzeng/Desktop/luffy

## 创建django项目,后台项目一般叫api
(luffy) MacBook-pro:luffy driverzeng$ django-admin startproject  luffyapi

重构目录项目


重构前

代码语言:javascript复制
## 进入目录
(luffy) MacBook-pro:luffy driverzeng$ cd luffyapi/

## 查看当前目录结构
(luffy) MacBook-pro:luffyapi driverzeng$ tree
.
|____manage.py
|____luffyapi
| |______init__.py
| |____settings.py
| |____urls.py
| |____wsgi.py

pycharm配置虚拟环境

重构目录,先使用pycharm打开项目,并且选择venv环境


创建app目录

创建app目录


创建apps包目录

将这些包移动到apps目录下,方便管理,否则目录会很乱

然后再在子luffyapi的目录下创建两个包目录,libsutils


区分settings文件

在子luffy目录下创建一个settings包目录区分dev开发环境和prod生产环境。

再在settings包目录下创建两个文件,dev.pyprod.py

把源luffy的settings.py文件中的内容拷贝到dev.py

然后将项目启动时读取原来的settings.py文件修改成读取settings包下的dev.py文件

这样配置完成之后,在pycharm中可以直接启动项目,但是...命令好像是不太行了。

因为我们需要修改manage.py文件中的settings配置

代码语言:javascript复制
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    ## 修改这一行内容,原本是"luffyapi.settings"改成"luffyapi.settings.dev"
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

改完后,项目启动成功,但是呢....上线后,在生产环境中,我们会用uwsgi调用django项目中的wsgi.py文件,所以我们还需要修改wsgi文件

代码语言:javascript复制
"""
WSGI config for luffyapi project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")

application = get_wsgi_application()

然后就可以删除settings.py文件了


重构后的目录结构

代码语言:javascript复制
## 重构项目目录后
"""
├── luffyapi
    ├── logs/               # 项目运行时/开发时日志目录 - 文件夹
    ├── manage.py           # 脚本文件
    ├── luffyapi/           # 项目主应用,开发时的代码保存 - 包
        ├── apps/           # 开发者的代码保存目录,以模块[子应用]为目录保存 - 包
        ├── libs/           # 第三方类库的保存目录[第三方组件、模块] - 包
        ├── settings/       # 配置目录 - 包
            ├── dev.py      # 项目开发时的本地配置
            └── prod.py     # 项目上线时的运行配置
        ├── urls.py         # 总路由
        └── utils/          # 多个模块[子应用]的公共函数类库[自己开发的组件]
    └── scripts/            # 保存项目运营时的脚本文件 - 文件夹
"""

创建django的测试脚本

接下来,我们在scripts目录中,配置一下脚本文件,因为我们之前在学习orm的时候,使用脚本启动Django

test_django.py

代码语言:javascript复制
import os, django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
django.setup()

from django.conf import settings

print(settings)

配置国际化

在settings文件中配置国际化:

代码语言:javascript复制
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

后台项目环境配置

Django官网:TP

可以搜索logging,如果看中文可以把en替换成zh-hans


开发环境配置日志

代码语言:javascript复制
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用WARNING
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"),
            # 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

生产环境配置日志

代码语言:javascript复制
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'console': {
            'level': 'WARNING',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'file': {
            # 实际开发建议使用WARNING
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR代表的是小luffyapi
            'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"),
            # 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/luffy.log"),
            # 日志文件的最大值,这里我们设置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的数量,设置最大日志数量为10
            'backupCount': 10,
            # 日志格式:详细格式
            'formatter': 'verbose',
            # 文件内容编码
            'encoding': 'utf-8'
        },
    },
    # 日志对象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    }
}

utils配置日志

在utils目录下创建一个logging.py文件

代码语言:javascript复制
import logging

logger = logging.getLogger('django')

测试日志使用

代码语言:javascript复制
import os, django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
django.setup()

from django.conf import settings
print(settings)

from luffyapi.utils.logging import logger
logger.critical('测试致命错误logger')
logger.error('测试一般错误logger')
logger.warning('测试警告logger')
logger.info('测试正常信息logger')
logger.debug('测试调试信息logger')


utils添加环境变量

settings/dev.py

代码语言:javascript复制
## 设置环境变量
import sys

sys.path.insert(0, BASE_DIR)

scripts/test_django.py 生产环境中可以不配置这个文件,因为这是开发的过程中需要测试用的文件。

代码语言:javascript复制
import os, django
import sys

## 添加环境变量
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")
django.setup()

from django.conf import settings
print(settings)

from luffyapi.utils.logging import logger
logger.critical('测试致命错误logger')
logger.error('测试一般错误logger')
logger.warning('测试警告logger')
logger.info('测试正常信息logger')
logger.debug('测试调试信息logger')

在settings文件中注册模块,也需要配置环境变量

settings/dev.py

代码语言:javascript复制
## 设置环境变量
import sys

sys.path.insert(0, BASE_DIR)
APPS_DIR = os.path.join(BASE_DIR, 'apps')
sys.path.insert(1, APPS_DIR)

因为我们做了目录的重构,所以我们需要把子luffyapi目录和apps目录都添加到环境变量中,这样一来,就可以直接注册项目了 。

代码语言:javascript复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api',
    'order',
    'user',
]

配置response和exception

我们之前项目中自定义过 response 和 exception直接拿过来使用

utils/response.py

代码语言:javascript复制
from rest_framework.response import Response

class APIResponse(Response):
    def __init__(self, data_status=0, data_msg='ok', results=None, http_status=None, headers=None, exception=False, **kwargs):
        data = {
            'status': data_status,
            'msg': data_msg,
        }
        if results is not None:
            data['results'] = results
        data.update(kwargs)

        super().__init__(data=data, status=http_status, headers=headers, exception=exception)

utils/exception.py

代码语言:javascript复制
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework.views import Response
from rest_framework import status
from utils.logging import logger
def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    if response is None:
        logger.error('%s - %s - %s' % (context['view'], context['request'].method, exc))
        return Response({
            'detail': '服务器错误'
        }, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True)
    return response

后台数据库配置


数据操作

代码语言:javascript复制
## 创建数据库
mysql> create database luffy default charset utf8;

## 创建用户
mysql> grant all on luffy.* to luffy@'%' identified by 'Luffy123?';

settings配置

代码语言:javascript复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'luffy',
        'HOST': '10.0.0.51',
        'USER': 'luffy',
        'PASSWORD': 'Luffy123?',
        'PORT': 3306,
    }
}

配置使用pymysql

luffyapi/__init__.py

代码语言:javascript复制
import pymysql

pymysql.install_as_MySQLdb()

数据库版本兼容问题

Django有些版本会导致数据库版本不兼容,需要修改源代码

建表


创建User模块

代码语言:javascript复制
## 当前路径,如果不在apps目录下,一定要进入目录
(luffy) MacBook-pro:apps driverzeng$ pwd
/Users/driverzeng/Desktop/luffy/luffyapi/luffyapi/apps

## 在apps目录下创建user模块
(luffy) MacBook-pro:apps driverzeng$ python ../../manage.py startapp user

创建User表

user/models.py

代码语言:javascript复制
from django.db import models
from django.contrib.auth.models import AbstractUser


# Create your models here.

class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)
    ## 头像这里,需要Pillow模块,pip install Pillow
    icon = models.ImageField(upload_to='icon', default='icon/default.png')

    class Meta:
        db_table = 'luffy_user'
        verbose_name = '用户表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

注册user模块

代码语言:javascript复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user',
]

配置media

代码语言:javascript复制
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

配置完,可以在子luffyapi目录下创建 media/icon

路由分发


主路由配置

luffyapi/urls.py

代码语言:javascript复制
from django.contrib import admin
from django.urls import path, re_path, include
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    ## 路由分发user模块
    path('user/', include('user.urls')),
    ## 图片上传路径,必须是正则路由
    re_path('^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})
]

将default.png文件放入media/icon目录下


自定义User表

settings/dev.py

代码语言:javascript复制
AUTH_USER_MODEL = 'user.User'

数据库迁移

代码语言:javascript复制
(luffy) MacBook-pro:luffyapi driverzeng$ python manage.py makemigrations

(luffy) MacBook-pro:luffyapi driverzeng$ python manage.py migrate

前台项目创建


node和vue环境

代码语言:javascript复制
1.傻瓜式安装node: 
官网下载:https://nodejs.org/zh-cn/

2.安装cnpm: 
>: npm install -g cnpm --registry=https://registry.npm.taobao.org

3.安装vue最新脚手架: 
>: cnpm install -g @vue/cli

注:如果2、3步报错,清除缓存后重新走2、3步
>: npm cache clean --force

4.查看版本
MacBook-pro:luffyapi driverzeng$ vue -V
@vue/cli 4.3.1

创建vue项目

代码语言:javascript复制
## 进入项目目录
MacBook-pro:~ driverzeng$ cd /Users/driverzeng/Desktop/luffy/

## 创建项目
MacBook-pro:luffy driverzeng$ vue create luffycity

## 项目选择内容如下:
1. Manually select features
 ◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◉ Router
❯◉ Vuex
 ◯ CSS Pre-processors
 ◉ Linter / Formatter
 ◯ Unit Testing
 ◯ E2E Testing
 
2. ESLint with error prevention only

3. ◉ Lint on save
4. ❯ In package.json
5. ? Save this as a preset for future projects? (y/N) N


使用webstrom打开项目


重构项目目录

代码语言:javascript复制
"""
├── luffycity
    ├── public/                     # 项目共有资源
        ├── favicon.ico             # 站点图标
        └── index.html              # 主页
    ├── src/                        # 项目主应用,开发时的代码保存
        ├── assets/                 # 前台静态资源总目录
            ├── css/                # 自定义css样式
                └── global.css      # 自定义全局样式
            ├── js/                 # 自定义js样式
                └── settings.js     # 自定义配置文件
            └── img/                # 前台图片资源
        ├── components/             # 小组件目录
        ├── views/                  # 页面组件目录
        ├── App.vue                 # 根路由
        ├── main.js                 # 入口脚本文件
        ├── router          
            └── index.js            # 路由脚本文件
        store               
            └── index.js            # 仓库脚本文件
    ├── vue.config.js               # 项目配置文件
    └── *.*                         # 其他配置文件
"""

1.在assets目录下创建css,js,img 2.删除components目录下的文件 3.在views目录下删除About.vue 4.修改router下的index.js

代码语言:javascript复制
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

const routes = [
    {
        path: '/',
        name: 'Home',
        component: Home
    },
]

const router = new VueRouter({
    mode: 'history',
    base: process.env.BASE_URL,
    routes
})

export default router

5.修改Home.vue文件

代码语言:javascript复制
<template>
    <div class="home">
    </div>
</template>

<script>
    export default {
        name: 'Home',
        components: {}
    }
</script>

6.修改app.vue文件

代码语言:javascript复制
<template>
    <div id="app">
        <router-view/>
    </div>
</template>

创建启动方式

启动服务


新建global全局样式文件

assets/css/global.css

代码语言:javascript复制
html, body, h1, h2, h3, h4, h5, h6, ul, p {
    margin: 0;
    padding: 0;
}

ul {
    list-style: none;
}

a {
    text-decoration: none;
    color: #333;
}

input, button, textarea {
    vertical-align: middle;
}

配置全局样式

main.js

代码语言:javascript复制
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

// 配置全局样式
import '@/assets/css/global.css'

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

创建settings.js全局自定义设置

assets/js/settings.js

代码语言:javascript复制
export default {
    base_url: 'http://127.0.0.1:8000'
}

配置使用全局自定义设置

main.js

代码语言:javascript复制
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false

// 配置全局样式
import '@/assets/css/global.css'

// 配置全局自定义设置
import settings from "@/assets/js/settings";

Vue.prototype.$settings = settings

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

调用settings测试

App.vue

代码语言:javascript复制
<template>
    <div id="app">
        <router-view/>
    </div>
</template>

<script>
    export default {
        created() {
            console.log(this.$settings.base_url   '/app/')
        }
    }
</script>

Home.vue

代码语言:javascript复制
<template>
    <div class="home">
        <h1>主页</h1>
    </div>
</template>

<script>
    export default {
        name: 'Home',
        components: {},
        created() {
            console.log(this.$settings.base_url   '/home/')
        }
    }
</script>


axios配置

安装axios

代码语言:javascript复制
## 使用yarn安装
MacBook-pro:luffy driverzeng$ yarn add axios

## 使用npm安装
MacBook-pro:luffy driverzeng$ sudo npm install --save axios

导入axios

main.js

代码语言:javascript复制
// 配置axios
import axios from 'axios'
Vue.prototype.$axios = axios

cookie配置

安装vue-cookies

代码语言:javascript复制
## yarn安装
MacBook-pro:luffy driverzeng$ yarn add vue-cookies

## npm安装
MacBook-pro:luffycity driverzeng$ npm install --save vue-cookies

导入vue-cookies

main.js

代码语言:javascript复制
// 配置cookies:vue-cookies
import cookies from 'vue-cookies'
Vue.prototype.$cookies = cookies

element-ui配置

安装element-ui

代码语言:javascript复制
## yarn安装
MacBook-pro:luffy driverzeng$ yarn add element-ui

## npm安装
MacBook-pro:luffycity driverzeng$ npm install --save element-ui

使用element-ui

代码语言:javascript复制
// 配置element-ui:element-ui
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

验证element-ui

Home.vue

代码语言:javascript复制
<template>
    <div class="home">
        <h1>主页</h1>
    </div>
</template>

<script>
    export default {
        name: 'Home',
        components: {},
        created() {
            console.log(this.$settings.base_url   '/home/')
            this.$message('123')
        }
    }
</script>


bootstrap JQuery配置

安装jQuery和bootstrap

代码语言:javascript复制
## yarn安装jQuery
MacBook-pro:luffycity driverzeng$ yarn add jquery

## npm安装jQuery
MacBook-pro:luffycity driverzeng$ npm install --save jquery


## yarn安装bootstrap@3
MacBook-pro:luffycity driverzeng$ yarn addbootstrap@3

## npm安装bootstrap@3
MacBook-pro:luffycity driverzeng$ npm install --save bootstrap@3

配置jQuery

在项目的根目录下创建vue.config.js

代码语言:javascript复制
const webpack = require("webpack");

module.exports = {
    configureWebpack: {
        plugins: [
            new webpack.ProvidePlugin({
                $: "jquery",
                jQuery: "jquery",
                "window.jQuery": "jquery",
                "window.$": "jquery",
                Popper: ["popper.js", "default"]
            })
        ]
    }
};

配置bootstrap

main.js

代码语言:javascript复制
// 配置bootstrap@3
import 'bootstrap'
import 'bootstrap/dist/css/bootstrap.min.css'

测试bootstrap

代码语言:javascript复制
<template>
    <div class="home">
        <h1>主页</h1>
        <hr>
        <button class="btn btn-primary">按钮</button>
        <hr>
        <div class="dropdown">
            <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown"
                    aria-haspopup="true" aria-expanded="true">
                Dropdown
                <span class="caret"></span>
            </button>
            <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li role="separator" class="divider"></li>
                <li><a href="#">Separated link</a></li>
            </ul>
        </div>
    </div>
</template>

<script>
    export default {
        name: 'Home',
        components: {},
        created() {
            console.log(this.$settings.base_url   '/home/')
            this.$message('123')
        }
    }
</script>

0 人点赞