views.py 3.76 KB
#-*- coding:utf-8

from django.shortcuts import render
from django.db.models import Count, Max, Sum, Avg
from urllib.request import urlopen
from .models import RT_edu, Maps, RT_agri_policy, ProductData, AuctionData
from bs4 import BeautifulSoup
import pandas as pd

# Create your views here.

def returnfarm_dbselect(contenttype, maptype):
    if maptype == 9:
        mapt = 'city'
    elif maptype == 10:
        mapt = 'cntr'
    if contenttype=='policy':
        myrtrn = RT_agri_policy.objects.values(mapt).annotate(count=Count(mapt))
        return myrtrn
    elif contenttype=='edu':
        myrtrn = RT_edu.objects.values(mapt).annotate(count=Count(mapt))
        return myrtrn


# 공공데이터 불러오는 부분
def publicdata(densitytype):
    # 통계청 귀농가구원의 시도별, 시군별, 연령별 
    if densitytype == 'returnfarm_agri_population':
        url = 'http://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=M2I3MWFhNzE2MjlkYjhhNzgwNWFjNWQ3MGU0MzY5Y2Y=&format=json&jsonVD=Y&userStatsId=tjsdk3105/101/DT_1A02003/2/1/20200529160216&prdSe=Y&newEstPrdCnt=1'
    elif densitytype == 'population':
        url = 'http://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=M2I3MWFhNzE2MjlkYjhhNzgwNWFjNWQ3MGU0MzY5Y2Y=&format=json&jsonVD=Y&userStatsId=tjsdk3105/101/DT_1IN1502/2/1/20200611044341&prdSe=Y&newEstPrdCnt=1'
    data = urlopen(url).read().decode('utf8')
    return data

def main(request):
    return render(request, 'main.html')


# html에 넘겨주는 부분

####### return farm ##########
def returnfarm(request):
    try:
        maptype = request.GET['maptype']
        contenttype = request.GET['contenttype']
        mapp = Maps.objects.get(id=int(maptype))
        exportdatas = returnfarm_dbselect(contenttype, int(maptype))
        maxx = exportdatas.aggregate(maxx=Max('count'))
    except:
        mapp = Maps.objects.get(id=9)
        exportdatas = {}
        maxx = {'maxx' : 100}
    context = {'exportdata': exportdatas, 'maps':mapp, 'max':maxx}
    return render(request, 'returnfarm.html', context)

######## population ###########
def population(request):
    try:
        maptype = request.GET['maptype']
        densitytype = request.GET['densitytype']
        mapp = Maps.objects.get(id=int(maptype))
        exportdatas = publicdata(densitytype)
    except:
        mapp = Maps.objects.get(id=9)
        exportdatas = {}
    context = {'exportdata': exportdatas, 'maps':mapp}
    return render(request, 'population.html', context)

########### market ##########
def market(request):
    product_large = ProductData.objects.values('large_cd','large_nm').distinct()
    product_medium = ProductData.objects.values('medium_cd','medium_nm').distinct()
    product_small = ProductData.objects.values('small_cd','small_nm')
    try:
        maptype = request.GET['maptype']
        mapp = Maps.objects.get(id=int(maptype))
        largefilter = request.GET['ctgr_large']
        mediumfilter = request.GET['ctgr_medium']
        if mediumfilter=='all':
            if largefilter=='all':
                exportdatas = AuctionData.objects.values('sanji_nm').annotate(count=Count('sanji_nm'))
            else:
                exportdatas = AuctionData.objects.values('sanji_nm').filter(large_cd=largefilter).annotate(count=Count('sanji_nm'))
        else:
            exportdatas = AuctionData.objects.values('sanji_nm').filter(medium_cd=mediumfilter).annotate(count=Count('sanji_nm'))
    except:
        mapp = Maps.objects.get(id=9)
        exportdatas = AuctionData.objects.values('sanji_nm').annotate(count=Count('sanji_nm'),avrg=Avg('mumm_amt'))
    maxx = exportdatas.aggregate(maxx=Sum('count'))
    context = {'largedata' : product_large, 'mediumdata': product_medium, 'maps':mapp, 'max':maxx, 'exportdata':exportdatas}
    return render(request, 'market.html', context)