[Day 18] 第一主餐 pt.10-中文资料存料至文中,django如何存取中文

前一篇我们把资料库修改完成了
今天我们就要来把BeautifulSoup的中文资料送过去了
由於昨天遭遇了一些困难,今天终於排除成功啦
废话不多说,咱们累狗~

你需要我的资料,我需要你的框架

好的,上一篇处理完之後,这一篇接下来就是把url跟views做修改啦
毕竟views的API改了,url当然也要跟着改
所以我们先把views.py的档案改成如下

from django.shortcuts import render
from django.http import JsonResponse #刚刚的JsonResponse套件
from stonks_index.models import stonks_DB #从models.py import DBTest 物件
from django.views.decorators.csrf import csrf_exempt
import json

# Create your views here.
@csrf_exempt
def set_stonks_data(request):

    #取得post data
    data = request.POST

    #检查所有栏位是否都有值,若有栏位没有值,回传400
    if 'comp_id' not in data:
        return JsonResponse({"status": False, "message": "comp_id column cannot be empty"}, status=400)
    if 'year' not in data:
        return JsonResponse({"status": False, "message": "year column cannot be empty"}, status=400)
    if 'season' not in data:
        return JsonResponse({"status": False, "message": "season column cannot be empty"}, status=400)
    if 'balance_sheet' not in data:
        return JsonResponse({"status": False, "message": "balance_sheet column cannot be empty"}, status=400)
    if 'income_statement' not in data:
        return JsonResponse({"status": False, "message": "income_statement column cannot be empty"}, status=400)

    #建立新的DBTest object
    new_obj = stonks_DB()

    #一个萝卜一个坑
    new_obj.comp_id = data.get('comp_id', None)
    new_obj.year = data.get('year', None)
    new_obj.season = data.get('season', None)
    new_obj.balance_sheet = data.get('balance_sheet', None)
    new_obj.income_statement = data.get('income_statement', None)

    #储存object
    new_obj.save()

    #回传200,这里使用JsonResponse
    return JsonResponse(data={'msg':'add object success.'}, status=200)

@csrf_exempt
def get_stonks_data(request):

    data = request.POST

    #检查每栏位是否有值,若有一栏位没有值,回传400
    if 'comp_id' not in data:
        return JsonResponse({"status": False, "message": "comp_id column cannot be empty"}, status=400)
    if 'year' not in data:
        return JsonResponse({"status": False, "message": "year column cannot be empty"}, status=400)
    if 'season' not in data:
        return JsonResponse({"status": False, "message": "season column cannot be empty"}, status=400)

    #将每个request之栏位捞出
    post_comp_id = data.get('comp_id', None)
    post_year = data.get('year', None)
    post_season = data.get('season', None)

    #搜寻符合条件之object
    filter_obj = stonks_DB.objects.filter(comp_id = post_comp_id, year = post_year, season = post_season)

    #如无符合条件之data,回传400
    if filter_obj.count() == 0:
        return JsonResponse({"status": False, "message": "cannot find package"}, status=400)

    #取出第一笔资料
    filter_obj = filter_obj.first()

    #将捞出之data变成dict, 记得内容要转成json
    return_dict = {'balance_sheet':json.loads(filter_obj.balance_sheet), 'income_statement':json.loads(filter_obj.income_statement)}

    #回传200,这里使用JsonResponse, 把dict之资料变成JSON
    return JsonResponse(data=return_dict, status=200)

通常在设计API时,我们会用get关键字代表资料捞出,set代表资料存入
因此这里我们用get跟set代表财报资料的存入捞出
然後url.py记得也要顺便改

from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'set_stonks_data/$', views.set_stonks_data),
    url(r'get_stonks_data/$', views.get_stonks_data),
]

处理完之後试跑一下runserver看有没有问题

改完了server端,接下来就要改好久不见的beautifulsoup端了
还记得我们当时使用了request捞取财报资料吗
现在我们要来用request把资料送到服务器里面了
首先我们将之前档案最後这一段改成如下

url = "http://172.16.15.123:8000/stonks/set_stonks_data/"
data={'comp_id':1201,
    'year':109,
    'season':1,
    'balance_sheet':json.dumps(balance_sheet),
    'income_statement':json.dumps(income_statement)}
res_post = requests.post(url=url,data=data,headers=headers)
print(res_post)

改完之後执行bs4的py档

回传200,成功
接下来我们去看看资料库

成功收到资料

接下来就是把资料回传回来啦
这边我们就可以使用postman了
我们把postman的url改成http://172.16.15.123:8000/stonks/get_stonks_data/
然後栏位改成如下

最後按一下送出

成功捞出资料啦~

以上我们成功的把财报资料捞出来并且储存在Database内了
下一步我们就要来把所有历届财报自动捞取啦
想知道这麽多财报捞起来要多久
咱们下回分解~


<<:  [Day14] 团队管理:建立团队信赖感(3)

>>:  Day 24 Compose UI Test

冒险村12 - rescue exception

12 - rescue exception 异常处理在开发过程中时常可见,举例来说 Rails 中找...

Day 11. Money money Vue的$$哪里来-数据和方法

昨天我们讲到了Vue的实体还有实体内会有的一些物件,今天就来用范例看看它内外互相响应的过程吧٩(ˊᗜ...

{DAY 3}如何处理一笔数据?(下)

前言 第三天要延续介绍如何处理一笔数据。 对於数据分析的用途跟前几个步骤 请看上一篇文章 数据分析...

【薪资平台】从薪水来看目标公司

如果有人在看,可能会想说,蛤我都还没写履历就要看薪水了?? 就算你的考虑条件中没有薪水这一项,也可以...

Day 36 - 使用 Container 建立 Amazon SageMaker 端点

Day 36 - 使用 Container 建立 Amazon SageMaker 端点 今天的任务...