atmosphericinversion/dashboard/views.py

496 lines
18 KiB
Python
Raw Normal View History

2021-03-26 03:39:49 +00:00
import json
import datetime
2021-03-31 03:35:52 +00:00
import os
import time
2021-03-26 03:39:49 +00:00
import imageio as imageio
from captcha.helpers import captcha_image_url
from captcha.models import CaptchaStore
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
2021-03-05 10:32:10 +00:00
from django.shortcuts import render
2021-03-26 03:39:49 +00:00
import matplotlib.pyplot as plt
2021-03-05 10:32:10 +00:00
# Create your views here.
def index(request):
2021-03-26 03:39:49 +00:00
return render(request, 'dashboard/index.html')
def refresh_captcha(request):
to_json_response = dict()
to_json_response['status'] = 1
to_json_response['new_cptch_key'] = CaptchaStore.generate_key()
to_json_response['new_cptch_image'] = captcha_image_url(to_json_response['new_cptch_key'])
return JsonResponse(to_json_response)
def user_login(request):
username = None
password = None
hash_key = CaptchaStore.generate_key()
image_url = captcha_image_url(hash_key)
if request.method == 'POST':
if not request.POST.get('username'):
messages.error(request, '请输入用户名')
else:
username = request.POST.get('username')
if not request.POST.get('password'):
messages.error(request, '请输入密码')
else:
password = request.POST.get('password')
captcha_input = request.POST.get('captcha_1')
captcha_hashkey = request.POST.get('captcha_0')
try:
CaptchaStore.objects.get(response=captcha_input.lower(), hashkey=captcha_hashkey,
expiration__gt=datetime.now()).delete()
except CaptchaStore.DoesNotExist:
messages.error(request, '验证码错误')
return HttpResponseRedirect('/login')
if username is not None and password is not None:
try:
user = authenticate(username=username, password=password)
if user is not None:
if user.check_password(password):
login(request, user)
return HttpResponseRedirect('/')
else:
messages.error(request, '无效的账号')
else:
messages.error(request, '账号或密码错误,请您确认账号和密码')
except:
messages.error(request, '账号或密码错误,请您确认账号和密码')
return render(request, 'dashboard/login.html', {'hash_key': hash_key, 'image_url': image_url})
def user_logout(request):
logout(request)
return HttpResponseRedirect('/')
from nrlmsise00.dataset import msise_4d
import numpy as np
def msise_flat_data(request):
2021-03-30 03:08:18 +00:00
date = request.GET.get('date')
print(date)
year = int(str(date).split('-')[0])
month = int(str(date).split('-')[1])
day = int(str(date).split('-')[2])
time = int(request.GET.get('time'))
lat = int(request.GET.get('lat'))
lon = int(request.GET.get('lon'))
height1 = int(request.GET.get('height1'))
height2 = int(request.GET.get('height2'))
interval = int(request.GET.get('interval'))
print(date,time,lat,lon,height1,height2,interval)
2021-03-26 03:39:49 +00:00
result = dict()
O = []
N2 = []
O2 = []
2021-03-30 03:08:18 +00:00
H = []
N = []
# try:
# alts = [200, 300, 400] # = [200, 300, 400] [km]
alts = np.arange(height1, height2, interval)
print(alts)
lats = [lat] # = [60, 70] [°N]
lons = [lon] # = [-70, -35, 0, 35, 70] [°E]
ds = msise_4d(datetime.datetime(year, month, day, time, 0, 0), alts, lats, lons)
print(ds.N)
for h in ds.H.data.tolist():
for h2 in h:
for h3 in h2:
for h4 in h3:
2021-03-30 10:58:26 +00:00
H.append(float(h4))
2021-03-30 03:08:18 +00:00
for o1 in ds.O.data.tolist():
for o2 in o1:
for o3 in o2:
for o4 in o3:
2021-03-30 10:58:26 +00:00
O.append(float(o4))
2021-03-30 03:08:18 +00:00
for n1 in ds.N2.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
2021-03-30 10:58:26 +00:00
N2.append(float(n4))
2021-03-30 03:08:18 +00:00
for o21 in ds.O2.data.tolist():
for o22 in o21:
for o23 in o22:
for o24 in o23:
2021-03-30 10:58:26 +00:00
O2.append(float(o24))
2021-03-30 03:08:18 +00:00
for n1 in ds.N.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
2021-03-30 10:58:26 +00:00
N.append(float(n4))
2021-03-30 03:08:18 +00:00
result['H'] = H
result['O'] = O
result['N2'] = N2
result['O2'] = O2
result['N'] = N
result['alts'] = list(map(int, alts))
print(result)
# except:
# pass
2021-03-26 03:39:49 +00:00
return HttpResponse(json.dumps({
"data": result
}
))
2021-03-30 10:58:26 +00:00
def msise_flat_string(request):
date = request.GET.get('date')
year = int(str(date).split('-')[0])
month = int(str(date).split('-')[1])
day = int(str(date).split('-')[2])
time = int(request.GET.get('time'))
lat = int(request.GET.get('lat'))
lon = int(request.GET.get('lon'))
height1 = int(request.GET.get('height1'))
height2 = int(request.GET.get('height2'))
interval = int(request.GET.get('interval'))
result = dict()
O = []
N2 = []
O2 = []
H = []
N = []
# try:
# alts = [200, 300, 400] # = [200, 300, 400] [km]
alts = np.arange(height1, height2, interval)
lats = [lat] # = [60, 70] [°N]
lons = [lon] # = [-70, -35, 0, 35, 70] [°E]
ds = msise_4d(datetime.datetime(year, month, day, time, 0, 0), alts, lats, lons)
for h in ds.H.data.tolist():
for h2 in h:
for h3 in h2:
for h4 in h3:
print(h4)
2021-03-31 01:10:07 +00:00
print("{0:0.3e}".format(int(h4)))
H.append("{0:0.3e}".format(int(h4)))
2021-03-30 10:58:26 +00:00
for o1 in ds.O.data.tolist():
for o2 in o1:
for o3 in o2:
for o4 in o3:
2021-03-31 01:10:07 +00:00
O.append("{0:0.3e}".format(int(o4)))
2021-03-30 10:58:26 +00:00
for n1 in ds.N2.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
2021-03-31 01:10:07 +00:00
N2.append("{0:0.3e}".format(int(n4)))
2021-03-30 10:58:26 +00:00
for o21 in ds.O2.data.tolist():
for o22 in o21:
for o23 in o22:
for o24 in o23:
2021-03-31 01:10:07 +00:00
O2.append("{0:0.3e}".format(int(o24)))
2021-03-30 10:58:26 +00:00
for n1 in ds.N.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
2021-03-31 01:10:07 +00:00
N.append("{0:0.3e}".format(int(n4)))
2021-03-30 10:58:26 +00:00
result['H'] = H
result['O'] = O
result['N2'] = N2
result['O2'] = O2
result['N'] = N
result['alts'] = list(map(int, alts))
# except:
# pass
return HttpResponse(json.dumps({
"data": result
}
))
2021-03-26 03:39:49 +00:00
def runing_model(request):
He = []
O = []
N2 = []
O2 = []
Ar = []
rho = []
Texo = []
Talt = []
lst = []
Ap = []
f107 = []
f107a = []
results = []
dts = []
frames = []
yearList = request.GET.get('yearList')
monthList = request.GET.get('monthList')
dayList = request.GET.get('dayList')
lonList = request.GET.get('lonList')
latList = request.GET.get('latList')
altList = request.GET.get('altList')
2021-03-30 03:47:27 +00:00
print(lonList)
2021-03-26 03:39:49 +00:00
dt = None
lon = []
lat = []
alt = []
dts = []
if yearList:
for i, value in enumerate(yearList[1:-1].split(',')):
year = int(value.split('"')[1])
month = int(monthList[1:-1].split(',')[i].split('"')[1])
dt = datetime.datetime(int(year), int(month), 1, 0, 0, 0)
dts.append(dt)
2021-03-30 03:47:27 +00:00
print(lonList[1:-1].split(',')[i])
2021-03-31 02:50:44 +00:00
if ";" in str(lonList[1:-1].split(',')[i]):
2021-03-30 03:47:27 +00:00
print("++++++++++++++++++++++++++++++++++++++++++++")
2021-03-31 02:50:44 +00:00
print(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]))
print(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]))
print(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]))
lon = np.arange(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]), int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[1]), int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[2]))
2021-03-30 03:47:27 +00:00
else:
lon.append(int(lonList[1:-1].split(',')[i].split('"')[1]))
2021-03-31 02:50:44 +00:00
if ";" in str(latList[1:-1].split(',')[i]) :
lat = np.arange(int(latList[1:-1].split(',')[i].split('"')[1].split(';')[0]), int(latList[1:-1].split(',')[i].split('"')[1].split(';')[1]), int(latList[1:-1].split(',')[i].split('"')[1].split(';')[2]))
2021-03-26 03:39:49 +00:00
2021-03-30 15:23:57 +00:00
2021-03-30 03:47:27 +00:00
else:
lat.append(int(latList[1:-1].split(',')[i].split('"')[1]))
2021-03-26 03:39:49 +00:00
alt.append(int(altList[1:-1].split(',')[i].split('"')[1]))
results.append(str(year) + str(month))
2021-03-30 03:08:18 +00:00
ds = msise_4d(dt, alt, lat, lon)
for h1 in ds.He.data.tolist():
for h2 in h1:
for h3 in h2:
for h4 in h3:
2021-03-30 10:58:26 +00:00
He.append(float(h4))
2021-03-30 03:08:18 +00:00
for o1 in ds.O.data.tolist():
for o2 in o1:
for o3 in o2:
for o4 in o3:
2021-03-30 10:58:26 +00:00
O.append(float(o4))
2021-03-30 03:08:18 +00:00
for n1 in ds.N2.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
2021-03-30 10:58:26 +00:00
N2.append(float(n4))
2021-03-30 03:08:18 +00:00
for o21 in ds.O2.data.tolist():
for o22 in o21:
for o23 in o22:
for o24 in o23:
2021-03-30 10:58:26 +00:00
O2.append(float(o24))
2021-03-30 03:08:18 +00:00
for ar1 in ds.Ar.data.tolist():
for ar2 in ar1:
for ar3 in ar2:
for ar4 in ar3:
2021-03-30 10:58:26 +00:00
Ar.append(float(ar4))
2021-03-30 03:08:18 +00:00
for r1 in ds.rho.data.tolist():
for r2 in r1:
for r3 in r2:
for r4 in r3:
2021-03-30 10:58:26 +00:00
rho.append(float(r4))
2021-03-30 03:08:18 +00:00
for te in ds.Texo.data.tolist():
for t2 in te:
for t3 in t2:
for t4 in t3:
2021-03-30 10:58:26 +00:00
Texo.append(float(t4))
2021-03-30 03:08:18 +00:00
for ta in ds.Talt.data.tolist():
for t2 in ta:
for t3 in t2:
for t4 in t3:
2021-03-30 10:58:26 +00:00
Talt.append(float(t4))
2021-03-30 03:08:18 +00:00
for l in ds.lst.data.tolist():
for l2 in l:
2021-03-30 10:58:26 +00:00
lst.append(float(l2))
2021-03-30 03:08:18 +00:00
for a in ds.Ap.data.tolist():
2021-03-30 10:58:26 +00:00
Ap.append(float(a))
2021-03-30 03:08:18 +00:00
for f7 in ds.f107.data.tolist():
2021-03-30 10:58:26 +00:00
f107.append(float(f7))
2021-03-30 03:08:18 +00:00
for fa in ds.f107a.data.tolist():
2021-03-30 10:58:26 +00:00
f107a.append(float(fa))
2021-03-30 03:08:18 +00:00
# return render(request,'dashboard/runing_model_results.html',{'He':He,'O':O,'N2':N2,'O2':O2,'Ar':Ar,'rho':rho,'Texo':Texo,'Talt':Talt,'lst':lst,'Ap':Ap,'f107':f107,'f107a':f107a,'results':list(map(int, results))})
2021-03-26 03:39:49 +00:00
return HttpResponse(json.dumps({
'He': He, 'O': O, 'N2': N2, 'O2': O2, 'Ar': Ar, 'rho': rho, 'Texo': Texo, 'Talt': Talt, 'lst': lst,
'Ap': Ap, 'f107': f107, 'f107a': f107a, 'results': list(map(int, results))
}))
return render(request, 'dashboard/xulie.html')
2021-03-30 10:58:26 +00:00
def runing_model_alts(request):
He = []
O = []
N2 = []
O2 = []
Ar = []
rho = []
Texo = []
Talt = []
lst = []
Ap = []
f107 = []
f107a = []
results = []
dts = []
frames = []
yearList = request.GET.get('yearList')
monthList = request.GET.get('monthList')
dayList = request.GET.get('dayList')
lonList = request.GET.get('lonList')
latList = request.GET.get('latList')
altList = request.GET.get('altList')
print(lonList)
dt = None
lon = []
lat = []
alt = []
dts = []
if yearList:
for i, value in enumerate(yearList[1:-1].split(',')):
year = int(value.split('"')[1])
month = int(monthList[1:-1].split(',')[i].split('"')[1])
dt = datetime.datetime(int(year), int(month), 1, 0, 0, 0)
dts.append(dt)
print(lonList[1:-1].split(',')[i])
2021-03-31 02:50:44 +00:00
if ";" in str(lonList[1:-1].split(',')[i]):
2021-03-30 10:58:26 +00:00
print("++++++++++++++++++++++++++++++++++++++++++++")
2021-03-31 02:50:44 +00:00
print(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]))
print(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]))
print(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]))
lon = np.arange(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]), int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[1]), int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[2]))
2021-03-30 10:58:26 +00:00
else:
lon.append(int(lonList[1:-1].split(',')[i].split('"')[1]))
2021-03-31 02:50:44 +00:00
if ";" in str(latList[1:-1].split(',')[i]) :
lat = np.arange(int(latList[1:-1].split(',')[i].split('"')[1].split(';')[0]), int(latList[1:-1].split(',')[i].split('"')[1].split(';')[1]), int(latList[1:-1].split(',')[i].split('"')[1].split(';')[2]))
2021-03-26 03:39:49 +00:00
2021-03-30 10:58:26 +00:00
else:
lat.append(int(latList[1:-1].split(',')[i].split('"')[1]))
alt.append(int(altList[1:-1].split(',')[i].split('"')[1]))
results.append(str(year) + str(month))
ds = msise_4d(dt, alt, lat, lon)
for h1 in ds.He[0,:,0,0].data.tolist():
He.append(float(h1))
for o1 in ds.O[0,:,0,0].data.tolist():
O.append(float(o1))
for n1 in ds.N2[0,:,0,0].data.tolist():
N2.append(float(n1))
for o21 in ds.O2[0,:,0,0].data.tolist():
O2.append(float(o21))
for ar1 in ds.Ar[0,:,0,0].data.tolist():
Ar.append(float(ar1))
for r1 in ds.rho[0,:,0,0].data.tolist():
rho.append(float(r1))
for te in ds.Texo[0,:,0,0].data.tolist():
Texo.append(float(te))
for ta in ds.Talt[0,:,0,0].data.tolist():
Talt.append(float(ta))
for l in ds.lst.data.tolist():
for l1 in l:
lst.append(float(l1))
for a in ds.Ap.data.tolist():
print(a)
Ap.append(float(a))
for f7 in ds.f107.data.tolist():
print(f7)
f107.append(float(f7))
for fa in ds.f107a.data.tolist():
print(fa)
f107a.append(float(fa))
# return render(request,'dashboard/runing_model_results.html',{'He':He,'O':O,'N2':N2,'O2':O2,'Ar':Ar,'rho':rho,'Texo':Texo,'Talt':Talt,'lst':lst,'Ap':Ap,'f107':f107,'f107a':f107a,'results':list(map(int, results))})
return HttpResponse(json.dumps({
'He': He, 'O': O, 'N2': N2, 'O2': O2, 'Ar': Ar, 'rho': rho, 'Texo': Texo, 'Talt': Talt, 'lst': lst,
'Ap': Ap, 'f107': f107, 'f107a': f107a, 'alt': list(map(int, alt))
}))
return render(request, 'dashboard/xulie.html')
2021-03-26 03:39:49 +00:00
2021-03-30 03:08:18 +00:00
def create_gif(request):
2021-03-31 02:50:44 +00:00
yearList = request.GET.get('yearList')
monthList = request.GET.get('monthList')
dayList = request.GET.get('dayList')
lonList = request.GET.get('lonList')
latList = request.GET.get('latList')
altList = request.GET.get('altList')
dt = None
lons = []
lats = []
alts = []
dts = []
message = None
if yearList:
for i, value in enumerate(yearList[1:-1].split(',')):
year = int(value.split('"')[1])
month = int(monthList[1:-1].split(',')[i].split('"')[1])
print(month)
d = datetime.datetime(int(year), int(month), 1, 0, 0, 0)
dts.append(d)
alts.append(int(altList[1:-1].split(',')[i].split('"')[1]))
if ';' in lonList[1:-1].split(',')[i].split('"')[1]:
lons = np.arange(int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[0]), int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[1]), int(lonList[1:-1].split(',')[i].split('"')[1].split(';')[2]))
else:
message = '请输入正确的数据格式'
2021-03-30 03:47:27 +00:00
2021-03-31 02:50:44 +00:00
if ';' in latList[1:-1].split(',')[i].split('"')[1]:
lats = np.arange(int(latList[1:-1].split(',')[i].split('"')[1].split(';')[0]),
int(latList[1:-1].split(',')[i].split('"')[1].split(';')[1]),
int(latList[1:-1].split(',')[i].split('"')[1].split(';')[2]))
2021-03-30 03:47:27 +00:00
2021-03-31 02:50:44 +00:00
else:
message = '请输入正确的数据格式'
2021-03-26 03:39:49 +00:00
fig = plt.figure() # (figsize=(16, 8))
fs = []
2021-03-31 03:35:52 +00:00
t = int(time.time())
2021-03-26 03:39:49 +00:00
for counter, dt in enumerate(dts):
2021-03-31 02:50:44 +00:00
print(dt, alts, lats, lons)
2021-03-26 03:39:49 +00:00
# broadcasting is done internally
ds = msise_4d(dt, alts, lats, lons)
# 创建一个没有 axes 的 figure
# fig.suptitle('Model nrlmsise00') # 添加标题以便我们辨别
lats = ds.lat.data
lons = ds.lon.data
x, y = np.meshgrid(lons, lats)
data = ds.He[0, 0, :, :].data
2021-03-31 02:50:44 +00:00
str_d = datetime.datetime.strftime(dt, '%Y-%m-%d')
2021-03-31 03:21:30 +00:00
plt.title(u'空间分布图(He)' + str_d, fontproperties='Microsoft YaHei')
plt.xlabel(u'经度', fontproperties='Microsoft YaHei')
plt.ylabel(u'纬度', fontproperties='Microsoft YaHei')
2021-03-26 03:39:49 +00:00
plt.contourf(x, y, data, cmap=plt.cm.Spectral, alpha=0.8)
plt.pause(0.3)
2021-03-31 02:50:44 +00:00
2021-03-26 12:58:30 +00:00
# f = '/static/image/%d.png' % (counter)
2021-03-31 03:35:52 +00:00
os.popen('mkdir /var/www/p3/atmosphericinversion/static/image/%s' % (t))
f = '/var/www/p3/atmosphericinversion/static/image/%s/%d.png' % (t,counter)
2021-03-31 03:09:49 +00:00
fig.savefig(f, dpi=200,bbox_inches="tight")
2021-03-26 12:53:17 +00:00
fs.append(f)
2021-03-26 03:39:49 +00:00
2021-03-26 12:53:17 +00:00
gif_name = 'nrlmsise00.gif'
2021-03-31 02:50:44 +00:00
# path_dest = '/static/image/'
2021-03-31 03:35:52 +00:00
path_dest = '/var/www/p3/atmosphericinversion/static/image/t/'
2021-03-26 12:53:17 +00:00
duration = 0.35
frames = []
for image_name in fs:
2021-03-26 12:58:30 +00:00
print(image_name)
2021-03-26 12:53:17 +00:00
frames.append(imageio.imread(image_name))
2021-03-30 03:08:18 +00:00
imageio.mimsave(path_dest + gif_name, frames, 'GIF', duration=duration)
2021-03-30 12:59:30 +00:00
lo = lons
la = lats
al = alts
2021-03-26 03:39:49 +00:00
return HttpResponse(json.dumps({
2021-03-30 12:59:30 +00:00
"image": fs,
2021-03-31 02:50:44 +00:00
'message':message,
2021-03-31 03:35:52 +00:00
't':t,
2021-03-26 03:39:49 +00:00
}))
2021-03-26 12:53:17 +00:00