兽爷|又劝天公重抖擞

昨天,我听朋友讲了一个就发生在他身边的故事。

郑州市民李先生从事服装生意。去年7月20日暴雨过后,他去自己的仓库看了看,价值大概两百万的货物,不见了。

7月30日,郑州发现首例本地阳性感染病例,又开始了全市1200万人的核检工作。李先生的复工计划,被打乱。

接下来的9月和10月,他的生意惨淡。但这还不是底。到了11月,郑州再次爆发疫情。但家庭开销、经营类贷款,这些开支,还是每天一睁眼都要考虑的事情。

无奈之下,李先生把房子拿到中介门店挂牌。房子的按揭贷款早已全部还清,但为了自己的服装生意,他又把房子做了现房抵押贷款。

但这时的郑州楼市,已跌入低谷。中介朋友说,郑州暴雨后,几乎就没有人看房了:

这不是价格降多少的事。

李先生断供了。房子交给了银行,成为了法拍房。他和家人现在租一套房子居住。

把所有省份所有城市的法拍房对比下,你可以发现,在中国的热点城市里,法拍房数量最多的三个城市分别是:

郑州、苏州、杭州。

郑州的法拍房数量达到37235套,是中国省会城市里数量最多的。这其中,有1.1万套集中在金水区。

金水区是郑州市乃至全河南人口最多、经济最有活力、也是最富有的一个区。

但去年,很多像李先生这样的郑州人,在与生活的抗争中,败了下来。

在郑州的银行朋友说,他们的信用卡逾期率和房抵贷不良率都上升了。

1

2016年,郑州一位强人的政治生涯被终结。四年时间里,他完成了其他人不敢想象的事:

拆迁村庄627个,动迁175.6万人。

这场拆迁的规模,堪比三峡大移民。那几年,郑州的空气质量,连续排名全国倒数第二。

运动带来一个好的结果,是郑州成为了“城中村清零”的城市。货币化补偿的带来的巨大流动性,恰逢中国楼市的狂潮。然后,郑州楼市起飞了。

2016年,郑州诞生了16个地王。尤其是2016年8月18日,从中午到晚上九点,在历经9个多小时、233轮的竞价后,中国金茂用35亿元的代价,拿下了在郑州北龙湖的一个地块,楼面价是3.69万元。

同一天,融创拿下了另外一个地王,楼面价只比金茂少了一点点。

郑州房产人都在欢呼这个中原中心城市超越了广州,成为新一线城市房价的领头羊。但那一天,成为郑州房地产市场至今不可逾越的高点。

金茂和融创拍下北龙湖地王27天后,郑州公布了调控政策,熔断机制出台。之后,郑州进入了五年调控时期。

政策之严格。二手房交易中,执行全国最严苛的20%差额税的唯二城市,一个是北京,另外一个就是郑州了。

市场的热度却并没有被冲断。2019年10月,面对疯狂涌入郑州融创城的购房者,融创一位销售说:

不要把他们当人看,还不是像狗一样屁颠屁颠跑来了。

说这话的销售想不到,“像狗一样的购房者”,有一天会突然从售楼处消失不见。

2020年9月17日,郑州艾美酒店,河南省的开发商们济济一堂,就共同关心的话题展开讨论。在谈到打折促销问题时,大家意见出奇地一致:

都怪恒大。

当时恒大刚喊出了全国楼盘7折促销的口号,让大家心里很不爽。把恒大一通乱捶,分析了各种利弊后,开发商们达成一致,绝不降价。

没过多长时间,“不降价联盟”就瓦解了。绿博金科天籁城、万科兰乔圣菲一降再降,北龙湖的碧源荣府原价5.6万/平米,干脆降到了每平米3万多。

这不是最坏的时候。

暴雨过后,河南房企的带头大哥建业,把自己的各种损失统计了一下,发现各种经济损失超过了50亿。他们一年要卖超过10万套房子,每个月差不多就要交付1万套。暴雨让建业9400套房子没法按时交付。

建业于是写了份情况说明,用了个危机感很重的标题,在去年8月初交给了有关部门。

信里建业诉苦很多,铺陈了那么多经营困难的话,最后落实的请求事项里,最重要的一项不是请求拨款,也不是建议放松调控政策,而是恳求省委省政府协调有关市县区,尽快偿还多年来拖欠的各类款项:

超过50亿。

说是求救信,不如说是催款书。这和你包叔讨债时的窝囊样,真是一模一样。

建业之后,河南房企永威、正商、鑫苑、康桥有样学样,都给政府写了求援信。兽爷打听了一下,信确实起到了作用,他们要回了部分欠款。

开发商们可能漏掉了最重要的事情。如果他们预料到去年下半年的市场情形,他们应该会多要点政策,让政策宽松一点,让政策来得更快一点。

2

3月1日,郑州公布的救市19条政策,大家都看到了。重要的有这么几条:

鼓励大学生、外来务工人员在郑州购房;

老年人来郑投靠亲属,可新购一套房;

鼓励金融机构对受困企业贷款展期、续贷;

下调住房贷款利率、降低部分家庭的二套房首付比例。

从2017年至今,五年过去了,郑州是第一个旗帜鲜明进行政策松绑的新一线城市。而且,他们成功做到了。之前,很多城市想要尝试,结果都扑街了。

郑州为什么是第一个,不了解这座城市的人,都想不通。

2018年7月,北龙湖金茂府推出了空中四合院大平层,每平米超过了10万元;曾同一天厮杀摘地王的融创中原壹号院,其一楼带院产品单价则达到每平米13万元。

郑州房价均价,也在那个月达到每平米13719元。

癫狂之后,是漫长的冰冻和调整。站在山顶的郑州楼市,之后马上迎来下行期。从2018年7月到今天,郑州房价跌了3年多,到今年1月,郑州新房成交均价每平为11551元。

就在去年河南开发商们发出求救信后,郑州的市场形势进一步急转直下。河南一家本地房企,整个一月份的销售量是:

2套。

2月14日, 河南本地房企名门地产的员工们刚放假回来,又接到了一份带薪休假安排通知,时间是从2月17日到5月31日,期间发放最低保障工资2000元。

名门地产曾是郑州的“土地爷”,但从2017年开始,这家公司的苗头就不对了。

他们先是把名门时代城的部分股权卖给碧桂园,后来干脆完全退出。之后,又把名门橙邦交给了买榜单出名的佳源国际。卖地都救不了自个,名门地产于是做出了自己的选择:

躺平。

过去一年多,这家公司不发工资,给员工放假。这种非暴力不合作的态度,已经出现人传人现象。

