总述

2020年8月6日。是实训的第14天。
今天上午孟老师带我们学习了如何将调用第三方的公开API以及如何使用HBuilder将web应用快速打包成安卓可以使用的apk包。
调用第三方的公开API,是以高德地图为例的。说实话,高德地图作为一个成熟的商业地图导航提供商,它的API调用并不算太简单。
老师还演示了如何将其他地方下载过来的数据与高德地图API结合的过程,过程十分繁琐,但也有趣。

调用API

高德地图

打开高德地图开放平台

点击注册并完成个人开发者认证。
点击控制台,在我的应用-应用管理中,创建新应用。

点击左上角的添加,选择Web端的服务平台。

注意这个Key,后续会使用到。

点击开发支持,有API文档可供阅读。

复制一个示例到html文件中。点击运行,则可看到地图效果。


pandas to_dict 的用法

1
2
3
4
5
from django.test import TestCase
import pandas as pd
data = pd.read_excel('黑龙江gps.xlsx')
data_dict=data.to_dict(orient='split')
print(data_dict['data'])

pandas 中的to_dict 可以对DataFrame类型的数据进行转换
可以选择六种的转换类型,分别对应于参数 ‘dict’, ‘list’, ‘series’, ‘split’, ‘records’, ‘index’,下面逐一介绍每种的用法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Help on method to_dict in module pandas.core.frame:

to_dict(orient='dict') method of pandas.core.frame.DataFrame instance
Convert DataFrame to dictionary.

Parameters
----------
orient : str {'dict', 'list', 'series', 'split', 'records', 'index'}
Determines the type of the values of the dictionary.

- dict (default) : dict like {column -> {index -> value}}
- list : dict like {column -> [values]}
- series : dict like {column -> Series(values)}
- split : dict like
{index -> [index], columns -> [columns], data -> [values]}
- records : list like
[{column -> value}, ... , {column -> value}]
- index : dict like {index -> {column -> value}}

.. versionadded:: 0.17.0

Abbreviations are allowed. `s` indicates `series` and `sp`
indicates `split`.

Returns
-------
result : dict like {column -> {index -> value}}

选择参数orient=‘dict’

dict也是默认的参数,下面的data数据类型为DataFrame结构, 会形成 {column -> {index -> value}}这样的结构的字典,可以看成是一种双重字典结构。

  • 单独提取每列的值及其索引,然后组合成一个字典
  • 再将上述的列属性作为关键字(key),值(values)为上述的字典

查询方式为 :data_dict[key1][key2]

  • data_dict 为参数选择orient=’dict’时的数据名
  • key1 为列属性的键值(外层)
  • key2 为内层字典对应的键值

选择参数orient=‘list’

和1中比较相似,只不过内层变成了一个列表,结构为{column -> [values]}
查询方式为: data_list[keys][index]

选择参数orient=‘series’

形成结构**{column -> Series(values)}**
调用格式为:data_series[key1][key2]或data_dict[key1]

  • data_series 为数据对应的名字
  • key1 为列属性的键值,如本例中的’age’ , ‘embarked’等
  • key2 使用数据原始的索引(可选)

选择参数orient=‘split’

形成**{index -> [index], columns -> [columns], data -> [values]}**的结构,是将数据、索引、属性名单独脱离出来构成字典
调用方式有 data_split[‘index’],data_split[‘data’],data_split[‘columns’]+ data_list 为关键字orient=‘list’ 时对应的数据名

  • keys 为列属性的键值,如本例中的’age’ , 'embarked’等
  • index 为整型索引,从0开始到最后

选择参数orient='records’时

形成***[{column -> value}, … , {column -> value}]***的结构
整体构成一个列表,内层是将原始数据的每行提取出来形成字典
调用格式为data_records[index][key1]

选择参数orient='index’时

形成{index -> {column -> value}}的结构,调用格式正好和’dict’对应的反过来,请读者自己思考

django-cors-headers 解决跨域问题

浏览器具有 “同源策略的限制”,导致 发送ajax请求 + 跨域 存在无法获取数据。

  • 简单请求,发送一次请求。
  • 复杂请求,先options请求做预检,然后再发送真正请求

1. pip安装
pip install django-cors-headers
2. 添加到setting的app中

1
2
3
4
5
6
INSTALLED_APPS = (
...
'corsheaders',
...
)

3. 添加中间件

1
2
3
4
5
6
7
MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]

4. setting下面添加下面的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)

CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)

启动项目时,使用python manage.py runserver 0.0.0.0:8000