flask框架json數(shù)據(jù)的拿取和返回操作示例
本文實(shí)例講述了flask框架json數(shù)據(jù)的拿取和返回操作。分享給大家供大家參考,具體如下:
json數(shù)據(jù)結(jié)構(gòu):以套票票網(wǎng)站的城市數(shù)據(jù)為例,拿到數(shù)據(jù)莫慌,
1 先分析數(shù)據(jù)結(jié)構(gòu),有幾個(gè)大的字段(‘returnCode'和‘retuenValue'字段,只有一個(gè)字段作為定義,另一個(gè)字段作為保留(無需處理)
2 鍵表----> 拆分'returnValue‘確定數(shù)據(jù)庫表結(jié)構(gòu),('A‘[]城市首字母表 和 城市具體信息字段{}表)
3 將拿到的數(shù)據(jù)拆分插入到數(shù)據(jù)庫中
4 將數(shù)據(jù)庫的數(shù)據(jù)以JSON 的形式返回給用戶
(a)拿到的數(shù)據(jù):
} "returnCode": "0", "returnValue": { "A": [ { "id": 3643, "parentId": 0, "regionName": "阿壩", "cityCode": 513200, "pinYin": "ABA" }, { "id": 3090, "parentId": 0, "regionName": "阿克蘇", "cityCode": 652901, "pinYin": "AKESU" }, { "id": 3632, "parentId": 0, "regionName": "阿拉善", "cityCode": 152900, "pinYin": "ALASHAN" }, { "id": 899, "parentId": 0, "regionName": "安康", "cityCode": 610900, "pinYin": "ANKANG" }, { "id": 196, "parentId": 0, "regionName": "安慶", "cityCode": 340800, "pinYin": "ANQING" }, { "id": 758, "parentId": 0, "regionName": "鞍山", "cityCode": 210300, "pinYin": "ANSHAN" }, { "id": 388, "parentId": 0, "regionName": "安順", "cityCode": 520400, "pinYin": "ANSHUN" }, { "id": 454, "parentId": 0, "regionName": "安陽", "cityCode": 410500, "pinYin": "ANYANG" } ],
B....C....D....Z省略其他大寫字母開頭的城市,以A開頭的城市名為例
(b)表結(jié)構(gòu),建立外鍵models.py
from App.ext import db #定義城市名大寫字母類,在數(shù)據(jù)的最外層 class Letter(db.Model): id = db.Column(db.Integer,primary_key =True,autoincrement=True) letter = db.Column(db.String(8),unique=True,nullable=False) #定義城市類,嵌套層 class City(db.Model): id = db.Column(db.Integer,primary_key = True,autoincrement = True) parentId = db.Column(db.Integer,nullable = False,defaut=0) regionName = db.Column(db.String(30),nullable = False) cityCode = db.Column(db.Integer) pinYin = db.Column(db.String(128)) #建立外鍵‘首字母' first_letter = db.Column(db.String(8),db.ForeignKey(Letter.letter))
(c)addcities.py插入數(shù)據(jù):
from flask_restful.representations import json from sqlalchemy.dialects.mysql import pymysql def add_cities(): #鏈接數(shù)據(jù)庫 db = pymysql.Connect(host= '10.0.118.135',user = 'root',password ='xxxxxxx',database = 'tpp6666',port = 3306) cursor = db.cursor() #讀取拿到的數(shù)據(jù),遍歷數(shù)據(jù) with open('citylist.json')as cl: returnValue = json.load(cl).get('returnValue') for key in returnValue: for city in returnValue.get(key): db.begin() #插入數(shù)據(jù),以每一個(gè)大寫字母為一個(gè)字段插入,以字典的形式 cursor.execute( 'insert into city(id,parentId,regionName,cityCode,pinYin,first_letter) values({},{},"{}",{},"{}","{}");'.format( city['id'], city['parentId'], city['regionName'], city['cityCode'], city['pinYin'], key)) db.commit() if __name__ == '__main__': add_cities()
(d)CityAPI.py讀取數(shù)據(jù)并以JSON的形式返回 :
from flask_restful import Resource, fields, marshal_with from App.models import Letter, City #字段的格式化: city_fields = { 'id': fields.Integer, '父編號(hào)': fields.Integer(attribute='parentId'),#起別名attribute '名稱': fields.String(attribute='regionName'), '拼音': fields.String(attribute='pinYin'), '城市編碼': fields.Integer(attribute='cityCode'), '首字母': fields.String(attribute='first_letter') } value_fields = { 'A': fields.List(fields.Nested(city_fields)), 'B': fields.List(fields.Nested(city_fields)), 'C': fields.List(fields.Nested(city_fields)), 'D': fields.List(fields.Nested(city_fields)), 'E': fields.List(fields.Nested(city_fields)), 'F': fields.List(fields.Nested(city_fields)), 'G': fields.List(fields.Nested(city_fields)), 'H': fields.List(fields.Nested(city_fields)), 'J': fields.List(fields.Nested(city_fields)), 'K': fields.List(fields.Nested(city_fields)), 'L': fields.List(fields.Nested(city_fields)), 'M': fields.List(fields.Nested(city_fields)), 'N': fields.List(fields.Nested(city_fields)), 'P': fields.List(fields.Nested(city_fields)), 'Q': fields.List(fields.Nested(city_fields)), 'R': fields.List(fields.Nested(city_fields)), 'S': fields.List(fields.Nested(city_fields)), 'T': fields.List(fields.Nested(city_fields)), 'W': fields.List(fields.Nested(city_fields)), 'X': fields.List(fields.Nested(city_fields)), 'Y': fields.List(fields.Nested(city_fields)), 'Z': fields.List(fields.Nested(city_fields)), } result_fields = { 'returnCode': fields.Integer, 'returnValue': fields.Nested(value_fields) } #整體邏輯定義都在這里: @marshal_with是flask內(nèi)置的Json序列化的方法,
在Django里json序列化是json.dumps()
class CityResrouce(Resource): @marshal_with(result_fields) def get(self): #定義外層字段為空字典{},存放數(shù)據(jù) returnValue = {} # 拿到所有的首字母 letters = Letter.query.all() for letter in letters: # 根據(jù)首字母拿到每個(gè)首字母對(duì)應(yīng)的所有城市 # filter拿到的結(jié)果是一個(gè)BaseQuery對(duì)象。 # 如果直接答應(yīng)BaseQuery對(duì)象,它會(huì)輸出SQL語句 # 如果想要打印BaseQuery里的所有數(shù)據(jù),調(diào)用all()方法可以拿到BaseQuery里的所有數(shù)據(jù) cities = City.query.filter(City.first_letter == letter.letter) # dict = {letter.letter: cities} # print(dict) returnValue[letter.letter] = cities.all() return {'returnCode': 0, 'returnValue': returnValue}
(d)api__init__.py:
from flask_restful import Api from App.Apis.CityAPI import CityResrouce from App.Apis.UserAPI import UerResource api = Api() def init_api(app): api.init_app(app=app) api.add_resource(CityResrouce, '/cities/')
希望本文所述對(duì)大家基于flask框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python3.5基礎(chǔ)之函數(shù)的定義與使用實(shí)例詳解【參數(shù)、作用域、遞歸、重載等】
這篇文章主要介紹了Python3.5基礎(chǔ)之函數(shù)的定義與使用,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5函數(shù)的定義、參數(shù)、作用域、遞歸、重載、內(nèi)置函數(shù)等基本概念與相關(guān)使用技巧,需要的朋友可以參考下2019-04-04修復(fù)python-memcached在python3.8環(huán)境中報(bào)SyntaxWarning的問題(完美解決)
我們一直使用python-memcached庫來操作memcached,最近發(fā)現(xiàn)在python3.8的環(huán)境中,代碼會(huì)報(bào)錯(cuò),下面通過本文給大家講解修復(fù)python-memcached在python3.8環(huán)境中報(bào)SyntaxWarning的問題及解決方法,需要的朋友可以參考下2022-08-08python函數(shù)參數(shù)*args**kwargs用法實(shí)例
python當(dāng)函數(shù)的參數(shù)不確定時(shí),可以使用*args和**kwargs。*args沒有key值,**kwargs有key值,下面看例子2013-12-12python3.6.3安裝圖文教程 TensorFlow安裝配置方法
這篇文章主要為大家詳細(xì)介紹了python3.6.3及TensorFlow安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09利用python實(shí)現(xiàn)聚類分析K-means算法的詳細(xì)過程
K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評(píng)價(jià)指標(biāo),即認(rèn)為兩個(gè)對(duì)象的距離越近,其相似度就越大,下面通過本文給大家介紹利用python實(shí)現(xiàn)聚類分析K-means算法的詳細(xì)過程,感興趣的朋友一起看看吧2021-11-11python實(shí)現(xiàn)蒙特卡羅模擬法的實(shí)踐
?蒙特卡洛就是產(chǎn)生隨機(jī)變量,帶入模型算的結(jié)果,尋優(yōu)方面,本文主要介紹了python 蒙特卡羅模擬法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例
本篇文章主要介紹了Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Python利用Flask動(dòng)態(tài)生成漢字頭像
這篇文章主要為大家詳細(xì)介紹了Python如何利用Flask動(dòng)態(tài)生成一個(gè)漢字頭像,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2023-01-01