使用 Folium 实现的 Django 地图应用程序

简介: 使用 Folium 实现一个简单的 Django 地图应用程序

前言

今天,发现了一个非常有趣的Python地图应用程序


程序使用 Django 框架和 folium 库,可以简单快速的实现,只要插入数据就可以找到任何地方,并得到其所在地址。


实现过程


前提


  1. 已安装配置Python环境
  2. 安装并构建app项目
pip install django 
pip install folium 
django-admin startproject maps_project


实现过程


  1. 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', ]


  1. models.py中创建使用的对象模型
fromdjangoimportformsfromdjango.formsimportModelFormfrom .modelsimport*classCoordinatesForm(forms.ModelForm):
lat=models.CharField(max_length=20)
lon=models.CharField(max_length=20)
classMeta:
model=Coordenadasfields='__all__'


  1. admin.py 中注册模型
fromdjango.contribimportadminfrom .modelsimport*admin.site.register(Coordenadas)


  1. 创建 forms.py,使用djangoModelForm特性来实现表单处理
fromdjangoimportformsfromdjango.formsimportModelFormfrom .modelsimport*classCoordinatesForm(forms.ModelForm):
lat=models.CharField(max_length=20)
lon=models.CharField(max_length=20)
classMeta:
model=Coordenadasfields='__all__'


  1. 实现相关请求的处理 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)


  1. 配置 urls.py,导入相关视图
fromdjango.contribimportadminfromdjango.urlsimportpathfrom . importviewsurlpatterns= [
path('',views.coordinates_form, name='coordinates-form'),
path('map', views.maps, name='maps'),
  ]
  1. 页面展示代码 maps.html


<!DOCTYPE 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' %}">&#8592; 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 即可访问


实现效果


网络异常,图片无法展示
|


网络异常,图片无法展示
|

目录
相关文章
|
19天前
|
API 数据安全/隐私保护 网络架构
在django3中配置应用的权限
【6月更文挑战第9天】该文档介绍了Django REST Framework的权限管理。总结来说,本文介绍如何设置严格项目权限和如何通过自定义权限控制对特定资源的访问。
31 10
在django3中配置应用的权限
|
20天前
|
存储 JSON API
在django3应用中使用现代的JWT鉴权
【6月更文挑战第8天】本文介绍流行的鉴权方式,JSON Web Tokens (JWT) 是一种验证JSON数据所有者的机制,它是一个编码的、安全的字符串,包含可信任的数据且能加密签名。无状态的令牌认证允许客户端存储令牌并将其在每次请求。
27 8
在django3应用中使用现代的JWT鉴权
|
21天前
|
存储 安全 API
在django中创建项目时应用基础鉴权
【6月更文挑战第7天】本文探讨了在django中的API权限管理,即用户认证的两种方法:基础认证和会话认证。Django REST Framework默认使用会话认证,但也提供基础、令牌和JWT等其他选项。根据项目需求,应谨慎选择适合的认证方案。
65 3
在django中创建项目时应用基础鉴权
|
24天前
|
前端开发 JavaScript Linux
分离前后端react和django3构建的应用
【6月更文挑战第4天】在本文中,我们介绍了如何设置React前端并连接到Django后端。并讨论了前后端分离的好处,并计划扩展API以支持更多HTTP操作和用户身份验证功能。
56 5
分离前后端react和django3构建的应用
|
22天前
|
安全 API 数据安全/隐私保护
在django应用中使用权限控制
【6月更文挑战第6天】本文介绍在Django REST Framework中,项目权限通过默认设置如AllowAny、IsAuthenticated等管理。通过定制权限策略,确保了API的安全访问。
75 1
在django应用中使用权限控制
|
2天前
|
中间件 开发者 C++
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
|
2天前
|
前端开发 Python
Django框架中Ajax GET与POST请求的实战应用
Django框架中Ajax GET与POST请求的实战应用
|
14天前
|
存储 流计算 Python
使用Django构建即时通讯应用的最简单方法
使用Django构建即时通讯应用的最简单方法
|
16天前
|
存储 安全 数据库
在django应用中使用会话提示用户体验
【6月更文挑战第12天】该文档介绍了Django中如何利用会话(session)为用户提供定制体验。通过会话,开发者能更好地管理和个性化匿名用户的网站体验。参考[Django官方文档](https://docs.djangoproject.com/en/4.0/top
21 2
|
18天前
|
API 数据库 网络架构
在django中应用视图和路由集
【6月更文挑战第10天】 本文介绍viewsets`和`Routers`是Django REST framework中用于简化API视图和路由的工具。它们提供了一个抽象层,允许用更少的代码替代多个相关视图,并能自动生成URL。定义`UserList`和`UserDetail`视图集,分别用于列表和详情展示。
15 3