当前位置: 首页 > news >正文

配合数据库进行网页的动态数据上传

1.接口文档编写

1.1 什么是接口文档

在项目开发中,web项目的前后端通常分离开发,

此过程中,需要由前后端工程师共同定义接口,编写接口文档,

之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。

1.2 创建文件

1.3 接口文档示例

(docs/interface/readme.md)

1.3.1 旅游网的接口文档

# 旅游网的接口文档 RESTful风格接口

* 200请求数据成功

* 201提交数据成功

* 400参数错误

* 401未登录

* 403没有权限

* 404目标资源丢失

* 500服务器正忙

## 接口强求地址

1.测试环境

http://test.xxx.top

2.生产环境

http://www.xxx.com

1.3.2 错误代码文字提示

## 错误代码文字提示
```
{
    "error_code":"400000"
    "error_msg":"该字段不能为空。"
    "error_list":{
        "password":["该字段不能为空"]
    }
}
```

1.3.3  请求头添加内容/分页响应的参数

<table class="table table-hover table-condensed"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr class="info"><td>meta</td><td></td><td>分页元数据,解释如下</td></tr><tr><td>total_count</td><td>int</td><td>根据传入的条件检索出的记录条数</td></tr><tr><td>current_count</td><td>int</td><td>当前第几页</td></tr><tr><td>page_count</td><td>int</td><td>总页数</td></tr><tr class="info"><td>objec</td><td>Array</td><td>objects为返回的对象列表</td></tr></tbody>
</table>

1.3.4  一级/二级标题

## 接口列表
### 1.系统模块

### 2.景点模块

1.4 首页轮播图的接口

(trip_server\docs\interface\system\slider_list.md)

1.4.1 请求地址/调用方式

## 首页轮播图的接口

### 请求地址
/system/slider/list
### 调用方式
GET

1.4.2  请求参数

### 请求参数
<table>
<thead>
<tr><th>字段</th><th>必选</th><th>类型</th><th>说明</th>
</tr>
</thead>
<tbody>
<tr><td>types</td><td>true</td><td>int</td><td>轮播图类型(10:首页轮播)</td>
</tr>
</tbody>
</table>

1.4.3 返回结果

## 返回结果
```
{"meta":{"total_count":3,"page_count":2,"current_page":1},"objects":[{"pk":1,"name":"轮播图1","desc":null,"img":http://django.xxx.com/medias/slider/banner1.jpg,"target_url":null},{"pk":2,"name":"轮播图2","desc":null,"img":http://django.xxx.com/medias/slider/banner2.jpg,"target_url":null}]
}```

2.轮播图接口数据获取

2.1 接口配置

文件位置:src\utils\apis.js

//用于访问服务器端接口
const apiHost = "/api"//系统相关的接口
const SystemApis = {sliderListUrl:apiHost+"/system/slider/list/"
}
//景点相关的接口
const SightApis = {sightListUrl:apiHost+"/sight/sight/list/"
}
//对外暴露
export{SystemApis,SightApis
}

2.2 前端跨域

文件地址:vite.config.js

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'export default defineConfig({plugins: [vue(),],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}},//👇server:{proxy:{'/api':{target:'http://localhost:8000',changeOrigin:true,rewrite:(path)=>path.replace(/^\/api/,'')}}}//👈
})

2.3 配置服务端媒体地址

文件位置:pycharm--trip_server/settings.py

3. 上传轮播图动态数据

3.1 配置轮播图数据接口

格式见2.2

3.2 访问接口获取数据

import { ref,onMounted } from 'vue';// 获得vue中提供的响应式工具及生命周期工具

import { ajax } from '@/utils/ajax';//获得axios异步请求对象

import { SystemApis } from '@/utils/apis';//获得访问目标(轮播图)

const bannerList = ref([ ])//创建列表用于存放接口返回的轮播图数据

bannerList.value =res.data.objects//将获取的轮播图数据,给到响应式对象bannerlist中

console.log(res.data) //控制台输出响应对象中的数据,

测试是否console.log(bannerList.value)获取到接口里的数据        

<script setup>
import { ref,onMounted } from 'vue';
import { ajax } from '@/utils/ajax';
import { SystemApis } from '@/utils/apis';
//轮播图原静态数据
// const bannerList = ref([
//     {id: '1', imgUrl: '/static/home/banner/banner1.jpg'}, 
//     {id: '2', imgUrl: '/static/home/banner/banner2.jpg'}, 
//     {id: '3', imgUrl: '/static/home/banner/banner3.jpg'}
// ])
const bannerList = ref([])
//访问接口获取数据
const getBannerList=()=>{ajax.get(SystemApis.sliderListUrl).then(res =>{bannerList.value =res.data.objectsconsole.log(res.data) })
}
</script>

src\components\home\Banner.vue全部代码:

<script setup>
import { ref,onMounted } from 'vue';
import { ajax } from '@/utils/ajax';
import { SystemApis } from '@/utils/apis';const bannerList = ref([])
//访问接口获取数据
const getBannerList=()=>{ajax.get(SystemApis.sliderListUrl).then(res =>{bannerList.value =res.data.objects})
}
onMounted(()=>{getBannerList()
})
</script><template><div class="home-banner-box"><!-- 轮播图 --><van-swipe class="my-swipe" :autoplay="3000" indicator-color="white"><van-swipe-item v-for="item in bannerList" :key="item.id"><img :src="item.img_url"><!-- 注意“img_url”👆命名格式 --></van-swipe-item></van-swipe></div>
</template><style lang="less">
.home-banner-box {img {width: 100%;height: auto;}
}
</style>

4.上传热门景点动态数据(by Axios)

4.1 配置轮播图数据接口

4.2 <script> 模块:

params://向目标发起请求时,携带数据。

<script setup>
import { ref,onMounted } from 'vue';
import { ajax } from '@/utils/ajax';
import { SightApis } from '@/utils/apis';
//原热门景点静态数据
// const hotList = ref([
//     { id: 1, img: '/static/home/hot/h1.jpg', name: '景点名称', price: 65 },
//     { id: 2, img: '/static/home/hot/h2.jpg', name: '景点名称', price: 65 },
//     {........}
// ])
const hotList = ref([])
const getHotList = () => {ajax.get(SightApis.sightListUrl,{params:{is_hot:1}}).then(({data})=>{hotList.value = data.objects// console.log(hotList.value)})
}
onMounted(()=>{getHotList()
})
</script>

4.3 <template>模块

依照数据库内格式修改动态数据名称,如main_img、min_price等。

<template><!-- 热门景点 --><div class="home-hot-box"><van-cell title="热门推荐" is-link value="全部榜单" icon="/static/home/hot/fire.png" title-style="text-align:left" /><div class="box-main"><RouterLink class="hot-item" v-for="item in hotList" :key="item.id" :to="`#`"><div class="img"><span class="span"></span><img :src="item.main_img" alt=""></div><h5 class="van-ellipsis">{{ item.name }}</h5><div class="line-price"><span class="price">¥{{ item.min_price }}</span>起</div></RouterLink></div></div></template>

5.上传精选景点动态数据(by Axios)

文件地址:src\components\home\Fine.vue

<script setup>
import ListSight from '../common/ListSight.vue';
import { ref,onMounted } from 'vue';
import { ajax } from '@/utils/ajax';
import { SightApis } from '@/utils/apis';
//原精选景点静态数据
// const fineList = ref([
//     { id: 1, name: '景点名称', score: 5, price: 98 },
//     { id: 2, name: '景点名称', score: 4.5, price: 98 },
//     {.........},
// ])
const FineList = ref([])
const getFineList= ()=>{ajax.get(SightApis.sightListUrl,{params:{is_top:1}}).then(({data})=>{FineList.value = data.objectsconsole.log(FineList.value)})
}
onMounted(()=>{getFineList()
})
</script>

文件地址:src\components\common\ListSight.vue

<template><a href="#" class="sight-item"><img :src="item.main_img" alt=""><div class="right"><h5>{{ item.name }}</h5><van-rate v-model="item.score" allow-half readonly="" /><div class="tips">{{item.comment_count}}人点评|100%满意</div><div class="tips" light>{{item.province}}-{{item.city}}</div><div class="line-price">¥{{ item.min_price }}</div></div></a>
</template>


http://www.mrgr.cn/news/61318.html

相关文章:

  • (三)c#中const、static、readonly的区别
  • 哥大开发AI模型助力癌症和遗传病研究,近屿智能专注培养AI人才
  • 深入Android架构(从线程到AIDL)_22 IPC的Proxy-Stub设计模式04
  • RPC实现原理,怎么跟调用本地一样
  • Video VQGAN Model源码解析(VideoVAE+、VidTok 、OmniTokenizer、MAGE、MaskVIT、MaskGiT )
  • 【理论】测试框架体系TDD、BDD、ATDD、MBT、DDT介绍
  • 四款图片编辑软件,P图更轻松
  • 芯片固件加密方式
  • 晓羽扫码点餐快销版系统源码
  • 简易SQL注入原理及注入失败原因
  • k8s 二进制部署安装(三)
  • 玉石渲染用什么渲染软件最好?单品渲染用哪个软件?
  • Mask RCNN原理详解(个人学习笔记)
  • 河南洛宁200MW/400MWh电化学储能示范项目招标公告
  • 【机器学习】14. 集成学习 ensemble: bagging, boosting, 随机森林 random forest
  • Springboot自动装配原理
  • C#自定义事件的案例
  • XD6500S替代翱捷ASR6500S系列低功耗lora SPI模块SX1262/SX1278
  • Spring之HTTP客户端--RestTemplate的使用
  • 揭秘抖音SEO矩阵源码,霸屏秘籍!
  • bean生命周期
  • 煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答
  • 2、片元着色器之有向距离场(SDF)运算:并集、差集、交集
  • 【JavaScript】入门详解
  • 化繁为简的鸿蒙原生开发时代,“开发者”被高度关注
  • 豆瓣同城活动采集-过去一年到未来已定档活动