郑州的朋友说,类似的开发商,郑州现在有十几家。有的公司放假到3月1号,有的放假到4月10号,有的跟名门地产一样,直接放到劳动节后了。

胡葆森说,对优秀的企业来说目前至少还在白银时代,但对很多已经躺平的企业来说,黑铁时代都不是了。郑州19条出来后,有网友不解地问:

政策能让在ICU的人转到KTV吗?

3

在郑州公布救市的第二天,银保监会郭主席表示,去年房价下降,房地产的泡沫化、货币化的问题发生了根本性的扭转。他同时说,不希望调整太剧烈,对经济影响太大。

还是要平稳转换。

我理解,这算是中国房地产的政策面拐点了。在经历了剧烈的一年房地产去杆杠后,这个行业应该会适当放松了。

郑州打响新一线城市全面救市的第一枪后,体现出地方政府在楼市问题上越发有现实感。前几天,青岛也跟进了。陆陆续续,应该很多城市都会跟进。

政策公布的前后两天,郑州金水区的未来·天奕项目,就突然涌进来很多衣着得体的购房者。这个项目的房子,售价普遍在七百多万,有客户深夜一次性付款千万买房。

一部分人的积极性,已经被充分调动起来了。

这座城市人口在过去十年增长了397万人,在中国所有城市里排名第五。郑州市领导在2月中旬经济工作会议上还说,每年要吸引20万大学生留在郑州。

所以只要政策宽松些,不出现黑天鹅事件,地产商自己不撒绝户网、拔韭菜根,这种人口净流入的中心性城市的楼市,未来不会有太大的问题。

郑州救市19条发布的当天,一家开发商的投资部门就把政策反复研究好几遍。人才购房补贴,土拍门槛降低,鼓励二手房交易,货币化安置,这些都是实质性的利好。但他们期待的政策,在文件里并没有找到

目前的政策对房企拿地积极性释放的利好,只有下调保证金比例,延缓尾款支付时间。但只有把所有尾款交齐了,开发商才能办证、开盘。看看同行一个月成交两套房子的战绩,大家都有点心里发怵。他们最后的结论是:

客户的信心重建,要比房企更早,也更重要。

并不是每一座城市、每一家房地产公司都能挺过这一轮。客户不买房了,房企不拿地了,大家都躺平了。不少城市,三角形倒了两条边。

去年,河南的一个地级市发现,他们的经营性用地卖不动了,外地房企不来参加土拍了,本地房企表示有心无力。今年,他们为土拍想出了一个办法:

让纪检部门牵头。

还有几天,就是郑州集中供地的日子了。

2020年,17座万亿GDP城市里,郑州的土地财政依赖程度是28.9%,排名第一。

4

最近我总在琢磨郁亮提出的“黑铁时代”。

这个词是罗马神话的记年法,根据人和神的关系,把人类历史分为四个时代。黄金时代,神和人和谐共处;白银时代,宙斯掌权,开始和人类发生矛盾;青铜时代,人类不敬神了,互相之间开始打仗;黑铁时代,神不再庇护人类,人类弱肉强食。

黑铁时代,就是现实世界的真实写照。在郁亮的语境里,房地产从2020年的白银时代到2022年的黑铁时代,只用了三年。

雨露不再,只剩雷霆。

神逐渐抛弃房地产,这倒不是最可怕的,因为神总是忍不住关怀人类;从罗马神话来看,黑铁时代之所以黑暗,是信仰崩塌了。

转自:https://mp.weixin.qq.com/s/q0cvoKTjpyrtGw-moTJ9Hg


网红探店割韭菜套路到底有多骚?


前段时间,我和我的朋友打算去某家网红店吃饭。

这家店被各大探店博主打卡过,吹得天上有地下无,说是「会让人一口就流泪」的厨艺。

 
当我从店里出来的时候,我的眼里的确饱含泪水,问就是难吃哭了。
 
这不是我第一次被网红探店骗了,我不禁陷入沉思。
 
这些网红探店到底可不可信?
 
为什么跟着网红探店打卡餐厅,总是会踩雷?
 
为什么说网红探店被很多人完成了黑灰产?他们又是如何收割韭菜的?
 
大家好,我是带你扒下行业底裤,露出各种乱七八糟真相的名侦探牛腩。
 
今天,我们将会一起掀开美食博主的底裤,露出这些注水评价背后的真相。
 
1
 
前段时间,网红羊道的川剧变脸,给网友增添了一大波的乐子。
 
羊道老师一进店,问完炸酱面的价格,霎时间就变了脸色。
 
26???这么贵呢?
 
网红探店割韭菜套路到底有多骚?
 
还没开始吃呢,羊道老师就发出了灵魂拷问:
 
怎么给过水了????
 
网红探店割韭菜套路到底有多骚?
 
哪怕山德士上校来了,说不定都得被问得两股战战,几欲先走。
 
再挑了一筷子酱料,牛道老师的眉头就皱成了疙瘩——这哪里是炸酱啊,干干巴巴的,完全没法吃啊!
 
说罢,羊道老师自己掏了一瓶子老北京炸酱出来,向我们诠释了正宗的老北京炸酱应该是什么样子的:
 
网红探店割韭菜套路到底有多骚?
 
油酱分离,拌出来得是枣红色。
 
网红探店割韭菜套路到底有多骚?
 
一顿操作把肯德基的炸酱面踩进了地里,还给圆砖厂的老北京炸酱带了一波货。
 
本来这只是个普通的带货视频,但是,没过几天,事情就起了变化:
 
羊道老师再次探店肯德基,而且还给出了截然相反的评价:
 
网红探店割韭菜套路到底有多骚?
 
26块钱真不贵;
 
网红探店割韭菜套路到底有多骚?
 
面条也好,还冒着热气呢,一看就是刚煮出来。
 
网红探店割韭菜套路到底有多骚?

视频一发出来,就被无数网友痛斥恰烂饭。
 
羊道老师在解释之后看情况不妙,就停更自己的社交账号,删视频直接跑路。
 
羊道老师虽然溜了,但是灵魂还在,他以一己之力,直接扒下了部分网红探店博主的底裤。
 
按需评测的美食探店,充钱能改的话术台本,截然相反的探店结论,竟然是一些网红探店的常规操作。
 
事实上,在如今,美食探店,早已不全然承担「排雷」的功能,而是变成了一种失实的营销和广告。
 
只要钱给够,不管是多夸张多虚假的话术和脚本,美食博主都能面不改色地录制发布。

在社交平台上搜索探店踩雷关键词,一定能找到大量苦主。
 
网红探店割韭菜套路到底有多骚?
 
他们绝大多数,都是被探店博主的内容骗过去的。
 
