14.Header组件静态搭建 + jsonp

Header组件这里的标题下的图案实现为关键,实现如下:
/components/header/index.jsx文件内容如下: 
/*
    头部导航组件
 */
import React, { Component} from "react";


import './index.css'
export default class Header extends Component{
    render() {
        return (
            <div className="header">
                <div className="header-top">
                    <span>欢迎, admin</span>
                    <a href="#">退出</a>
                </div>
                <div className="header-bottom">
                    <div className="header-bottom-left">首页</div>
                    <div className="header-bottom-right">
                        <span>2023-2-24 19:59:55</span>
                        <img src="" alt="weather"/>
                        <span>晴</span>
                    </div>
                </div>
            </div>
        )
    }
}

其对应的样式实现如下:index.css【css】

.header{
    height: 80px;
    background-color: #fff;
}
.header .header-top{
    height: 40px;
    line-height: 40px;
    padding-right: 20px;
    text-align: right;
    border-bottom: 1px solid #1da57a;
}
.header .header-top span{
    margin-right: 10px;
}
.header .header-bottom{
    height: 40px;
    display: flex;
    align-items: center;
}
.header .header-bottom .header-bottom-left{
    width: 25%;
    text-align: center;
    font-size: 20px;
    /*  因为首页文字是在left的居中的,所以下尖 也得相对left 居中,left需要开启相对定位 */
    position: relative;
}
/*使用了伪类元素 ::after*/
.header .header-bottom .header-bottom-left::after{
    content: '';
    /* 开启绝对定位 */
    position: absolute;
    /* 此处right 50% 是指 这个border小三角的最右边的点,所以需要再向右移动小三角的一半长度的距离 */
    right: 50%;
    /* 开始向右和向下移动操作如下 top正值代表向下移动  translateX 水平方向移动50% */
    top: 100%;
    transform: translateX(50%);
    /* 让其变透明 即把颜色 改为 transparent*/
    border-top: 20px solid white;
    border-right: 20px solid transparent;
    border-bottom: 20px solid transparent;
    border-left: 20px solid transparent;
}
.header .header-bottom .header-bottom-right{
    width: 75%;
    text-align: right;
    margin-right: 30px;
}
.header .header-bottom .header-bottom-right img{
    margin: 0 15px;
    width: 30px;
    height: 20px;
}

实现效果如下:

jsonp使用,获取天气相关信息
安装jsonp:npm install  jsonp  【版本:0.2.1】
jsonp原理:只能处理GET类型请求;不是ajax请求,是一般的get请求; 
需要百度地图的开发者,直接百度搜百度地图开发者即可进入官网如下:
接着申请开发者,但是查询天气的信息需要创建服务端的应用,这个AK才可以访问天气信息 
这里改为了后端获取前端调取的方式:
后端代码如下: 
import requests
import json


SECRET_AK = "tWBu5SBmaejGeaxxxxxxxxxxxxx"


USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36 Edg/85.0.564.51"


headers = {"User-Agent": USER_AGENT}


def get_weather_data_by_city_id(city_id):
    if city_id:
        url = "https://api.map.baidu.com/weather/v1/?district_id={}&data_type=all&ak={}&output=json".format(city_id, SECRET_AK)
        html = requests.get(url, headers=headers)
        res = html.text  # 类型是 str
        res_obj = json.loads(res)
        if res_obj['status'] == 0:
            return res_obj["result"]["now"]
        else:
            return {}
    else:
        return {}



if __name__ == '__main__':
    get_weather_data_by_city_id("110100")

前端通过接口调取结果如下:

# 获取天气信息
@app.route('/manage/home/weather', methods=["get"])
def get_weather_info():
    city_id = request.args.get("city_id")
    weather_res = get_weather_data_by_city_id(city_id)
    res_data = {
        "code": 1,
        "data": weather_res,
        "message": "获取成功"
    }
    return jsonify(res_data)

 

 
posted @ 2023-03-27 14:53  以赛亚  阅读(38)  评论(0编辑  收藏  举报