flask框架json数据的拿取和返回操作⽰例
本⽂实例讲述了flask框架json数据的拿取和返回操作。分享给⼤家供⼤家参考,具体如下:
json数据结构:以套票票⽹站的城市数据为例,拿到数据莫慌,
1 先分析数据结构,有⼏个⼤的字段(‘returnCode'和‘retuenValue'字段,只有⼀个字段作为定义,另⼀个字段作为保留(⽆需处理)
2 键表----> 拆分'returnValue‘确定数据库表结构,('A‘[]城市⾸字母表和城市具体信息字段{}表)
3 将拿到的数据拆分插⼊到数据库中
4 将数据库的数据以JSON 的形式返回给⽤户
(a)拿到的数据:
}
"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)表结构,建⽴外键models.py
import db
#定义城市名⼤写字母类,在数据的最外层
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插⼊数据:
from presentations import json
正则表达式 中文字符from sql import pymysql
def add_cities():
#链接数据库
db = pymysql.Connect(host= '10.0.118.135',user = 'root',password ='xxxxxxx',database = 'tpp6666',port = 3306) cursor = db.cursor()
#读取拿到的数据,遍历数据
with open('citylist.json')as cl:
returnValue = json.load(cl).get('returnValue')
for key in returnValue:
for city (key):
db.begin()
#插⼊数据,以每⼀个⼤写字母为⼀个字段插⼊,以字典的形式
'insert into city(id,parentId,regionName,cityCode,pinYin,first_letter) values({},{},"{}",{},"{}","{}");'.format(
city['id'], city['parentId'], city['regionName'], city['cityCode'], city['pinYin'], key))
dbmit()
if __name__ == '__main__':
add_cities()
(d)CityAPI.py读取数据并以JSON的形式返回:
from flask_restful import Resource, fields, marshal_with
dels import Letter, City
#字段的格式化:
bootstrap框架布局city_fields = {
'id': fields.Integer,
'⽗编号': 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)),python请求并解析json数据
'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内置的Json序列化的⽅法,
北京好的前端培训机构在Django⾥json序列化是json.dumps()
class CityResrouce(Resource):
@marshal_with(result_fields)
def get(self):
#定义外层字段为空字典{},存放数据
returnValue = {}
# 拿到所有的⾸字母
letters = Letter.query.all()
for letter in letters:
# 根据⾸字母拿到每个⾸字母对应的所有城市
# filter拿到的结果是⼀个BaseQuery对象。
# 如果直接答应BaseQuery对象,它会输出SQL语句
# 如果想要打印BaseQuery⾥的所有数据,调⽤all()⽅法可以拿到BaseQuery⾥的所有数据 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/')
希望本⽂所述对⼤家基于flask框架的Python程序设计有所帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论