之前有人打卡过某家被各大网红探店博主吹上天的自助,直言「被吃破防了」。
 
网红探店割韭菜套路到底有多骚?
 
明明在网红的视频里,满满都是鲜活的海鲜,但是,到店后他们却发现,这些海鲜,几乎都是半死不活的。
 
网红探店割韭菜套路到底有多骚?
 
网红博主宣传的时候,说鲍鱼是鲜活的,消费者去吃的时候,可能就变成冰冻的了。
 

网红探店割韭菜套路到底有多骚?

除此之外,有些店铺在请网红推广的时候说是十头鲍鱼,结果到店后,消费者可能就会发现这些鲍鱼变成了小指节那么大的鲍鱼童工。
 
还有各种合成牛排、不新鲜的水果等等等等,都是正常操作。
 
那些令人垂涎的美食,你可能只能在网红的拍摄里见到。
 
甚至,有些「自助」在网红嘴里是「有某某名贵食材」,结果顾客真的到了,店家就是一句「卖完了,没有了」。
 
属实是把「饥饿营销」的饥饿玩明白了。
 
网红探店割韭菜套路到底有多骚?
 
除了货不对板之外,很多博主选择性说实话的操作,也让人叹为观止。
 
之前就有人在社交平台吐槽,说自己取关了一个博主,因为这个博主曾经夸一家店的火锅鸡的老板非常实在,因为在火锅下面不垫生菜和豆芽。
 
结果食客到店一看,的确没有垫白菜,那家店垫的是玉米。
 

网红探店割韭菜套路到底有多骚?

一个字,绝。
 
不过,这些博主好歹还真的去了趟店里,但是有些主播,足不出户就能测评饭店,挂上团购链接就能躺着赚钱。
 
这个博主就曾经在视频中表露过,做「云探店博主」,有手就行:
 
网红探店割韭菜套路到底有多骚?
 
素材是统一打包或是从其他平台上盗图的,不需要拍摄,只要随便以排列组合的形式复制黏贴,就可以自动生成视频。
 
网红探店割韭菜套路到底有多骚?
 
有些有良心的博主会去大众点评稍微抄一点评论,让事实不算偏离得过于离谱,但是更多的博主,都是在看图写话。
 
开局一张图,内容全靠诌。
事后挂一个购买链接,真正实现躺着挣钱。
 
他们当然不会说店家坏话,毕竟,他们大部分情况下也依靠团购链接的返佣吃饭,自然要把店吹上天才可以。
 
如果觉得这种方法还不够快,有些人则会批量选择脚本或软件。
 
直接下载后利用APP一键导入,之后APP会自动生成文案和视频,探店博主只需要点击发布即可。

网红探店割韭菜套路到底有多骚?

当然,除了个人,很多的商家也可以在「云探店」中分到一杯羹。批量注册账号,批量生成视频,最后修改定位地址并批量发布。
 
网红探店割韭菜套路到底有多骚?
 
这些修改过定位的视频,最终会被推送到你的附近。在你想要找一下评价相对好一些的店铺的时候,给你一记背刺。
 
云评测至少还是你情我愿的,可有些博主的操作,就真的和勒索没什么区别了。
 
前段时间,有一个男子在一家小饭店吃完饭,死活不肯给钱,而且声称自己是个网红,能够为店铺做宣传引流,所以这一顿就不付了。
 
店主一脸懵逼,只能说「来我们这里吃饭,就是要付钱的。」
 
网红探店割韭菜套路到底有多骚?
 
男子非但没有付钱,还反复和店员强调自己是网红:别人请我们吃饭,都是要倒给我们钱的。
 
那么,这位网红到底有多少粉丝呢?
 
200粉丝。
 
当然,这并不是孤例。前段时间,就有爆出过某六百万粉丝网红,在店内吃完饭后要求免单,结果却遭到了服务员的怒怼:

网红探店割韭菜套路到底有多骚?
 
你有六百万粉丝还是六千万粉丝,都和我没有关系,但是你吃完饭必须结账。
 
更加离谱的是,因为身形体貌过于相似,还有很多吃瓜网友把矛头指向了另一个两千万粉丝的探店博主,搞得博主不得不出面澄清:这个吃饭逃单的根本不是他。
 
飞来横祸,无妄之灾,莫过于此。
 
除了白吃白喝,这些探店博主还有一些奇怪的骚操作。
 
有一名博主在店里吃完饭以后,振振有词地说,「我们探店都是不给钱的」,而当服务员要求付钱的时候,他竟然拿着自己吃剩下的饭对服务员说;「你们还可以接着卖」。
 
最后,在一番僵持后,男子非常不情愿地把钱给付了,但却没有给饮料的钱,不仅如此,后续还在其他顾客的视频下留言,说店铺不好。
 
网红探店割韭菜套路到底有多骚?
 
敲诈勒索,白吃白喝,也就是这些人,在败坏探店达人的风气,让无数店家对探店达人避之不及,也让真真正正在用心探店的博主,毫无立锥之地。
 
2
 
而更让人无法接受的是,这样的人,竟然会成为所谓的「达人」、「意见领袖」,左右着我们的选择,让真正的好店铺,淹没在一片注水的网红打卡店铺中。
 
那么,应该如何规避这类注水的网红博主和网红店铺呢?
 
首先,综合参考点评网站和博主评价,点评网站上优先看差评。虽然店家会用某些技术手段优化掉一些差评,但参考价值还是比较高的。
 
第二,如果有种草的餐厅,可以在各类分享平台上搜名字+踩雷关键词,这类评价的图片和体验,都更接近实际,不太容易出现「博主特供」的情况。
 
第三,谨慎购买无真人出镜探店视频下的团购产品,因为这些,很有可能就是批量流水线素材剪辑的产物外加返利链接,专门准备割你的韭菜。
 
第四,相对于点评高分和博主打卡,其实多年老店的可信度会更高一些。
 
如果你身边也有经常探店踩雷的朋友,请多多转发,不要让更多人被这些探店博主割韭菜。
 
在这个网红时代,好像万物皆可网红。不管是什么样的人,只要有一定的粉丝,就能被称作网红,不管是什么样的店,都可以被博主吹得天花乱坠。
 
推送信息不断轰炸我们,好像每一家店在博主嘴里都变成了「此生必去」,不管它的实际情况有多糟糕,不管它的产品有多货不对板。
 
我们满心欢喜,以为自己能吃到一些好的;
 
我们满怀憧憬,以为能通过意见领袖的考察,吃到更不一样的风味;
 
可是结果呢?
 
大数据的洪流之下,我们满以为自己的选择变多了,可是,真的是这样吗?

