Я пытаюсь создать API отдыха, который может получать данные от пользователя, запускать на нем бизнес-логи c и возвращать в качестве ответа HTML Файл, который создается на основе переданных данных.
# models.py
from django.db import models
from django.utils import timezone
from django import forms
# Create your models here.
areas = [
('210', '210'),
('769', '769'),
('300', '300')
]
class LocationInfo(models.Model):
latitude = models.FloatField(name="GDT1Latitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=1)
longitude = models.FloatField(name="GDT1Longitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Longitude, second when extracting from Google Maps.",
default=1)
gdt2_lat = models.FloatField(name="GDT2Latitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=1)
gdt2_lon = models.FloatField(name="GDT2Longitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=1)
uav_lat = models.FloatField(name="UavLatitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=1)
uav_lon = models.FloatField(name="UavLongitude",
unique=True, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=1)
uav_elevation = models.FloatField(name="UavElevation",
max_length=100, default=1,
blank=False,
help_text="Enter the above ~Sea Level~ planned uav Elevation. "
)
area = models.CharField(
max_length=8,
choices=areas,
)
date_added = models.DateTimeField(default=timezone.now)
class Meta:
get_latest_by = 'date_added'
# serializers.py
from .models import LocationInfo
from rest_framework import serializers
class LocationInfoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = LocationInfo
fields = (
'id', 'GDT1Latitude', 'GDT1Longitude',
'GDT2Longitude', 'GDT2Latitude',
'UavLatitude', 'UavLongitude', 'UavElevation',
'date_added'
)
# views.py
class LocationInfoViewSet(ViewSet):
queryset = LocationInfo.objects.filter(id=1).values()
def retrieve(self, request, *args, **kwargs):
data = self.queryset.reverse()[0]
serialized_data = LocationInfoSerializer(data, many=False)
points = list(serialized_data.data.values())
gdt1 = (points[1], points[2])
gdt2 = (points[3], points[4])
uav = (points[5], points[6], points[-2])
# My business logic which returns an HTML File based on the data passed in.
data = main(gdt1, gdt2, uav)
# I got stuck here.
Все, чего мне здесь не хватает, - это как автоматически открыть сгенерированный файл HTML в браузере.
Сценарий logi c содержит две опции: одна для сохранения файла HTML и остановки, а другая - для автоматического открытия в браузере (я подумал о том, чтобы каким-то образом его использовать).
Мои логи c скрипт
# main.py
import numpy as np
from Project_Level.angle_condition import MeetAngleCond
from Project_Level.plot_folium import PlotOnMap
from Project_Level.utils import convert_to_xy
from .dataframes import GetDataToGeoPandas
from .positions_data_collecting import PositionsData
def main(gdt1, gdt2, uav):
# Get the complete latitude, longitude, lists.
positions_data = PositionsData(gdt1=gdt1,
gdt2=gdt2,
uav=uav)
full_lat_lon_list, lat_list, lon_list = positions_data.calculate_list_lens()
# Get cartesian coordinates for every point.
gdt1_xy = np.asarray(convert_to_xy(gdt1))
gdt2_xy = np.asarray(convert_to_xy(gdt2))
# Get the angle for every point in f_lat_lon_list
angles_list = MeetAngleCond()
plot_angles_list = angles_list.create_angles_list(lat_lon_list=full_lat_lon_list,
arrayed_gdt1=gdt1_xy,
arrayed_gdt2=gdt2_xy,
uav_elev=uav[-1])
get_final_lists = GetDataToGeoPandas()
lat_lon_a, lat_lon_b, optimal = get_final_lists.create_gpd_and_final_lists(angles_list=plot_angles_list,
lat_list=lat_list,
lon_list=lon_list)
plot = PlotOnMap(lat_lon_a=lat_lon_a,
lat_lon_b=lat_lon_b,
optimal=optimal)
plot.create_map(mid_point=gdt1, zoom=13)
plot.plot_gdt_and_triangulation(gdt1=gdt1, gdt2=gdt2, uav=uav)
plot.plugins()
# option 1: save the html file in the directory.
map_file = plot.return_html_link()
# option 2: open it automatically in the browesr.
# map_file = plot.auto_open(html_map_file='index.html')
return map_file