前言
今天,发现了一个非常有趣的Python
地图应用程序
程序使用 Django
框架和 folium
库,可以简单快速的实现,只要插入数据就可以找到任何地方,并得到其所在地址。
实现过程
前提
- 已安装配置Python环境
- 安装并构建app项目
pip install django pip install folium django-admin startproject maps_project
实现过程
- 在
setting.py
的‘INSTALLED_APPS’
中app的名称
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', django.contrib.messages', 'django.contrib.staticfiles', 'maps', ]
- 在
models.py
中创建使用的对象模型
fromdjangoimportformsfromdjango.formsimportModelFormfrom .modelsimport*classCoordinatesForm(forms.ModelForm): lat=models.CharField(max_length=20) lon=models.CharField(max_length=20) classMeta: model=Coordenadasfields='__all__'
- 在
admin.py
中注册模型
fromdjango.contribimportadminfrom .modelsimport*admin.site.register(Coordenadas)
- 创建
forms.py
,使用django
的ModelForm
特性来实现表单处理
fromdjangoimportformsfromdjango.formsimportModelFormfrom .modelsimport*classCoordinatesForm(forms.ModelForm): lat=models.CharField(max_length=20) lon=models.CharField(max_length=20) classMeta: model=Coordenadasfields='__all__'
- 实现相关请求的处理
view.py
fromdjango.shortcutsimportrender, redirectfrom .modelsimportCoordenadasfrom .formsimport*importfoliumdefcoordinates_form(request): coordinates=Coordenadas.objects.all() form=CoordinatesForm() ifrequest.method=='POST': form=CoordinatesForm(request.POST) ifform.is_valid(): form.save() returnredirect("maps") context= { 'coordinates': coordinates, 'form' : form, } returnrender(request, 'maps/maps_form.html', context) defmaps(request): coordenadas=list(Coordenadas.objects.values_list('lat','lon'))[-1] map=folium.Map(coordenadas) folium.Marker(coordenadas).add_to(map) folium.raster_layers.TileLayer('Stamen Terrain').add_to(map) folium.raster_layers.TileLayer('Stamen Toner').add_to(map) folium.raster_layers.TileLayer('Stamen Watercolor').add_to(map) folium.LayerControl().add_to(map) map=map._repr_html_() context= { 'map': map, } returnrender(request, 'maps/maps.html', context)
- 配置
urls.py
,导入相关视图
fromdjango.contribimportadminfromdjango.urlsimportpathfrom . importviewsurlpatterns= [ path('',views.coordinates_form, name='coordinates-form'), path('map', views.maps, name='maps'), ]
- 页面展示代码
maps.html
<htmllang="en"> {% block content %} <head><metacharset="UTF-8"><title>Map</title></head><body><div> {{ map | safe }}</div></body></html> {% endblock %}
8.表单页面 map_form.html
{% extends 'maps/base.html' %} {% block content %} <divclass="header-bar"><ahref="{% url 'maps' %}">← Map</a></div><divclass="card-body"><formmethod= "POST"action =""> {% csrf_token %} {{form.as_p}} <inputclass="button"type="submit"value="submit"></form></div>{% endblock %}
9.启动项目
python manage.py startapp maps
然后打开浏览器172.0.0.1:8000
即可访问
实现效果
网络异常,图片无法展示
|
网络异常,图片无法展示
|