转自:https://mp.weixin.qq.com/s/ialIc4S4gC87J5vD4WuDFg

学习Flask主站源码,构建自己的Web站点

大家好,我是肖恩,源码解析每周见

flask—website,是flask曾经的主站源码,使用flask制作,包含模版渲染,数据库操作,openID认证, 全文检索等功能。对于学习如何使用flask制作一个完备的web站点,很有参考价值,我们一起来学习它。

项目结构

flask-website已经归档封存,我们使用最后的版本8b08,包括如下几个模块:

模块 描述
run.py 启动脚本
websiteconfig.py 设置脚本
update-doc-searchindex.py 更新索引脚本
database.py 数据库模块
docs.py 索引文档模块
openid_auth.py oauth认证
search.py 搜素模块
utils.py 工具类
listings 一些展示栏
views 蓝图模块,包括社区,扩展,邮件列表,代码片段等
static 网站的静态资源
templates 网站的模版资源

flask-website的项目结构,可以作为flask的脚手架,按照这个目录规划构建自己的站点:

.
├── LICENSE
├── Makefile
├── README
├── flask_website
│   ├── __init__.py
│   ├── database.py
│   ├── docs.py
│   ├── flaskystyle.py
│   ├── listings
│   ├── openid_auth.py
│   ├── search.py
│   ├── static
│   ├── templates
│   ├── utils.py
│   └── views
├── requirements.txt
├── run.py
├── update-doc-searchindex.py
└── websiteconfig.py
  • run.py作为项目的启动入口
  • requirements.txt描述项目的依赖包
  • flask_website是项目的主模块,里面包括:存放静态资源的static目录; 存放模版文件的templates目录;存放一些蓝图模块的views模块,使用这些蓝图构建网站的不同页面。

网站入口

网站的入口run.py代码很简单,导入app并运行:

from flask_website import app
app.run(debug=True)

app是基于flask,使用websiteconfig中的配置进行初始化

app = Flask(__name__)
app.config.from_object('websiteconfig')

app中设置了一些全局实现,比如404页面定义,全局用户,关闭db连接,和模版时间:

@app.errorhandler(404)
def not_found(error):
    return render_template('404.html'), 404

@app.before_request
def load_current_user():
    g.user = User.query.filter_by(openid=session['openid']).first() 
        if 'openid' in session else None

@app.teardown_request
def remove_db_session(exception):
    db_session.remove()

@app.context_processor
def current_year():
    return {'current_year': datetime.utcnow().year}

加载view部分使用了两种方式,第一种是使用flask的add_url_rule函数,设置了文档的搜索实现,这些url执行docs模块:

app.add_url_rule('/docs/', endpoint='docs.index', build_only=True)
app.add_url_rule('/docs/<path:page>/', endpoint='docs.show',
                 build_only=True)
app.add_url_rule('/docs/<version>/.latex/Flask.pdf', endpoint='docs.pdf',
                 build_only=True)

第二种是使用flask的蓝图功能:

from flask_website.views import general
from flask_website.views import community
from flask_website.views import mailinglist
from flask_website.views import snippets
from flask_website.views import extensions
app.register_blueprint(general.mod)
app.register_blueprint(community.mod)
app.register_blueprint(mailinglist.mod)
app.register_blueprint(snippets.mod)
app.register_blueprint(extensions.mod)

最后app还定义了一些jinja模版的工具函数:

app.jinja_env.filters['datetimeformat'] = utils.format_datetime
app.jinja_env.filters['dateformat'] = utils.format_date
app.jinja_env.filters['timedeltaformat'] = utils.format_timedelta
app.jinja_env.filters['displayopenid'] = utils.display_openid

模版渲染

现在主流的站点都是采用前后端分离的结构,后端提供纯粹的API,前端使用vue等构建。这种结构对于构建小型站点,会比较复杂,有牛刀杀鸡的感觉。对个人开发者,还需要学习更多的前端知识。而使用后端的模版渲染方式构建页面,是比较传统的方式,对小型站点比较实用。

本项目就是使用模版构建,在general蓝图中:

mod = Blueprint('general', __name__)

@mod.route('/')
def index():
    if request_wants_json():
        return jsonify(releases=[r.to_json() for r in releases])

    return render_template(
        'general/index.html',
        latest_release=releases[-1],
        # pdf link does not redirect, needs version
        # docs version only includes major.minor
        docs_pdf_version='.'.join(releases[-1].version.split('.', 2)[:2])
    )

可以看到首页有2种输出方式,一种是json化的输出,另一种是html方式输出,我们重点看看第二种方式。函数render_template传递了模版路径,latest_release和docs_pdf_version两个变量值。

模版也是模块化的,一般是根据页面布局而来。比如分成左右两栏的结构,或者上下结构,布局定义的模版一般叫做layout。比如本项目的模版就从上至下定义成下面5块:

  • head 一般定义html页面标题(浏览器栏),css样式/js-script的按需加载等
  • body_title 定义页面的标题
  • message 定义一些统一的通知,提示类的展示空间
  • body 页面的正文部分
  • footer 统一的页脚

使用layout模版定义,将网站的展示风格统一下来,各个页面可以继承和扩展。下面是head块和message块的定义细节:

<!doctype html>
{% block head %}
<title>{% block title %}Welcome{% endblock %} | Flask (A Python Microframework)</title>
<meta charset=utf-8>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
<script type=text/javascript
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
{% endblock %}
<div class=box>
  ...
  <p class=nav>
    <a href="{{ url_for('general.index') }}">overview</a> //
    <a href="{{ url_for('docs.index') }}">docs</a> //
    <a href="{{ url_for('community.index') }}">community</a> //
    <a href="{{ url_for('extensions.index') }}">extensions</a> //
    <a href="https://psfmember.org/civicrm/contribute/transact?reset=1&id=20">donate</a>
  {% for message in get_flashed_messages() %}
    <p class=message>{{ message }}
  {% endfor %}
  ...

本项目首页的general/index继承自全局的layout,并对其中的body部分进行覆盖,使用自己的配置:

{% extends "layout.html" %}
    ....
{% block body %}
  <ul>
    <li><a href="{{ latest_release.detail_url }}">Download latest release</a> ({{ latest_release.version }})
    <li><a href="{{ url_for('docs.index') }}">Read the documentation</a>
    <li><a href="{{ url_for('mailinglist.index') }}">Join the mailinglist</a>
    <li><a href=https://github.com/pallets/flask>Fork it on github</a>
    <li><a href=https://github.com/pallets/flask/issues>Add issues and feature requests</a>
  </ul>
  ...
  • 这个列表主要使用了蓝图中传入的latest_release变量,展示最新文档(pdf)的url

