丝路通:vue展示商品分类数据

来自CloudWiki
跳转至: 导航搜索

vue前端接口

head/head.vue:

     getMenu(){//获取菜单
          getCategory({
            params:{}
          }).then((response)=> {
                    console.log(response)
                    this.allMenuLabel = response.data
                })
                .catch(function (error) {
                  console.log(error);
                });
        },

其中getCategory又是由api/api.js 所定义的。


let host = 'http://shop.projectsedu.com';

//获取商品类别信息
export const queryCategorygoods = params => { return axios.get(`${host}/indexgoods/`) }

//获取首页中的新品
export const newGoods = params => { return axios.get(`${host}/newgoods/`) }

//获取轮播图
export const bannerGoods = params => { return axios.get(`${host}/banners/`) }

//获取商品类别信息
export const getCategory = params => {
  if('id' in params){
    return axios.get(`${host}/categorys/`+params.id+'/');
  }
  else {
    return axios.get(`${host}/categorys/`, params);
  }
};

上方的host 表示主机名,这里是远程的主机。

为了便于调试,我们可以在上方的host下面添加localhost变量,以测试本地的接口

并先在getCategory 里将host替换为localhost ,其中10.0.0.30为本机ip

let host = 'http://shop.projectsedu.com';
let local_host = 'http://10.0.0.30:8000';



//获取商品类别信息
export const queryCategorygoods = params => { return axios.get(`${host}/indexgoods/`) }

//获取首页中的新品
export const newGoods = params => { return axios.get(`${host}/newgoods/`) }

//获取轮播图
export const bannerGoods = params => { return axios.get(`${host}/banners/`) }

//获取商品类别信息
export const getCategory = params => {
  if('id' in params){
    return axios.get(`${local_host}/categorys/`+params.id+'/');
  }
  else {
    return axios.get(`${local_host}/categorys/`, params);
  }
};

测试:http://10.0.0.30:8080/#/app/home/index

显示如下错误,原因是浏览器禁止跨域引起的,可以从服务端去配置一下。

Bd20-6-19.png

服务端配置跨域

https://github.com/adamchainz/django-cors-headers

pip3 install django-cors-headers==2.1.0

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'DjangoUeditor',
    'users.apps.UsersConfig',
    'goods.apps.GoodsConfig',
    'trade.apps.TradeConfig',
    'user_operation.apps.UserOperationConfig',
    'crispy_forms',
    'django_filters',
    'xadmin',
    'rest_framework',
    'corsheaders',
]

MIDDLEWARE = [
    'corsheaders.middleware.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',
]

CORS_ORIGIN_ALLOW_ALL= True

注意:Also if you are using CORS_REPLACE_HTTPS_REFERER it should be placed before Django's CsrfViewMiddleware (如上所示)

现在再次测试,跨域访问已经可以了,

现在可以访问本地的类别接口 10.0.0.30:8000/categorys/

Bd20-6-20.png

导航栏中类别的出现

现在导航栏中的类别没有出现,

这个需要在后台设置

http://10.0.0.30:8000/xadmin/goods/goodscategory/

Bd20-6-21.png

Bd20-6-22.png

Bd20-6-23.png

Bd20-6-24.png