atmosphericinversion/dashboard/views.py

492 lines
18 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import datetime
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
from django.shortcuts import render
import matplotlib.pyplot as plt
# Create your views here.
def index(request):
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):
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)
result = dict()
O = []
N2 = []
O2 = []
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:
H.append(float(h4))
for o1 in ds.O.data.tolist():
for o2 in o1:
for o3 in o2:
for o4 in o3:
O.append(float(o4))
for n1 in ds.N2.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
N2.append(float(n4))
for o21 in ds.O2.data.tolist():
for o22 in o21:
for o23 in o22:
for o24 in o23:
O2.append(float(o24))
for n1 in ds.N.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
N.append(float(n4))
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
return HttpResponse(json.dumps({
"data": result
}
))
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)
print("{0:X}".format(int(h4)))
H.append("{0:X}".format(int(h4)))
for o1 in ds.O.data.tolist():
for o2 in o1:
for o3 in o2:
for o4 in o3:
O.append("{0:X}".format(int(o4)))
for n1 in ds.N2.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
N2.append("{0:X}".format(int(n4)))
for o21 in ds.O2.data.tolist():
for o22 in o21:
for o23 in o22:
for o24 in o23:
O2.append("{0:X}".format(int(o24)))
for n1 in ds.N.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
N.append("{0:X}".format(int(n4)))
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
}
))
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')
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])
if "." in str(lonList[1:-1].split(',')[i]):
print("++++++++++++++++++++++++++++++++++++++++++++")
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]))
else:
lon.append(int(lonList[1:-1].split(',')[i].split('"')[1]))
if "," in str(latList[1:-1].split(',')[i]) or "" 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]))
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.data.tolist():
for h2 in h1:
for h3 in h2:
for h4 in h3:
He.append(float(h4))
for o1 in ds.O.data.tolist():
for o2 in o1:
for o3 in o2:
for o4 in o3:
O.append(float(o4))
for n1 in ds.N2.data.tolist():
for n2 in n1:
for n3 in n2:
for n4 in n3:
N2.append(float(n4))
for o21 in ds.O2.data.tolist():
for o22 in o21:
for o23 in o22:
for o24 in o23:
O2.append(float(o24))
for ar1 in ds.Ar.data.tolist():
for ar2 in ar1:
for ar3 in ar2:
for ar4 in ar3:
Ar.append(float(ar4))
for r1 in ds.rho.data.tolist():
for r2 in r1:
for r3 in r2:
for r4 in r3:
rho.append(float(r4))
for te in ds.Texo.data.tolist():
for t2 in te:
for t3 in t2:
for t4 in t3:
Texo.append(float(t4))
for ta in ds.Talt.data.tolist():
for t2 in ta:
for t3 in t2:
for t4 in t3:
Talt.append(float(t4))
for l in ds.lst.data.tolist():
for l2 in l:
lst.append(float(l2))
for a in ds.Ap.data.tolist():
Ap.append(float(a))
for f7 in ds.f107.data.tolist():
f107.append(float(f7))
for fa in ds.f107a.data.tolist():
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, 'results': list(map(int, results))
}))
return render(request, 'dashboard/xulie.html')
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])
if "." in str(lonList[1:-1].split(',')[i]):
print("++++++++++++++++++++++++++++++++++++++++++++")
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]))
else:
lon.append(int(lonList[1:-1].split(',')[i].split('"')[1]))
if "," in str(latList[1:-1].split(',')[i]) or "" 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]))
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')
def create_gif(request):
# 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 = []
# 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)
# dt = datetime.datetime(int(year), int(month), 1, 0, 0, 0)
# dts.append(dt)
# lons.append(int(lonList[1:-1].split(',')[i].split('"')[1]))
#
# lats.append(int(latList[1:-1].split(',')[i].split('"')[1]))
#
# alts.append(int(altList[1:-1].split(',')[i].split('"')[1]))
# 日期
dt1 = datetime.datetime(2020, 1, 22, 8, 5, 20) # 年、月、日、时、分、秒
dt2 = datetime.datetime(2020, 2, 22, 8, 5, 20) # 年、月、日、时、分、秒
dt3 = datetime.datetime(2020, 3, 22, 8, 5, 20)
dt4 = datetime.datetime(2020, 4, 22, 8, 5, 20)
dt5 = datetime.datetime(2020, 5, 22, 8, 5, 20)
dt6 = datetime.datetime(2020, 6, 22, 8, 5, 20)
dts = [dt1, dt2, dt3, dt4, dt5, dt6]
# 海拔高度
alts = np.arange(1000, 1001, 1.) # = [200, 300, 400] [km]
# 纬度
lats = np.arange(-90, 91, 10.) # = [60, 70] [°N]
# 经度
lons = np.arange(-70, 71, 10) # = [-70, -35, 0, 35, 70] [°E]
fig = plt.figure() # (figsize=(16, 8))
fs = []
for counter, dt in enumerate(dts):
# 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
plt.contourf(x, y, data, cmap=plt.cm.Spectral, alpha=0.8)
plt.pause(0.3)
plt.title(u'按时间',fontproperties='SimHei')
# plt.legend()
# plt.show()
# time.sleep(2)
# f = '/static/image/%d.png' % (counter)
f = '/var/www/p3/atmosphericinversion/static/image/%d.png' % (counter)
fs.append(f)
# fig.savefig(f, dpi=200)
gif_name = 'nrlmsise00.gif'
path_dest = '/var/www/p3/atmosphericinversion/static/image/'
duration = 0.35
frames = []
for image_name in fs:
print(image_name)
frames.append(imageio.imread(image_name))
imageio.mimsave(path_dest + gif_name, frames, 'GIF', duration=duration)
return HttpResponse(json.dumps({
"image": fs
}))