数据库操作

网站有交互,必定要持久化数据。本项目使用的sqlite的数据库,比较轻量级。数据库使用sqlalchemy封装的ORM实现。下面的代码展示了如何创建一个评论:

@mod.route('/comments/<int:id>/', methods=['GET''POST'])
@requires_admin
def edit_comment(id):
    comment = Comment.query.get(id)
    snippet = comment.snippet
    form = dict(title=comment.title, text=comment.text)
    if request.method == 'POST':
        ...
        form['title'] = request.form['title']
        form['text'] = request.form['text']
        ..
        comment.title = form['title']
        comment.text = form['text']
        db_session.commit()
        flash(u'Comment was updated.')
        return redirect(snippet.url)
    ...
  • 创建comment对象
  • 从html的form表单中获取用户提交的title和text
  • 对comment对象进行赋值和提交
  • 刷新页面的提示信息(在模版的message部分展示)
  • 返回到新的url

借助sqlalchemy,数据模型的操作API简单易懂。要使用数据库,需要先创建数据库连接,构建模型等, 主要在database模块:

DATABASE_URI = 'sqlite:///' + os.path.join(_basedir, 'flask-website.db')
# 创建引擎
engine = create_engine(app.config['DATABASE_URI'],
                       convert_unicode=True,
                       **app.config['DATABASE_CONNECT_OPTIONS'])
# 创建session(连接)                
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
# 初始化
def init_db():
    Model.metadata.create_all(bind=engine)

# 定义基础模型
Model = declarative_base(name='Model')
Model.query = db_session.query_property()

Comment数据模型定义:

class Comment(Model):
    __tablename__ = 'comments'
    id = Column('comment_id', Integer, primary_key=True)
    snippet_id = Column(Integer, ForeignKey('snippets.snippet_id'))
    author_id = Column(Integer, ForeignKey('users.user_id'))
    title = Column(String(200))
    text = Column(String)
    pub_date = Column(DateTime)

    snippet = relation(Snippet, backref=backref('comments', lazy=True))
    author = relation(User, backref=backref('comments', lazy='dynamic'))

    def __init__(self, snippet, author, title, text):
        self.snippet = snippet
        self.author = author
        self.title = title
        self.text = text
        self.pub_date = datetime.utcnow()

    def to_json(self):
        return dict(author=self.author.to_json(),
                    title=self.title,
                    pub_date=http_date(self.pub_date),
                    text=unicode(self.rendered_text))

    @property
    def rendered_text(self):
        from flask_website.utils import format_creole
        return format_creole(self.text)

Comment模型按照结构化的方式定义了表名,6个字段,2个关联关系和json化和文本化的展示方法。

sqlalchemy的使用,在之前的文章中有过介绍,本文就不再赘述。

openID认证

一个小众的网站,构建自己的账号即麻烦也不安全,使用第三方的用户体系会比较合适。本项目使用的是Flask-OpenID这个库提供的optnID登录认证。

用户登录的时候,会根据用户选择的三方登录站点,跳转到对应的网站进行认证:

@mod.route('/login/', methods=['GET''POST'])
@oid.loginhandler
def login():
    ..
    openid = request.values.get('openid')
    if not openid:
        openid = COMMON_PROVIDERS.get(request.args.get('provider'))
    if openid:
        return oid.try_login(openid, ask_for=['fullname''nickname'])
    ..

从对应的模版上更容易理解这个过程, 可以看到默认支持AOL/Google/Yahoo三个账号体系认证:

{% block body %}
  <form action="" method=post>
    <p>
      For some of the features on this site (such as creating snippets
      or adding comments) you have to be signed in.  You don't need to
      create an account on this website, just sign in with an existing
      <a href=http://openid.net/>OpenID</a> account.
    <p>
      OpenID URL:
      <input type=text name=openid class=openid size=30>
      <input type=hidden name=next value="{{ next }}">
      <input type=submit value=Login>
    <p>
      Alternatively you can directly sign in by clicking on one of
      the providers here in case you don't know the identity URL:
    <ul>
      <li><a href=?provider=aol>AOL</a>
      <li><a href=?provider=google>Google</a>
      <li><a href=?provider=yahoo>Yahoo</a>
    </ul>
  </form>
{% endblock %}

在三方站点认证完成后,会建立本站点的用户和openid的绑定关系:

@mod.route('/first-login/', methods=['GET''POST'])
def first_login():
    ...
        db_session.add(User(request.form['name'], session['openid']))
        db_session.commit()
        flash(u'Successfully created profile and logged in')
    ...
  • session中的openid是第三方登录成功后写入session

三方登录的逻辑过程大概就如上所示,先去三方平台登录,然后和本地站点的账号进行关联。其具体的实现,主要依赖Flask-OpenID这个模块, 我们大概了解即可。

全文检索

全文检索对于一个站点非常重要,可以帮助用户在网站上快速找到适合的内容。本项目展示了使用whoosh这个纯python实现的全文检索工具,构建网站内容检索,和使用ElasticSearch这样大型的检索库不一样。总之,本项目使用的都是小型工具,纯python实现。

全文检索从/search/入口进入:

@mod.route('/search/')
def search():
    q = request.args.get('q') or ''
    page = request.args.get('page'type=int) or 1
    results = None
    if q:
        results = perform_search(q, page=page)
        if results is None:
            abort(404)
    return render_template('general/search.html', results=results, q=q)
  • q是搜素的关键字,page是翻页的页数
  • 使用perform_search方法对索引进行查询
  • 如果找不到内容展示404;如果找到内容,展示结果

在search模块中提供了search方法,前面调用的perform_search函数是其别名:

def search(query, page=1, per_page=20):
    with index.searcher() as s:
        qp = qparser.MultifieldParser(['title''content'], index.schema)
        q = qp.parse(unicode(query))
        try:
            result_page = s.search_page(q, page, pagelen=per_page)
        except ValueError:
            if page == 1:
                return SearchResultPage(None, page)
            return None
        results = result_page.results
        results.highlighter.fragmenter.maxchars = 512
        results.highlighter.fragmenter.surround = 40
        results.highlighter.formatter = highlight.HtmlFormatter('em',
            classname='search-match', termclass='search-term',
            between=u'<span class=ellipsis> … </span>')
        return SearchResultPage(result_page, page)
  • 从ttile和content中搜素关键字q
  • 设置使用unicode编码
  • 将检索结果封装成SearchResultPage

重点在index.searcher()这个索引, 它使用下面方法构建:

