OpenDroneMap-WebODM/app/views/app.py

156 wiersze
5.2 KiB
Python
Czysty Zwykły widok Historia

import json
2017-06-08 23:07:59 +00:00
from django.contrib.auth import login
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
from django.http import Http404
from django.shortcuts import render, redirect, get_object_or_404
from guardian.shortcuts import get_objects_for_user
from nodeodm.models import ProcessingNode
from app.models import Project, Task
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _
2017-06-08 23:07:59 +00:00
from django import forms
2020-03-20 16:10:40 +00:00
from webodm import settings
2016-08-10 20:23:17 +00:00
def index(request):
2020-03-20 16:10:40 +00:00
# Check first access
if User.objects.filter(is_superuser=True).count() == 0:
2020-03-20 16:10:40 +00:00
if settings.SINGLE_USER_MODE:
# Automatically create a default account
User.objects.create_superuser('admin', 'admin@localhost', 'admin')
else:
# the user is expected to create an admin account
return redirect('welcome')
if settings.SINGLE_USER_MODE and not request.user.is_authenticated:
login(request, User.objects.get(username="admin"), 'django.contrib.auth.backends.ModelBackend')
return redirect(settings.LOGIN_REDIRECT_URL if request.user.is_authenticated
else settings.LOGIN_URL)
2016-08-10 20:23:17 +00:00
@login_required
2016-08-10 20:23:17 +00:00
def dashboard(request):
no_processingnodes = ProcessingNode.objects.count() == 0
2020-03-20 16:38:03 +00:00
if no_processingnodes and settings.PROCESSING_NODES_ONBOARDING is not None:
return redirect(settings.PROCESSING_NODES_ONBOARDING)
no_tasks = Task.objects.filter(project__owner=request.user).count() == 0
# Create first project automatically
if Project.objects.count() == 0:
Project.objects.create(owner=request.user, name=_("First Project"))
2016-09-29 01:07:53 +00:00
return render(request, 'app/dashboard.html', {'title': _('Dashboard'),
'no_processingnodes': no_processingnodes,
'no_tasks': no_tasks
})
@login_required
def map(request, project_pk=None, task_pk=None):
title = _("Map")
if project_pk is not None:
project = get_object_or_404(Project, pk=project_pk)
if not request.user.has_perm('app.view_project', project):
raise Http404()
if task_pk is not None:
task = get_object_or_404(Task.objects.defer('orthophoto_extent', 'dsm_extent', 'dtm_extent'), pk=task_pk, project=project)
title = task.name
mapItems = [task.get_map_items()]
else:
title = project.name
mapItems = project.get_map_items()
return render(request, 'app/map.html', {
'title': title,
'params': {
'map-items': json.dumps(mapItems),
'title': title,
'public': 'false'
}.items()
})
@login_required
def model_display(request, project_pk=None, task_pk=None):
title = _("3D Model Display")
if project_pk is not None:
project = get_object_or_404(Project, pk=project_pk)
if not request.user.has_perm('app.view_project', project):
raise Http404()
if task_pk is not None:
task = get_object_or_404(Task.objects.defer('orthophoto_extent', 'dsm_extent', 'dtm_extent'), pk=task_pk, project=project)
title = task.name
else:
raise Http404()
return render(request, 'app/3d_model_display.html', {
'title': title,
'params': {
'task': json.dumps(task.get_model_display_params()),
'public': 'false'
}.items()
})
2020-12-14 21:53:25 +00:00
def about(request):
return render(request, 'app/about.html', {'title': _('About'), 'version': settings.VERSION})
@login_required
def processing_node(request, processing_node_id):
pn = get_object_or_404(ProcessingNode, pk=processing_node_id)
if not pn.update_node_info():
messages.add_message(request, messages.constants.WARNING, '{} seems to be offline.'.format(pn))
return render(request, 'app/processing_node.html',
{
'title': 'Processing Node',
'processing_node': pn,
'available_options_json': pn.get_available_options_json(pretty=True)
})
2017-06-08 23:07:59 +00:00
class FirstUserForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'password', )
widgets = {
'password': forms.PasswordInput(),
}
def welcome(request):
if User.objects.filter(is_superuser=True).count() > 0:
return redirect('index')
2017-06-09 13:45:23 +00:00
fuf = FirstUserForm()
2017-06-08 23:07:59 +00:00
if request.method == 'POST':
2017-06-09 13:45:23 +00:00
fuf = FirstUserForm(request.POST)
2017-06-08 23:07:59 +00:00
if fuf.is_valid():
admin_user = fuf.save(commit=False)
admin_user.password = make_password(fuf.cleaned_data['password'])
2017-06-08 23:07:59 +00:00
admin_user.is_superuser = admin_user.is_staff = True
admin_user.save()
# Log-in automatically
login(request, admin_user, 'django.contrib.auth.backends.ModelBackend')
return redirect('dashboard')
return render(request, 'app/welcome.html',
{
'title': _('Welcome'),
2017-06-08 23:07:59 +00:00
'firstuserform': fuf
})
2018-03-02 15:57:21 +00:00
def handler404(request):
return render(request, '404.html', status=404)
def handler500(request):
return render(request, '500.html', status=500)