
第一个问题,交易的数字签名(纯二进制),如何通过写入JSON进行传输,JSON无法序列化纯二进制: @1 k. r% K2 \6 I. J3 y& E/ U
解决方案:二进制转BASE64,然后再转回来!虽然我BASE64经常讲,但是这次是第一次真正用到!
3 J- T+ Y7 y, r( M" N) pimport base64
5 Q0 k h) B% T. q" Adef bytes_b64(convert_bytes):
; R) C M2 p4 P* t8 t5 U5 z bytes_b64code =base64.b64encode(convert_bytes)( c7 w/ H+ ]4 l* f4 {; t
bytes_b64code =str(bytes_b64code)[2:-1]) l8 i& B. d/ M$ d% X Z1 d$ q6 O
returnbytes_b64code7 Q/ p' ?9 B* d2 O4 E3 h! f
6 S: R0 z5 d0 `def b64_bytes(b64):5 l- |5 f# d3 B! T5 u
b4code_back =bytes(b64,'utf8')% W/ E- K) o, H, S) e
signature =base64.b64decode(b4code_back)
! [1 q" i9 v' k/ ^3 c# ` return signature
+ c9 e6 B9 w& _0 Y/ n* e8 m$ P2 }6 c5 v d' V! h
1 P: A; L' k7 ?2 C% T$ V>>> test_bytes = b'\xac!{' }& u( [! K3 {" ]' j
>>> bytes_b64(test_bytes)7 t+ S# _7 m! L7 Q5 Q
'rCF7'
5 ]( w+ E/ C7 R/ `>>> b64_bytes('rCF7’)( o6 Z5 D9 ^, C* S7 w0 X
b'\xac!{', J2 Z+ f$ ^) a
7 H6 B( i; X' o1 O0 T
$ m- h1 i; _, f, A/ b! l# F8 |9 q2 O第二个问题,如果通过数据库保存交易时间?1 Y$ k" _4 V0 ]$ L1 K7 p2 V; N$ c
解决方案:可以直接把datetime对象转换为字符串写入PSQL,PSQL的键类型设置为timestamp!再读出来的时候,这个字段直接就是datetime对象!
/ d; O+ D3 \7 O5 ?8 o
近期写区块链学到的Python相关的知识
/ X4 Y* y! O3 w9 Q5 T
6 g+ `: d1 P6 g% w" e. O9 `# Q2 _, f/ I, `
" o) O$ q8 e, x5 G* m ?( z {9 Z" M/ E z; k' ~3 }$ X z' f
第三个问题,当初我认为PSQLtimestamp的值读出来是字符串,所以我顺便研究了一下如何把字符串转换为datetime对象,当然后来并没有用上,但是我还是分享一下!
) m! }8 B u. H& i% R, }* i, S" I解决方案:dateutil
, l B h, z" F, Q/ |pip3 install python-dateutil
) s, U7 `/ z# w! ^+ [$ P5 F( _* }/ [6 s5 S \# j: J u2 q
, P. J8 C6 @* K) V>>> from dateutil import parser0 H4 B! Y7 P6 y. \5 Y \7 B3 {
>>> from datetime import datetime
1 s6 ]7 f) \: h>>> strtime = str(datetime.now())
& F) m+ B, w+ Q2 d>>> strtime
* C- o+ [1 g/ Q4 [6 ~: T'2018-03-22 08:59:21.978836'
! L5 z4 @( [, `1 ?- L2 [>>> parser.parse(strtime)
2 ]( U) Y' t6 \/ Qdatetime.datetime(2018, 3, 22, 8, 59, 21, 978836)
2 o0 _; L r$ H4 T4 M7 n9 {1 ~ d6 }5 d9 Z: Q% o( @- ]
) `9 F& d. o/ R0 f) d8 ~
参加免费公开课,请您说是由【攻城狮论坛】推荐的。报名收费培训的论坛会员,可享受优惠价格+赠送攻城狮论坛VIP会员。本文转自 乾颐堂 www.qytang.com,版权归原作者所有。 |
|