from whoosh import highlight, analysis, qparser
from whoosh.support.charset import accent_map
...
def open_index():
    from whoosh import index, fields as f
    if os.path.isdir(app.config['WHOOSH_INDEX']):
        return index.open_dir(app.config['WHOOSH_INDEX'])
    os.mkdir(app.config['WHOOSH_INDEX'])
    analyzer = analysis.StemmingAnalyzer() | analysis.CharsetFilter(accent_map)
    schema = f.Schema(
        url=f.ID(stored=True, unique=True),
        id=f.ID(stored=True),
        title=f.TEXT(stored=True, field_boost=2.0, analyzer=analyzer),
        type=f.ID(stored=True),
        keywords=f.KEYWORD(commas=True),
        content=f.TEXT(analyzer=analyzer)
    )
    return index.create_in(app.config['WHOOSH_INDEX'], schema)

index = open_index()
  • whoosh创建本地的索引文件
  • whoosh构建搜素的数据结构,包括url,title,,关键字和内容
  • 关键字和内容参与检索

索引需要构建和刷新:

def update_documentation_index():
    from flask_website.docs import DocumentationPage
    writer = index.writer()
    for page in DocumentationPage.iter_pages():
        page.remove_from_search_index(writer)
        page.add_to_search_index(writer)
    writer.commit()

文档索引构建在docs模块中:

DOCUMENTATION_PATH = os.path.join(_basedir, '../flask/docs/_build/dirhtml')
WHOOSH_INDEX = os.path.join(_basedir, 'flask-website.whoosh')

class DocumentationPage(Indexable):
    search_document_kind = 'documentation'

    def __init__(self, slug):
        self.slug = slug
        fn = os.path.join(app.config['DOCUMENTATION_PATH'],
                          slug, 'index.html')
        with open(fn) as f:
            contents = f.read().decode('utf-8')
            title, text = _doc_body_re.search(contents).groups()
        self.title = Markup(title).striptags().split(u'—')[0].strip()
        self.text = Markup(text).striptags().strip().replace(u'¶', u'')
    
    @classmethod
    def iter_pages(cls):
        base_folder = os.path.abspath(app.config['DOCUMENTATION_PATH'])
        for dirpath, dirnames, filenames in os.walk(base_folder):
            if 'index.html' in filenames:
                slug = dirpath[len(base_folder) + 1:]
                # skip the index page.  useless
                if slug:
                    yield DocumentationPage(slug)

  • 文档读取DOCUMENTATION_PATH目录下的源文件(项目文档)
  • 读取文件的标题和文本,构建索引文件

小结

本文我们走马观花的查看了flask-view这个flask曾经的主站。虽然没有深入太多细节,但是我们知道了模版渲染,数据库操作,OpenID认证和全文检索四个功能的实现方式,建立了相关技术的索引。如果我们需要构建自己的小型web项目,比如博客,完全可以以这个项目为基础,修改实现。

经过数周的调整,接下我们开始进入python影响力巨大的项目之一: Django。敬请期待。

小技巧

本项目提供了2个非常实用的小技巧。第1个是json化和html化输出,这样用户可以自由选择输出方式,同时站点也可以构建纯API的接口。这个功能是使用下面的request_wants_json函数提供:

def request_wants_json():
    # we only accept json if the quality of json is greater than the
    # quality of text/html because text/html is preferred to support
    # browsers that accept on */*
    best = request.accept_mimetypes 
        .best_match(['application/json''text/html'])
    return best == 'application/json' and 
       request.accept_mimetypes[best] > request.accept_mimetypes['text/html']

request_wants_json函数中判断头部的mime类型,进行根据是application/json还是text/html决定展示方式。

第2个小技巧是认证装饰器, 前面一个是登录验证,后一个是超级管理认证:

