今天,发现了一个非常有趣的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
中创建使用的对象模型
from django import forms
from django.forms import ModelForm
from .models import *
class CoordinatesForm(forms.ModelForm):
lat = models.CharField(max_length=20)
lon = models.CharField(max_length=20)
class Meta:
model = Coordenadas
fields = '__all__'
- 在
admin.py
中注册模型
from django.contrib import admin
from .models import *
admin.site.register(Coordenadas)
- 创建
forms.py
,使用django
的ModelForm
特性来实现表单处理
from django import forms
from django.forms import ModelForm
from .models import *
class CoordinatesForm(forms.ModelForm):
lat = models.CharField(max_length=20)
lon = models.CharField(max_length=20)
class Meta:
model = Coordenadas
fields = '__all__'
- 实现相关请求的处理
view.py
from django.shortcuts import render, redirect
from .models import Coordenadas
from .forms import *
import folium
def coordinates_form(request):
coordinates = Coordenadas.objects.all()
form = CoordinatesForm()
if request.method == 'POST':
form = CoordinatesForm(request.POST)
if form.is_valid():
form.save()
return redirect("maps")
context = {
'coordinates': coordinates,
'form' : form,
}
return render(request, 'maps/maps_form.html', context)
def maps(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,
}
return render(request, 'maps/maps.html', context)
- 配置
urls.py
,导入相关视图
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('',views.coordinates_form, name = 'coordinates-form'),
path('map', views.maps, name = 'maps'),
]
- 页面展示代码
maps.html
<!DOCTYPE html>
<html lang="en">
{% block content %}
<head>
<meta charset="UTF-8">
<title>Map</title>
</head>
<body>
<div> {{ map | safe }}</div>
</body>
</html>
{% endblock %}
8.表单页面 map_form.html
{% extends 'maps/base.html' %}
{% block content %}
<div class="header-bar">
<a href="{% url 'maps' %}">← Map</a>
</div>
<div class="card-body">
<form method= "POST" action ="">
{% csrf_token %}
{{form.as_p}}
<input class="button" type="submit" value="submit">
</form>
</div>
{% endblock %}
9.启动项目
python manage.py startapp maps
然后打开浏览器172.0.0.1:8000
即可访问
实现效果
了解更详细内容,请移步:medium.com/@carlosmarc…