def requires_login(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if g.user is None:
            flash(u'You need to be signed in for this page.')
            return redirect(url_for('general.login', next=request.path))
        return f(*args, **kwargs)
    return decorated_function

def requires_admin(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if not g.user.is_admin:
            abort(401)
        return f(*args, **kwargs)
    return requires_login(decorated_function)

这两个装饰器,在view的API上使用, 比如编辑snippet需要登录,评论需要管理员权限:

@mod.route('/edit/<int:id>/', methods=['GET''POST'])
@requires_login
def edit(id):
    ...

@mod.route('/comments/<int:id>/', methods=['GET''POST'])
@requires_admin
def edit_comment(id):
    ...

参考链接

  • https://github.com/pallets/flask-website
学习Flask主站源码,构建自己的Web站点
转自:

困难的老王拉了困难的同行一把

前天晚上,一家北方房企的董事长悄悄抵京,面见了王健林。最近这位老板在到处借钱,只要本周能到账的,什么条件都可以谈。

饭桌上,老板对王健林说想借七个小目标,愿意把已经抵押出去的几个商业项目的十年经营权益交给万达。

老王很义气,大手一挥同意了,命令万达这周必须付款。老王也不容易,到去年年中,万达商管的有息负债仍然高达1500多亿。手下很担心项目的风控,老王生气了:

养你们就是解决这些问题的,不然要你们做啥用。

进京求援之前,这家北方房企经历了频繁的动荡,走完大规模裁员和合并组织架构的既定程序后,他们终于到了殊死一搏的时刻。

这个夜晚,千里之外的广东,粤系房企龙光在深交所主动描述了自己的财务近状。从二月下旬开始,去年情况还不错的龙光,几只债券开始放量暴跌,现在已经到了违约债价格。

龙光承认,三月份他们需要偿还的债券有53亿,但至今只兑付了:

11.3亿。

根据某机构的排名,前两个月,龙光的销售额虽然下降了50%,但仍然达到了132亿元。这个数据还算不错,但龙光怎么就到了这个地步,很多人想不通。

昨天,中海宏洋宣布用十个亿买下龙光在汕头景耀项目的全部股权。这个项目是两年前龙光用近15亿拿下的,现在的收购价则有大半是抵扣的项目债务,龙光真正能拿到的钱还不到五千万。

看看这个项目的二股东,大概就明白了。一些不知来历的公司和个人,竟然占据了这个项目近半的股权。

也是这个不平静的夜晚,闽系房企禹洲正式违约了。他们2023年到期的一只优先票据应该在2月份支付两千多万美元的利息,经过三十天宽限期后,禹洲没能凑到这笔钱。

禹洲真的不算躺平。今年,禹洲一共有大约6亿美元的债券到期。根据克尔瑞数据,禹洲前两个月的销售额仅为78亿,同比下降了四成。

今年1月份,禹洲决定把旗下物业公司的所有股权卖给华润。这个月初,禹洲又公告称,完成了旧债券本金总额95%的旧债券展期。

禹洲对票据持有人的支持表示了感谢,并恳请少数投资人不要采取任何破坏公司稳定性的激进手段。仅仅几天后,他们就倒在了剩下的那:

5%身上。

公开暴雷的第二天,禹洲继续公告说出售物业的交易,终于和华润签订了正式协议。根据规定,只要通过相关程序和批准,双方正式协议生效三天内,华润就得向禹洲支付三分之二的交易款,也就是近七个亿的现金。

命运和禹洲开了个天大的玩笑,救命稻草居然就晚来了一天。

能迅速变现的东西越来越少,在信用市场近乎崩溃的前提下,只剩下销售回款这条路。但大家正在面对的情况是:

前两个月的销售规模大跌;三月是今年还款压力最大的月份。

据统计,今年3-6月,170家房企共有162亿美元存量债和781的人民币债券到期。而在所有的到期债券中,有近三分之一都集中在三月。

在过去大半年时间消耗完几乎所有潜力后,决定房企们生死的,其实已经是非常微小的变量:

可能是一天,也可能是5%。

转自:https://mp.weixin.qq.com/s/EZL1OP8EhMsaKj_N-iFZ1g

制裁升级!拜登会不会拖世界下水?

作者 | 万连山

数据支持 | 勾股大数据(www.gogudata.com)

制裁升级!拜登会不会拖世界下水?

在全球能源短缺问题继续升温之际,美国继续推动“全面封杀”俄罗斯能源。

昨夜,拜登在新闻发布会上说,“今天,我宣布美国瞄准俄罗斯经济的大动脉,禁止所有俄罗斯石油、天然气和能源的进口。这意味着美国港口将不再接受俄罗斯石油,美国人民将对普京的战争机器造成又一次强有力的打击。”

英国紧随其后,商业与能源大臣称将“在2022年底前逐步停止进口俄罗斯石油和石油产品。”

消息出来,国际油价一度飙涨至139美元/桶, 美股也在震荡中收低。

制裁升级!拜登会不会拖世界下水?

看到这里,我脑海中突然涌现出一幅画面:

一头灰熊凶威凛凛,手持猎枪、担忧被袭击的平民,联邦警察,动物保护主义者,环保主义者,他们在森林里相遇。

这尴尬的局面如何打破?

有人忽然灵光一闪,大喝一声:灰熊通俄……

拜登再次升级对俄制裁,全面封杀俄罗斯石油和天然气,会产生那些后果?点击视频了解等多内容制裁升级!拜登会不会拖世界下水?👇

01

分歧益深

此前,虽然北约对俄罗斯展开了一系列制裁,但始终没有波及到石油与天然气。(尽管早在上个月,加拿大就宣布禁止进口俄油,但这只是象征性的,毕竟该国自2019年起就从没有进口过石油。)

随着能源价格飙升,英美与其他欧洲盟友,在是否禁止俄能源问题上的分歧,越来越明显。

很显然,后者对俄罗斯能源更加依赖。

从去年的数据看,美国市场大部分进口能源都来自加拿大,从俄罗斯购买的原油仅占3%。

同时,美国本身就是油气大国,页岩油产能正在逐步恢复中,当然乐于见到国际油气价格飙升。

再加上前段时间以每天7亿美元的资金,疯狂收购俄罗斯石油,美国现在的石油储备非常充足。

也正因为如此,在周二的民意调查中,超过70%美国人支持对俄罗斯石油的禁令。

制裁升级!拜登会不会拖世界下水?

当然,这并非没有代价。

美国国内普通汽油均价达到4.17美元/加仑,为近14年最高水平,而且还有上涨趋势。

而交通运输成本上升,势必会抬高终端商品价格,最终推高整体通胀率。美国1月的通胀已经高达7.5%,再往上升,会不会无法控制?

不会。这是一盘很大的棋,第三段会详细说明。

但在欧洲,实施这一禁令,要困难得多。

欧洲国家的工业、发电和取暖等,都需要大量的天然气,约40%依靠俄罗斯进口。随着能源价格的不断飙升,由此引发的通胀危机给经济发展和民生,已经造成严重的影响。

尤其是德国,55%的天然气供应依赖俄罗斯。如果效仿英美施行禁令,供电、运输、供暖和工业运转,都将陷入停滞。

其他欧盟国家也好不到哪去。

德国、法国、荷兰相继表态,就俄罗斯能源禁令持谨慎态度,不愿意与美国共进退。

按照欧洲媒体的说法:欧盟对俄制裁就是一种自残式行动。

目前,欧洲天然气期货价格,已经是美国的20多倍。与去年同期300欧元/千立方米的天然气价格相比,目前的价格已经飙升至3500欧元。

全球大宗商品暴涨的直接后果,是造成紧密相关国家通货膨胀。而由乌克兰往西,首当其冲的就是众多欧洲内陆小国。

国际能源价格如果继续飙升,最先倒下的绝不是俄罗斯,而是欧盟中经济比较落后的成员国。

而美国军火巨头的武器和能源巨头的页岩气不但不愁没人要,还能哄抬物价大发灾难财。欧洲却要为此付出惨重的代价——成为这波对俄制裁的最大受害者。

制裁升级!拜登会不会拖世界下水?

美国鼓动欧盟与俄罗斯作对可以,但这存在上限,不能撕破最后的脸皮,否则自己承受不起。

虽然华盛顿一直奏乐,欧盟就得一直舞,但总有累的时候。无法解决后顾之忧,就彻底为其卖命,基本是不可能的。

美、英、加不顾盟友死活,坚持扩大对俄制裁以推高国际油价。如果美欧在这一问题上互不让步,双方的内讧大戏或将上演。

制裁升级!拜登会不会拖世界下水?

这个场景可能再现。

02

谁能横刀立马

俄罗斯是全球最大的原油出口国,每天的供应量约为700万桶,占全球7%。

假如,欧美真的全面封禁俄罗斯油气,这么大的缺口,谁能补上?

尤其是,缺席国际市场多年的伊朗石油,回归之日至今不明

3月5日,俄外长要求美国保证制裁不会损害俄罗斯与伊朗之间的贸易。言下之意,西方对俄制裁,已成为伊核协议的绊脚石。

OPEC组织秘书长巴尔金都也在7日发出警告,欧佩克国家无法控制全球油价上涨,地缘政治才是决定者。

据《国会山报》消息,随着俄乌冲突持续,阿联酋和沙特领导人均拒绝接听拜登的电话,因为担心谈话内容会涉及中东产油国进出口问题。

同时,欧美在重启伊核谈判时,也没有足够考虑到中东国家的意愿。

制裁升级!拜登会不会拖世界下水?

全球第四大石油生产国、美国最大的海外原油供应国加拿大,虽然日产量超过500万桶,但该国向南的输油管道容量有限,只有一条通往其海岸线的原油管道。

目前加拿大西海岸正在建设一个大型液化天然气设施,但要到2025年前后才能完工。

加拿大自然资源部长威尔金森也声明:未来几个月,加拿大更有可能做的是帮助其他国家制定长期能源战略,而不是直接影响油价。

也就是说,目前全球没有任何产能,可以替代俄罗斯每天700万桶的石油出口。美国或许可以,但它当然不会这么做。

俄前总统梅德韦杰夫曾在7日表态:我只能祝贺“有远见”的欧洲同事,他们可靠地保护自己不受“阴险的”俄罗斯和北溪2号项目影响。

早在德国叫停北溪2号时,他就预测欧洲人很快将迎来“为1000立方米天然气支付2000欧元的美丽新世界”

现在来看,这不仅不是耸人听闻,反而还低估了现实。

据荷兰TTF指数(欧洲天然气主要交易指标),4月交割期货周一开盘价为2366.8美元/千立方米,90分钟内上涨至3888.4美元,比周五的结算价格2170.2美元,上涨了79%。

3月7日,塞尔维亚总统武契奇也做出提醒,如果俄罗斯石油被禁止,世界油价将比历史高点还要高出2-3倍。

若此话成真,届时所有原材料的价格都将飙到天上,我们所熟知的一切规则,可能都需要重塑。

天然气、石油等能源价格只是一个侧面,小麦、玉米等基础粮食价格的暴涨,才是最要命的,必然会传导至几乎所有生活必需品售价上。

制裁升级!拜登会不会拖世界下水?

而这些,都是现在的欧洲,正在经历的过程——极有可能面临一场崩溃式的通胀,最终形成政府巨大的财政赤字,摧毁数十年来欧洲人不劳而获的福利制度。

这股旋涡,正迅速向全世界发散。

03

拜登的“伟大”资产

美国的疫情治理与经济恢复,还不知道要花多少钱。可以说,建国200多年以来,美利坚几乎没有遭受过如此重大的危机。

太阳底下没有新鲜事。

地主家的房子漏了,自然不会亲自动手去补。

不知道还有没有人记得,2月20日,拜登在白宫记者会上说道:“通胀是一笔伟大的资产。”

语出四座皆惊。大王这是何意?

事出反常必有妖孽。

美国1月的通胀上升到40年新高7.5%,已经是很惊人的数字。但在其他国家,承受的压力只会更大。

列一组很直观的数据。

2014年,也就是上一次国际油价上100美元时,1欧元能换1.4美元。

现在呢?1欧元只能换1.1美元。

换句话说,在以美元结算的石油体系中,欧元不到十年贬值了26%。

同样的道理,英镑贬值22%,日元也贬值了15%。

制裁升级!拜登会不会拖世界下水?

如果把美国比作一只蚁后,近几年印出的海量美钞,就是刚孵化出的工蚁。

在和平时期,蚁后乐善好施,不断派遣幼工蚁帮助邻居建设发展,参与到经济和商业流通中,渗透进世界每一个角落。

当这些工蚁成年,蚁后会大幅、高频、快速加息,召唤孩儿们回归母巢,也就是美国本土。

比如在70年代,美国经济被越南战争拖垮,通胀率最高达到13.3%。危急时刻,尼克松放出史上最强力财长——沃尔克。此君一上任,就把美元基准利率升到22.4%。

这一夸张的举动就像咒语,流落在全球的美元纷纷回归本土,帮助美国经济从最艰难的时期一跃而起。

而那些借了美债的国家,经济一下倒退了十年。

制裁升级!拜登会不会拖世界下水?

最近一系列事件的进展,与当年何其相似?

而接下来两个月,美国通胀水平极有可能在8%以上。不论到什么水平,通过即将到来的美联储加息,同时释放战略石油储备,压制本国油价,美国通胀必然会有一定程度回落。

其他国家,如果不付诸行动,飙升的油价,将使得通胀全线失控。这也是为什么,从去年年底开始,加拿大和英国突然加息,走在美国前面。毕竟谁也不傻。

届时,所有海外的资金,为了避免大幅贬值,都会流向美国本土。等于是利用全球的钱,让本国经济从废墟中站起来,从而实现“再次伟大”。

以这个角度来看,通胀对美国而言确实是一笔“伟大”的财富。

但这一次,还能如愿以偿吗?

最近三十年,美利坚开支无度、穷兵黩武,赤字连创新高,动不动就对敌国制裁,世界早就开始“去美元化”进程,美元占全球央行外汇储备的比例,从71%下滑到了59%。

再加上前不久,俄罗斯被踢出swift系统,央行4000亿美元的储备、俄富豪的大量美元资产也被冻结。

这让所有富人都意识到,私人财产不可侵犯这句话有多么可笑。以李嘉诚甩卖英国千亿资产为例,大量资金会撤出,寻找美元以外的替代品。

制裁升级!拜登会不会拖世界下水?

替代品有哪些?除欧元、日元、英镑,人民币也是一个越来越有力的竞争者。

美国加息,中国降准,可以看到,双方的货币政策正好相反。如果能守住,就能争取到更多惊慌失措的资金。

就像在这一轮俄乌危机中,大量欧洲资金进入中国避险,提升了中国资产吸引力一样。

这对我们的市场,是很大的利好。假以时日,究竟是谁实现“再次伟大”,还说不准。

04

尾声

三十年来,这个世界处于单极,或者说垄断状态。

身处糟糕的世界,特别是有一个自私的老大,谁也无法独善其身。

今天A股,又遭一记闷棍,比昨天还痛。

两市上涨1077只,下跌3525只,跌停28家。沪指一度失守3200点,创业板2600也没了。

从高开低走,午后跳崖,到尾盘深V,多少韭菜无语凝噎。

不光是大A,现在全球市场都是软妹子,动不动就大跌。

再这样下去,迟早要出事。

制裁升级!拜登会不会拖世界下水?

好消息是,乌克兰总统表示,对加入北约已经心灰意冷。俄乌战争的转机是否将要到来?股市是否能被拯救?全得看这位老哥何时会认怂。

最后,希望亏麻了的朋友,不要心灰意冷。给你们推荐一本书,相信会有些帮助。

制裁升级!拜登会不会拖世界下水?

为什么书皮是绿色的?

健康。

转自:https://mp.weixin.qq.com/s/LhoOksOBys_fRRdPfxYR4g