VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.041USD
STEEM
0.000STEEM
SBD
0.015SBD
Effective Power
5.001SP
├── Own SP
0.628SP
└── Incoming DelegationsDeleg
+4.373SP
Detailed Balance
| STEEM | ||
| balance | 0.000STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.628SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.373SP | SP |
| Effective Power | 5.001SP | SP |
| Reward SP (pending) | 0.007SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.015SBD | SBD |
{
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "1022.746613 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7120.913193 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.015 SBD",
"conversions": []
}Account Info
| name | tmp4321 |
| id | 728189 |
| rank | 1,359,963 |
| reputation | 266047906 |
| created | 2018-02-06T02:59:12 |
| recovery_account | steem |
| proxy | None |
| post_count | 49 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-08-02T13:20:00 |
| last_root_post | 2018-08-02T13:20:00 |
| last_vote_time | 2018-03-03T14:44:15 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1022.746613 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7120.913193 VESTS |
| reward_vesting_balance | 14.267208 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 1970-01-01T00:00:00 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"id": 728189,
"name": "tmp4321",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6ddztSHnrXNBQsaroMiiStsv7yn9ax8c6RRwJtiy3B9NijyHSB",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7nLpGGfSiqhZjsTev6Zqhu6V1BKDf5Qz7WgdNQdWsG45h7a4PL",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7iiWNebsCsEcFugUYPM7wLhXLE9Y2auZuqszLand8XBpfvREPy",
1
]
]
},
"memo_key": "STM6UXHvW6ZyyD9VTTRAKEP6V2XH8oL8jfXqdHXRxTMp37JVRFrVz",
"json_metadata": "",
"posting_json_metadata": "",
"proxy": "",
"last_owner_update": "1970-01-01T00:00:00",
"last_account_update": "1970-01-01T00:00:00",
"created": "2018-02-06T02:59:12",
"mined": false,
"recovery_account": "steem",
"last_account_recovery": "1970-01-01T00:00:00",
"reset_account": "null",
"comment_count": 0,
"lifetime_vote_count": 0,
"post_count": 49,
"can_vote": true,
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779089514
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779089514
},
"voting_power": 0,
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"sbd_balance": "0.000 SBD",
"sbd_seconds": "0",
"sbd_seconds_last_update": "1970-01-01T00:00:00",
"sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"reward_sbd_balance": "0.015 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "14.267208 VESTS",
"reward_vesting_steem": "0.007 STEEM",
"vesting_shares": "1022.746613 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7120.913193 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": 0,
"to_withdraw": 0,
"withdraw_routes": 0,
"curation_rewards": 0,
"posting_rewards": 13,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 0,
"last_post": "2018-08-02T13:20:00",
"last_root_post": "2018-08-02T13:20:00",
"last_vote_time": "2018-03-03T14:44:15",
"post_bandwidth": 0,
"pending_claimed_accounts": 0,
"vesting_balance": "0.000 STEEM",
"reputation": 266047906,
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [],
"tags_usage": [],
"guest_bloggers": [],
"rank": 1359963
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 07:31:54
2026/05/18 07:31:54
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 7120.913193 VESTS |
| Transaction Info | Block #106152146/Trx 5a68f9f0e5d22016fe63ce591f25b5cf12b4f568 |
View Raw JSON Data
{
"trx_id": "5a68f9f0e5d22016fe63ce591f25b5cf12b4f568",
"block": 106152146,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-05-18T07:31:54",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "7120.913193 VESTS"
}
]
}2026/05/13 09:21:42
2026/05/13 09:21:42
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 4408.702788 VESTS |
| Transaction Info | Block #106011053/Trx 7082b2b23a9129686d943ce0edff30c7a45e8121 |
View Raw JSON Data
{
"trx_id": "7082b2b23a9129686d943ce0edff30c7a45e8121",
"block": 106011053,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-05-13T09:21:42",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "4408.702788 VESTS"
}
]
}2026/04/26 06:42:00
2026/04/26 06:42:00
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 7133.428949 VESTS |
| Transaction Info | Block #105519597/Trx dc8c1f010247296b0394fed7a463c6323df26e2b |
View Raw JSON Data
{
"trx_id": "dc8c1f010247296b0394fed7a463c6323df26e2b",
"block": 105519597,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-04-26T06:42:00",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "7133.428949 VESTS"
}
]
}2026/01/24 03:21:57
2026/01/24 03:21:57
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 4450.249607 VESTS |
| Transaction Info | Block #102875240/Trx 11e6c3c223aa8c9d1a32fea14e370e4b66154b3f |
View Raw JSON Data
{
"trx_id": "11e6c3c223aa8c9d1a32fea14e370e4b66154b3f",
"block": 102875240,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2026-01-24T03:21:57",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "4450.249607 VESTS"
}
]
}2024/12/17 22:30:42
2024/12/17 22:30:42
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 4614.468804 VESTS |
| Transaction Info | Block #91321436/Trx 07f2e84409097c052ea519009dec126d7dbeafb0 |
View Raw JSON Data
{
"trx_id": "07f2e84409097c052ea519009dec126d7dbeafb0",
"block": 91321436,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2024-12-17T22:30:42",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "4614.468804 VESTS"
}
]
}2023/11/14 14:09:09
2023/11/14 14:09:09
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 4783.602336 VESTS |
| Transaction Info | Block #79875520/Trx b5af27b85341024655de1166222229e3d3aed46b |
View Raw JSON Data
{
"trx_id": "b5af27b85341024655de1166222229e3d3aed46b",
"block": 79875520,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2023-11-14T14:09:09",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "4783.602336 VESTS"
}
]
}2023/09/22 11:51:12
2023/09/22 11:51:12
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 7720.511122 VESTS |
| Transaction Info | Block #78364612/Trx 8a7c08e6c94b4cb51e987f230cadc2ab3b11b5b2 |
View Raw JSON Data
{
"trx_id": "8a7c08e6c94b4cb51e987f230cadc2ab3b11b5b2",
"block": 78364612,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2023-09-22T11:51:12",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "7720.511122 VESTS"
}
]
}2022/11/03 19:08:54
2022/11/03 19:08:54
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 7942.562560 VESTS |
| Transaction Info | Block #69122152/Trx 7f9888e316e9666e32bfaec0053e995f0cfd0d71 |
View Raw JSON Data
{
"trx_id": "7f9888e316e9666e32bfaec0053e995f0cfd0d71",
"block": 69122152,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2022-11-03T19:08:54",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "7942.562560 VESTS"
}
]
}2022/01/18 00:13:30
2022/01/18 00:13:30
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 8162.670161 VESTS |
| Transaction Info | Block #60825257/Trx 8d1b58aab33975ccd8a6ecdb8648863ec83376d9 |
View Raw JSON Data
{
"trx_id": "8d1b58aab33975ccd8a6ecdb8648863ec83376d9",
"block": 60825257,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2022-01-18T00:13:30",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "8162.670161 VESTS"
}
]
}2021/06/14 07:21:21
2021/06/14 07:21:21
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 8346.864449 VESTS |
| Transaction Info | Block #54615515/Trx f6046bfac69800c00ff6f9689b4fe351dfdb8d24 |
View Raw JSON Data
{
"trx_id": "f6046bfac69800c00ff6f9689b4fe351dfdb8d24",
"block": 54615515,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2021-06-14T07:21:21",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "8346.864449 VESTS"
}
]
}2020/12/11 17:32:33
2020/12/11 17:32:33
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 8534.286423 VESTS |
| Transaction Info | Block #49362742/Trx b9436a9fab37b574135c2cd501e349a418ed82c2 |
View Raw JSON Data
{
"trx_id": "b9436a9fab37b574135c2cd501e349a418ed82c2",
"block": 49362742,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-11T17:32:33",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "8534.286423 VESTS"
}
]
}2020/12/06 11:07:51
2020/12/06 11:07:51
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49214256/Trx b2279a455d5b4b6ba75c897fc05255193d87d95e |
View Raw JSON Data
{
"trx_id": "b2279a455d5b4b6ba75c897fc05255193d87d95e",
"block": 49214256,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-06T11:07:51",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "1912.543513 VESTS"
}
]
}2020/12/05 21:10:24
2020/12/05 21:10:24
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 8540.494277 VESTS |
| Transaction Info | Block #49197824/Trx 97ecc30ad9f5578f9fa3c432b06bd446feba6fe0 |
View Raw JSON Data
{
"trx_id": "97ecc30ad9f5578f9fa3c432b06bd446feba6fe0",
"block": 49197824,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-12-05T21:10:24",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "8540.494277 VESTS"
}
]
}2020/11/03 04:57:03
2020/11/03 04:57:03
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48273474/Trx 9c9106657545e0fd056910edff7672f2f20820e3 |
View Raw JSON Data
{
"trx_id": "9c9106657545e0fd056910edff7672f2f20820e3",
"block": 48273474,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-11-03T04:57:03",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "1920.017158 VESTS"
}
]
}2020/05/09 12:11:57
2020/05/09 12:11:57
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 8743.299636 VESTS |
| Transaction Info | Block #43224602/Trx aed85aa0e6fe210f3f951b856a21611dbfdc8984 |
View Raw JSON Data
{
"trx_id": "aed85aa0e6fe210f3f951b856a21611dbfdc8984",
"block": 43224602,
"trx_in_block": 12,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-09T12:11:57",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "8743.299636 VESTS"
}
]
}2020/05/08 16:46:00
2020/05/08 16:46:00
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43201835/Trx 5f54b191a7df131f407872c33973d35b360cdd6c |
View Raw JSON Data
{
"trx_id": "5f54b191a7df131f407872c33973d35b360cdd6c",
"block": 43201835,
"trx_in_block": 1,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-05-08T16:46:00",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "1953.311140 VESTS"
}
]
}2020/02/06 03:42:48
2020/02/06 03:42:48
| parent author | tmp4321 |
| parent permlink | yann-48 |
| author | steemitboard |
| permlink | steemitboard-notify-tmp4321-20200206t034247000z |
| title | |
| body | Congratulations @tmp4321! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@tmp4321/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@tmp4321) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=tmp4321)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator">SteemitBoard Ranking update - A better rich list comparator</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #40571521/Trx c4cfb86e08903d8e86c451cba578e682de7b4b3a |
View Raw JSON Data
{
"trx_id": "c4cfb86e08903d8e86c451cba578e682de7b4b3a",
"block": 40571521,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2020-02-06T03:42:48",
"op": [
"comment",
{
"parent_author": "tmp4321",
"parent_permlink": "yann-48",
"author": "steemitboard",
"permlink": "steemitboard-notify-tmp4321-20200206t034247000z",
"title": "",
"body": "Congratulations @tmp4321! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@tmp4321/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@tmp4321) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=tmp4321)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator\">SteemitBoard Ranking update - A better rich list comparator</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}2019/11/01 09:51:03
2019/11/01 09:51:03
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 8849.698719 VESTS |
| Transaction Info | Block #37790598/Trx 15b9752e80488ca95ac609867fb797088a233a19 |
View Raw JSON Data
{
"trx_id": "15b9752e80488ca95ac609867fb797088a233a19",
"block": 37790598,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-11-01T09:51:03",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "8849.698719 VESTS"
}
]
}2019/02/06 04:26:39
2019/02/06 04:26:39
| parent author | tmp4321 |
| parent permlink | yann-48 |
| author | steemitboard |
| permlink | steemitboard-notify-tmp4321-20190206t042638000z |
| title | |
| body | Congratulations @tmp4321! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@tmp4321/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@tmp4321)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| Transaction Info | Block #30100283/Trx 59189b4aa6d82b9cadee8b2509db5ad78d907707 |
View Raw JSON Data
{
"trx_id": "59189b4aa6d82b9cadee8b2509db5ad78d907707",
"block": 30100283,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2019-02-06T04:26:39",
"op": [
"comment",
{
"parent_author": "tmp4321",
"parent_permlink": "yann-48",
"author": "steemitboard",
"permlink": "steemitboard-notify-tmp4321-20190206t042638000z",
"title": "",
"body": "Congratulations @tmp4321! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@tmp4321/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@tmp4321)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
}
]
}2018/11/26 19:48:15
2018/11/26 19:48:15
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 9047.174096 VESTS |
| Transaction Info | Block #28046706/Trx 669066502c82ba1ed4a2ce4ad3b45c494a1cba3f |
View Raw JSON Data
{
"trx_id": "669066502c82ba1ed4a2ce4ad3b45c494a1cba3f",
"block": 28046706,
"trx_in_block": 16,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-11-26T19:48:15",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "9047.174096 VESTS"
}
]
}2018/09/22 04:42:18
2018/09/22 04:42:18
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 29294.098997 VESTS |
| Transaction Info | Block #26158087/Trx 69c044547d5d47669d1e2408db21ffeaa1684d2a |
View Raw JSON Data
{
"trx_id": "69c044547d5d47669d1e2408db21ffeaa1684d2a",
"block": 26158087,
"trx_in_block": 5,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-09-22T04:42:18",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "29294.098997 VESTS"
}
]
}2018/08/02 13:20:00
2018/08/02 13:20:00
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-48 |
| title | 期末总结 - yann学长的运维开发指南48 |
| body | ### 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:  <!--more--> ### 内容介绍 > * 过程梳理 > * 总结 ### 过程梳理 看看我们之前经过的内容 #### 确保功能测试之间相互隔离 这个内容是避免测试信息干扰生产 使用了新的测试类,同时分离了不同的测试用例文件 #### 解决页面刷新延迟 这个内容是代码有故障但没有测试出来 解决方案是升级了一下selenium 同时设置了页面延时,以便抓取故障 #### 使用TDD 实现新设计 该内容没有操作,是讲思路的 主要是避免增加不需要的功能 #### 逐步迭代,实现新设计 主要思路是如何区分不同用户的代办事项 先设计出测试代码,逐步修正 发现需要唯一的路径,发现视图需要匹配那个唯一路由 #### 使用Django测试客户端 一起测试视图、模板和URL 这里说的是client工具,可以替代之前使用的URL,视图,渲染检查 并使用了3个例子来验证client的效果 注意,不同页面应该使用不同的HTML模板 #### 用于添加待办事项的URL和视图 这个是说的是新建页面相关的内容 #### 调整模型 引入了list对象 给.list属性赋值并相与比较 并通过外键实现关联 #### 每个列表都应该有自己的URL 解决清单项目的唯一表示符的问题,以区分不同的清单 捕获URL中传入的参数 使用参数构造new_list视图 #### 待办事项加入现有清单 还需要一个添加页面,就像饭店门口的迎宾一样,让你输入一些东西,用来构建参数 这里还解决了一个表达式问题 #### 使用URL 引入做最后一次重构 在路由上匹配新增页面,同时重构路由模块 ### 总结 两月份开始写的,到7月底总算是到了一个小阶段,现在总结一下 第一个问题就是战线拉的太长, 不说读者,我自己都有些记不清代码的细节,以后再分享打算一周内结束一个主题 第二个问题是再现能力太差,为了手机上的显示效果,我大段代码都是用图片演示的,源文贴的也是一个网站,回头打算放github 第三 感觉通过公众号还是表达能力有限,后期打算只描述一下思想,同学自己去跟随代码的提交查看细节 后面打算会再起一个公众号,说说非it范围内的事情,有些人喜欢在一个公众号里说家常,我很排斥 新的公众号也会在这边公布出来,请 ### 预告 无 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0802/20180802211116.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24715844/Trx c9399307577bcd3f21b7e7e0e1d24c201bd12579 |
View Raw JSON Data
{
"trx_id": "c9399307577bcd3f21b7e7e0e1d24c201bd12579",
"block": 24715844,
"trx_in_block": 40,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-08-02T13:20:00",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-48",
"title": "期末总结 - yann学长的运维开发指南48",
"body": "### 目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n\n\n<!--more-->\n\n### 内容介绍\n> * 过程梳理\n> * 总结\n\n\n\n\n\n\n\n\n### 过程梳理\n看看我们之前经过的内容\n\n#### 确保功能测试之间相互隔离\n这个内容是避免测试信息干扰生产\n使用了新的测试类,同时分离了不同的测试用例文件\n\n#### 解决页面刷新延迟\n这个内容是代码有故障但没有测试出来\n解决方案是升级了一下selenium\n同时设置了页面延时,以便抓取故障\n\n#### 使用TDD 实现新设计\n该内容没有操作,是讲思路的\n主要是避免增加不需要的功能\n\n#### 逐步迭代,实现新设计\n主要思路是如何区分不同用户的代办事项\n先设计出测试代码,逐步修正\n发现需要唯一的路径,发现视图需要匹配那个唯一路由\n\n#### 使用Django测试客户端\n一起测试视图、模板和URL\n这里说的是client工具,可以替代之前使用的URL,视图,渲染检查\n并使用了3个例子来验证client的效果\n注意,不同页面应该使用不同的HTML模板\n\n#### 用于添加待办事项的URL和视图\n这个是说的是新建页面相关的内容\n\n#### 调整模型\n引入了list对象\n给.list属性赋值并相与比较\n并通过外键实现关联\n\n#### 每个列表都应该有自己的URL\n解决清单项目的唯一表示符的问题,以区分不同的清单\n捕获URL中传入的参数\n使用参数构造new_list视图\n\n#### 待办事项加入现有清单\n还需要一个添加页面,就像饭店门口的迎宾一样,让你输入一些东西,用来构建参数\n这里还解决了一个表达式问题\n\n#### 使用URL 引入做最后一次重构\n在路由上匹配新增页面,同时重构路由模块\n\n### 总结\n两月份开始写的,到7月底总算是到了一个小阶段,现在总结一下\n\n第一个问题就是战线拉的太长, 不说读者,我自己都有些记不清代码的细节,以后再分享打算一周内结束一个主题\n\n第二个问题是再现能力太差,为了手机上的显示效果,我大段代码都是用图片演示的,源文贴的也是一个网站,回头打算放github\n\n第三 感觉通过公众号还是表达能力有限,后期打算只描述一下思想,同学自己去跟随代码的提交查看细节\n\n后面打算会再起一个公众号,说说非it范围内的事情,有些人喜欢在一个公众号里说家常,我很排斥\n\n新的公众号也会在这边公布出来,请\n\n### 预告\n无\n\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0802/20180802211116.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321published a new post: url-yann-472018/07/26 08:49:21
tmp4321published a new post: url-yann-47
2018/07/26 08:49:21
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | url-yann-47 |
| title | 在表单中使用URL - yann学长的运维开发指南47 |
| body | ### 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度: 确保功能测试之间相互隔离 解决页面刷新延迟 使用TDD 实现新设计 逐步迭代,实现新设计 使用Django测试客户端一起测试视图、模板和URL 用于添加待办事项的URL和视图 调整模型 每个列表都应该有自己的URL 还需要一个视图,把待办事项加入现有清单 使用URL 引入做最后一次重构  <!--more--> ### 内容介绍 > * 测试上下文响应 > * 修改测试模块 > * 更新视图 > * 更新模板 > * 尝试功能测试 > * 路由重构 ### 测试上下文响应 修改模板,使用上节配置的URL #### 修改测试模块 视图需要把清单穿入模板,新建一个单元测试方法 ```bash vi lists/tests.py ```  测试一下新建的单元测试 #### 更新视图 ```bash python manage.py test lists # KeyError: 'list' ``` 原因是没有把视图传入模板 ```bash vi lists/views.py ```  #### 更新模板 再次测试 ```bash python manage.py test lists # AssertionError: False is not true : Couldnt find 'itemey 1' in response ``` 模板期望的items没有传入,所以修改模板 ```bash vi lists/templates/list.html ```  .item_set是一种反向查询的方法,后面会加以叙述 继续测试 ```bash python manage.py test lists # Ran 9 tests in 0.040s OK ``` 测试通过了 #### 尝试功能测试 再试一下功能测试 ```bash python manage.py test functional_tests # Ran 2 tests in 9.771s OK ``` 功能测试也通过了,貌似工作全完成了 ### 路由重构 superlists/urls.py是站点的路由, 如果是某个应用使用,可以单独配个文件夹 复制路由文件并稍作修改 ```bash cp superlists/urls.py lists/ vi superlists/urls.py ```  在父路由中导入了字路由并别名list_urls ```bash vi lists/urls.py ```  list部分的URL已近放在父路由里面了,这里只要写另一半就好 再次测试,测试通过 ### 预告 终于完成了,下次会梳理总结一下,然后django部分结束 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0726/20180726164344.png","http://www.iamyann.com/images/0726/20180726162111.png","http://www.iamyann.com/images/0726/20180726162405.png","http://www.iamyann.com/images/0726/20180726162728.png","http://www.iamyann.com/images/0726/20180726163608.png","http://www.iamyann.com/images/0726/20180726163737.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24509393/Trx 1d309099f8fb8c78623ce5e1ca1590fc293dea12 |
View Raw JSON Data
{
"trx_id": "1d309099f8fb8c78623ce5e1ca1590fc293dea12",
"block": 24509393,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-26T08:49:21",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "url-yann-47",
"title": "在表单中使用URL - yann学长的运维开发指南47",
"body": "### 目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n确保功能测试之间相互隔离\n解决页面刷新延迟\n使用TDD 实现新设计\n逐步迭代,实现新设计\n使用Django测试客户端一起测试视图、模板和URL\n用于添加待办事项的URL和视图\n调整模型\n每个列表都应该有自己的URL\n还需要一个视图,把待办事项加入现有清单\n使用URL 引入做最后一次重构\n\n\n<!--more-->\n\n### 内容介绍\n> * 测试上下文响应\n> * 修改测试模块\n> * 更新视图\n> * 更新模板\n> * 尝试功能测试\n> * 路由重构\n\n\n\n\n\n\n\n### 测试上下文响应\n修改模板,使用上节配置的URL\n#### 修改测试模块\n视图需要把清单穿入模板,新建一个单元测试方法\n\n```bash\nvi lists/tests.py\n```\n\n\n\n测试一下新建的单元测试\n\n#### 更新视图\n\n```bash\npython manage.py test lists\n#\nKeyError: 'list'\n```\n\n原因是没有把视图传入模板\n```bash\nvi lists/views.py\n```\n\n\n\n#### 更新模板\n再次测试\n\n```bash\npython manage.py test lists\n#\nAssertionError: False is not true : Couldnt find 'itemey 1' in response\n```\n模板期望的items没有传入,所以修改模板\n\n```bash\nvi lists/templates/list.html\n```\n\n\n\n.item_set是一种反向查询的方法,后面会加以叙述\n\n继续测试\n```bash\npython manage.py test lists\n#\nRan 9 tests in 0.040s\n\nOK\n```\n测试通过了\n\n#### 尝试功能测试\n再试一下功能测试\n\n```bash\npython manage.py test functional_tests\n#\nRan 2 tests in 9.771s\n\nOK\n```\n\n功能测试也通过了,貌似工作全完成了\n\n\n### 路由重构\nsuperlists/urls.py是站点的路由, 如果是某个应用使用,可以单独配个文件夹\n\n复制路由文件并稍作修改\n```bash\ncp superlists/urls.py lists/\nvi superlists/urls.py\n```\n\n\n\n在父路由中导入了字路由并别名list_urls \n```bash\nvi lists/urls.py\n```\n\n\n\nlist部分的URL已近放在父路由里面了,这里只要写另一半就好\n\n\n再次测试,测试通过\n\n\n### 预告\n终于完成了,下次会梳理总结一下,然后django部分结束\n\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0726/20180726164344.png\",\"http://www.iamyann.com/images/0726/20180726162111.png\",\"http://www.iamyann.com/images/0726/20180726162405.png\",\"http://www.iamyann.com/images/0726/20180726162728.png\",\"http://www.iamyann.com/images/0726/20180726163608.png\",\"http://www.iamyann.com/images/0726/20180726163737.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321published a new post: url-yann-462018/07/24 10:41:18
tmp4321published a new post: url-yann-46
2018/07/24 10:41:18
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | url-yann-46 |
| title | 新增项目的URL - yann学长的运维开发指南46 |
| body | ### 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度: 确保功能测试之间相互隔离 解决页面刷新延迟 使用TDD 实现新设计 逐步迭代,实现新设计 使用Django测试客户端一起测试视图、模板和URL 用于添加待办事项的URL和视图 调整模型 每个列表都应该有自己的URL 还需要一个视图,把待办事项加入现有清单  <!--more--> ### 内容介绍 > * 把代办事项加入现有清单 > * 先写测试项 > * 检查正则表达试 > * 更新正则表达式 > * 最后的新路由 > * 再次更新视图 > * 测试修改成果 > * 按照设计调整new_list视图 > * 配置重定向 > * 配置试图提交 ### 把代办事项加入现有清单 给新增事项用的视图 #### 先写测试项 ```bash vi lists/tests.py ```  测试能否保存内容并跳转到新页面 #### 检查正则表达试 测试一下,应该会有404出现 ```bash python manage.py test lists # AssertionError: 301 != 302 : Response didn t redirect as expected: Response code was 301 (expected 302) ``` 还没有设置URL,应该是404,为什么会301呢 查看一下URL的配置 ```bash vi superlists/urls.py ``` ```python url(r'^lists/(.+)/$', views.view_list, name='view_list'), ``` 正则表达式的范围太大了 #### 更新正则表达式 把URL传入视图 ```bash vi superlists/urls.py ```  更新正则表达式,只匹配数字 继续测试 ```bash python manage.py test lists # AssertionError: 404 != 302 : Response didn t redirect as expected: Response code was 404 (expected 302) ``` 符合期望值,测试成功 #### 最后的新路由 定义新路由用于新增项目 ```bash vi superlists/urls.py ```  ### 再次更新视图 再次测试, 报错有了变化 ```bash python manage.py test lists # AttributeError: module 'lists.views' has no attribute 'add_item' ``` 添加视图 ```bash vi lists/views.py ``` ```python def add_item(request): pass ``` 报错 ```bash python manage.py test lists # TypeError: add_item() takes 1 positional argument but 2 were given ``` #### 测试修改成果 再测试一下 ```bash vi lists/views.py ``` ```python def add_item(request, list_id): pass ``` 报错 ```bash python manage.py test lists # ValueError: The view lists.views.add_item didn t return an HttpResponse object. ``` ### 按照设计调整new_list视图 修改测试 ```bash def add_item(request, list_id): pass ``` 报错 ```bash python manage.py test lists # self.assertEqual(Item.objects.count(), 1) AssertionError: 0 != 1 ``` #### 配置重定向 ```bash vi lists/views.py ``` 重定向到有效地址  #### 配置试图提交 再次测试 ```bash python manage.py test lists # self.assertEqual(Item.objects.count(), 1) AssertionError: 0 != 1 ``` ```bash vi lists/views.py ```  补充上提交语句,测试通过 ### 预告 今天的内容也差不多了,下次会再调整一下视图文件,敬请期待 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0724/20180724182726.png","http://www.iamyann.com/images/0724/20180724172514.png","http://www.iamyann.com/images/0724/20180724173337.png","http://www.iamyann.com/images/0724/20180724173856.png","http://www.iamyann.com/images/0724/20180724181154.png","http://www.iamyann.com/images/0724/20180724181757.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24454064/Trx a942a0398967149fca31a77069c6dde6220029a1 |
View Raw JSON Data
{
"trx_id": "a942a0398967149fca31a77069c6dde6220029a1",
"block": 24454064,
"trx_in_block": 53,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-24T10:41:18",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "url-yann-46",
"title": "新增项目的URL - yann学长的运维开发指南46",
"body": "### 目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n确保功能测试之间相互隔离\n解决页面刷新延迟\n使用TDD 实现新设计\n逐步迭代,实现新设计\n使用Django测试客户端一起测试视图、模板和URL\n用于添加待办事项的URL和视图\n调整模型\n每个列表都应该有自己的URL\n还需要一个视图,把待办事项加入现有清单\n\n\n\n<!--more-->\n\n### 内容介绍\n> * 把代办事项加入现有清单\n> * 先写测试项\n> * 检查正则表达试\n> * 更新正则表达式\n> * 最后的新路由\n> * 再次更新视图\n> * 测试修改成果\n> * 按照设计调整new_list视图\n> * 配置重定向\n> * 配置试图提交\n\n\n\n\n\n\n### 把代办事项加入现有清单\n给新增事项用的视图\n#### 先写测试项\n```bash\nvi lists/tests.py\n```\n\n\n\n测试能否保存内容并跳转到新页面\n\n#### 检查正则表达试\n测试一下,应该会有404出现\n\n```bash\npython manage.py test lists\n#\nAssertionError: 301 != 302 : Response didn t redirect as expected: Response\ncode was 301 (expected 302)\n```\n\n还没有设置URL,应该是404,为什么会301呢\n查看一下URL的配置\n```bash\nvi superlists/urls.py\n```\n```python\nurl(r'^lists/(.+)/$', views.view_list, name='view_list'),\n```\n正则表达式的范围太大了\n\n#### 更新正则表达式\n把URL传入视图\n\n```bash\nvi superlists/urls.py\n```\n\n\n\n更新正则表达式,只匹配数字\n\n继续测试\n```bash\npython manage.py test lists\n#\nAssertionError: 404 != 302 : Response didn t redirect as expected: Response\ncode was 404 (expected 302)\n```\n符合期望值,测试成功\n\n#### 最后的新路由\n定义新路由用于新增项目\n\n```bash\nvi superlists/urls.py\n```\n\n\n\n\n### 再次更新视图\n再次测试, 报错有了变化\n\n```bash\npython manage.py test lists\n#\nAttributeError: module 'lists.views' has no attribute 'add_item'\n```\n\n添加视图\n```bash\nvi lists/views.py\n```\n```python\ndef add_item(request):\n pass\n```\n报错\n```bash\npython manage.py test lists\n#\nTypeError: add_item() takes 1 positional argument but 2 were given\n```\n#### 测试修改成果\n再测试一下\n```bash\nvi lists/views.py\n```\n```python\ndef add_item(request, list_id):\n pass\n```\n报错\n```bash\npython manage.py test lists\n#\nValueError: The view lists.views.add_item didn t return an HttpResponse object.\n```\n\n### 按照设计调整new_list视图\n修改测试\n```bash\ndef add_item(request, list_id):\n pass\n```\n\n报错\n```bash\npython manage.py test lists\n#\nself.assertEqual(Item.objects.count(), 1)\nAssertionError: 0 != 1\n```\n\n#### 配置重定向\n\n```bash\nvi lists/views.py\n```\n重定向到有效地址\n\n\n\n#### 配置试图提交\n\n再次测试\n```bash\npython manage.py test lists\n#\nself.assertEqual(Item.objects.count(), 1)\nAssertionError: 0 != 1\n```\n\n```bash\nvi lists/views.py\n```\n\n\n\n补充上提交语句,测试通过\n\n\n### 预告\n今天的内容也差不多了,下次会再调整一下视图文件,敬请期待\n\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0724/20180724182726.png\",\"http://www.iamyann.com/images/0724/20180724172514.png\",\"http://www.iamyann.com/images/0724/20180724173337.png\",\"http://www.iamyann.com/images/0724/20180724173856.png\",\"http://www.iamyann.com/images/0724/20180724181154.png\",\"http://www.iamyann.com/images/0724/20180724181757.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321published a new post: url-yann-452018/07/19 12:59:42
tmp4321published a new post: url-yann-45
2018/07/19 12:59:42
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | url-yann-45 |
| title | 给列表自己的URL - yann学长的运维开发指南45 |
| body | ### 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度: 确保功能测试之间相互隔离 解决页面刷新延迟 使用TDD 实现新设计 逐步迭代,实现新设计 使用Django测试客户端一起测试视图、模板和URL 用于添加待办事项的URL和视图 调整模型 每个列表都应该有自己的URL  <!--more--> ### 内容介绍 > * 给列表自己的URL > * 更新测试 > * 测试一下 > * 捕获URL > * 更新视图文件 > * 再次更新视图 > * 测试修改成果 > * 按照设计调整new_list视图 > * 进行功能测试 ### 给列表自己的URL 给每个列表自己的URL就是需要有唯一的标识符,比如数据库的id字段 #### 更新测试 ```bash vi lists/tests.py ```  把test_displays_all_items修改成 test_displays_only_items_for_that_list #### 测试一下 测试一下,应该会有404出现 ```bash python manage.py test lists # AssertionError: 404 != 200 : Couldn t retrieve content: Response code was 404 (expected 200) ``` #### 捕获URL 把URL传入视图 ```bash vi superlists/urls.py ```  调整URL中的正则表达式,加入捕获组,匹配 "/"后的任意字符,传入视图 继续测试 ```bash python manage.py test lists # TypeError: view_list() takes 1 positional argument but 2 were given ``` #### 更新视图文件 ```bash vi lists/views.py ``` ```python def view_list(request, list_id): ``` ### 再次更新视图 再次测试, 报错有了变化 ```bash python manage.py test lists # AssertionError: 1 != 0 : Response should not contain 'other list item 1' ``` 报警符合预期,把代办事项传入模板 ```bash vi lists/views.py ```  #### 测试修改成果 再测试一下 ```bash python manage.py test lists # ERROR: test_redirects_after_POST (lists.tests.NewListTest) ValueError: invalid literal for int() with base 10: 'the-only-list-in-the-world' ``` ### 按照设计调整new_list视图 修改测试 ```bash vi lists/tests.py ```  检查是否定义到新URL 测试之后发现仍然报错,再修改一下 ```bash vi lists/tests.py ``` 重定向到有效地址  再次测试通过 #### 进行功能测试 ```bash python manage.py test functional_tests # AssertionError: '2: Use peacock feathers to make a fly' not found in ['1: Use peacock feathers to make a fly'] ``` 功能测试还是有故障,下节再修复 ### 预告 今天的内容也差不多了,下次会再调整一下视图文件,敬请期待 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0719/20180719205349.png","http://www.iamyann.com/images/0719/20180719200530.png","http://www.iamyann.com/images/0719/20180719201319.png","http://www.iamyann.com/images/0719/20180719202303.png","http://www.iamyann.com/images/0719/20180719203824.png","http://www.iamyann.com/images/0719/20180719204040.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24312933/Trx e7a9d57c25c60613155525054d98c583c013a461 |
View Raw JSON Data
{
"trx_id": "e7a9d57c25c60613155525054d98c583c013a461",
"block": 24312933,
"trx_in_block": 37,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-19T12:59:42",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "url-yann-45",
"title": "给列表自己的URL - yann学长的运维开发指南45",
"body": "### 目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n确保功能测试之间相互隔离\n解决页面刷新延迟\n使用TDD 实现新设计\n逐步迭代,实现新设计\n使用Django测试客户端一起测试视图、模板和URL\n用于添加待办事项的URL和视图\n调整模型\n每个列表都应该有自己的URL\n\n\n\n<!--more-->\n\n### 内容介绍\n> * 给列表自己的URL\n> * 更新测试\n> * 测试一下\n> * 捕获URL\n> * 更新视图文件\n> * 再次更新视图\n> * 测试修改成果\n> * 按照设计调整new_list视图\n> * 进行功能测试\n\n\n\n\n\n### 给列表自己的URL\n给每个列表自己的URL就是需要有唯一的标识符,比如数据库的id字段\n#### 更新测试\n```bash\nvi lists/tests.py\n```\n\n\n\n把test_displays_all_items修改成 test_displays_only_items_for_that_list\n\n#### 测试一下\n测试一下,应该会有404出现\n\n```bash\npython manage.py test lists\n#\nAssertionError: 404 != 200 : Couldn t retrieve content: Response code was 404\n(expected 200)\n```\n\n#### 捕获URL\n把URL传入视图\n\n```bash\nvi superlists/urls.py\n```\n\n\n\n调整URL中的正则表达式,加入捕获组,匹配 \"/\"后的任意字符,传入视图\n\n继续测试\n```bash\npython manage.py test lists\n#\nTypeError: view_list() takes 1 positional argument but 2 were given\n```\n\n#### 更新视图文件\n\n```bash\nvi lists/views.py\n```\n```python\ndef view_list(request, list_id):\n```\n\n### 再次更新视图\n再次测试, 报错有了变化\n\n```bash\npython manage.py test lists\n#\nAssertionError: 1 != 0 : Response should not contain 'other list item 1'\n```\n报警符合预期,把代办事项传入模板\n```bash\nvi lists/views.py\n```\n\n\n\n#### 测试修改成果\n再测试一下\n```bash\npython manage.py test lists\n#\nERROR: test_redirects_after_POST (lists.tests.NewListTest)\nValueError: invalid literal for int() with base 10:\n'the-only-list-in-the-world'\n```\n\n### 按照设计调整new_list视图\n修改测试\n```bash\nvi lists/tests.py\n```\n\n\n检查是否定义到新URL\n测试之后发现仍然报错,再修改一下\n\n```bash\nvi lists/tests.py\n```\n重定向到有效地址\n\n\n\n\n再次测试通过\n\n#### 进行功能测试\n```bash\npython manage.py test functional_tests\n#\nAssertionError: '2: Use peacock feathers to make a fly' not found in ['1: Use\npeacock feathers to make a fly']\n```\n功能测试还是有故障,下节再修复\n### 预告\n今天的内容也差不多了,下次会再调整一下视图文件,敬请期待\n\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0719/20180719205349.png\",\"http://www.iamyann.com/images/0719/20180719200530.png\",\"http://www.iamyann.com/images/0719/20180719201319.png\",\"http://www.iamyann.com/images/0719/20180719202303.png\",\"http://www.iamyann.com/images/0719/20180719203824.png\",\"http://www.iamyann.com/images/0719/20180719204040.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/07/12 12:35:00
2018/07/12 12:35:00
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-44 |
| title | 调整模型 - yann学长的运维开发指南44 |
| body | ### 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度: 确保功能测试之间相互隔离 解决页面刷新延迟 使用TDD 实现新设计 逐步迭代,实现新设计 使用Django测试客户端一起测试视图、模板和URL 用于添加待办事项的URL和视图 调整模型  <!--more--> ### 内容介绍 > * 调整模型 > * 调整测试 > * 故障排除 > * 迁移数据库 > * 用外键实现关联 > * 测试修改成果 > * 根据模型调整代码 > * 修正第一个错误 > * 修正其他错误 ### 调整模型 前面做了很多修改,现在调整一下,让代码更好看一点 #### 调整测试 先看视图部分 ```bash vi lists/tests.py ```  新建了一个list对象,通过给.list属性赋值把代办事项归在对象下面 list是关键字,所以写成list_区别 对比数据库中保存的值和list_的值 #### 故障排除 修改了测试类后,会出现许多熟悉的错误 让我们来一一排查 ```bash python manage.py test lists # ImportError: cannot import name 'List' ``` 需要在models.py里建一个Item类 ```bash python manage.py test lists # AttributeError: 'List' object has no attribute 'save' ``` 没有save属性,object改为继承model类 ```bash python manage.py test lists # django.db.utils.OperationalError: no such table: lists_list ``` 数据库相关的故障 #### 迁移数据库 ```bash python manage.py makemigrations # self.assertEqual(first_saved_item.list, list_) AttributeError: 'Item' object has no attribute 'list' ``` ### 用外键实现关联 Item没有list属性,要想办法实现 先做个text属性试试 ```bash vi lists/models.py ```  #### 测试修改成果 ```bash python manage.py test lists # django.db.utils.OperationalError: no such column: lists_item.list ``` 迁移一下 ```bash python manage.py makemigrations # AssertionError: 'List object' != <List: List object> ``` Django只保存了list对象的字符串形式 如果要保存对象之间的关系需要用外键 ```bash vi lists/models.py ```  再做一次数据库迁移 ```bash rm lists/migrations/0004_item_list.py python manage.py makemigrations ``` ### 根据模型调整代码 ```bash python manage.py test lists # ERROR: test_displays_all_items (lists.tests.ListViewTest) django.db.utils.IntegrityError: NOT NULL constraint failed: lists_item.list_id ...... ``` #### 修正第一个错误 ```bash vi lists/tests.py ```  为代办事项创建父清单 #### 修正其他错误 ```bash vi lists/views.py ```  调用代办事项的父清单 修改之后测试通过 ### 预告 今天的内容也差不多了,下次会修改另一个内容,敬请期待 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0711/20180711142109.png","http://www.iamyann.com/images/0711/20180711111448.png","http://www.iamyann.com/images/0711/20180711114050.png","http://www.iamyann.com/images/0711/20180711134002.png","http://www.iamyann.com/images/0711/20180711141111.png","http://www.iamyann.com/images/0711/20180711141424.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24110957/Trx 328c65a57c4c8914702485b813edeab9f23b3ed5 |
View Raw JSON Data
{
"trx_id": "328c65a57c4c8914702485b813edeab9f23b3ed5",
"block": 24110957,
"trx_in_block": 29,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-12T12:35:00",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-44",
"title": "调整模型 - yann学长的运维开发指南44",
"body": "### 目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n确保功能测试之间相互隔离\n解决页面刷新延迟\n使用TDD 实现新设计\n逐步迭代,实现新设计\n使用Django测试客户端一起测试视图、模板和URL\n用于添加待办事项的URL和视图\n调整模型\n\n\n\n<!--more-->\n\n### 内容介绍\n> * 调整模型\n> * 调整测试\n> * 故障排除\n> * 迁移数据库\n> * 用外键实现关联\n> * 测试修改成果\n> * 根据模型调整代码\n> * 修正第一个错误\n> * 修正其他错误\n\n\n\n\n### 调整模型\n前面做了很多修改,现在调整一下,让代码更好看一点\n#### 调整测试\n先看视图部分\n```bash\nvi lists/tests.py\n```\n\n\n\n新建了一个list对象,通过给.list属性赋值把代办事项归在对象下面\nlist是关键字,所以写成list_区别\n\n对比数据库中保存的值和list_的值\n\n#### 故障排除\n修改了测试类后,会出现许多熟悉的错误\n让我们来一一排查\n\n```bash\npython manage.py test lists\n#\nImportError: cannot import name 'List'\n```\n需要在models.py里建一个Item类\n\n```bash\npython manage.py test lists\n#\nAttributeError: 'List' object has no attribute 'save'\n```\n没有save属性,object改为继承model类\n\n```bash\npython manage.py test lists\n#\ndjango.db.utils.OperationalError: no such table: lists_list\n```\n数据库相关的故障\n\n#### 迁移数据库\n\n```bash\npython manage.py makemigrations\n#\nself.assertEqual(first_saved_item.list, list_)\nAttributeError: 'Item' object has no attribute 'list'\n```\n\n### 用外键实现关联\nItem没有list属性,要想办法实现\n先做个text属性试试\n\n```bash\nvi lists/models.py\n```\n\n\n\n#### 测试修改成果\n```bash\npython manage.py test lists\n#\ndjango.db.utils.OperationalError: no such column: lists_item.list\n```\n迁移一下\n\n```bash\npython manage.py makemigrations\n#\nAssertionError: 'List object' != <List: List object>\n```\n\nDjango只保存了list对象的字符串形式\n如果要保存对象之间的关系需要用外键\n\n```bash\nvi lists/models.py\n```\n\n\n\n\n再做一次数据库迁移\n```bash\nrm lists/migrations/0004_item_list.py\npython manage.py makemigrations\n```\n### 根据模型调整代码\n```bash\npython manage.py test lists\n#\nERROR: test_displays_all_items (lists.tests.ListViewTest)\ndjango.db.utils.IntegrityError: NOT NULL constraint failed: lists_item.list_id\n......\n```\n\n#### 修正第一个错误\n```bash\nvi lists/tests.py\n```\n\n\n\n为代办事项创建父清单\n\n#### 修正其他错误\n```bash\nvi lists/views.py\n```\n\n\n\n调用代办事项的父清单\n修改之后测试通过\n\n### 预告\n今天的内容也差不多了,下次会修改另一个内容,敬请期待\n\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0711/20180711142109.png\",\"http://www.iamyann.com/images/0711/20180711111448.png\",\"http://www.iamyann.com/images/0711/20180711114050.png\",\"http://www.iamyann.com/images/0711/20180711134002.png\",\"http://www.iamyann.com/images/0711/20180711141111.png\",\"http://www.iamyann.com/images/0711/20180711141424.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}fastresteemupvoted (1.00%) @tmp4321 / url-yann-432018/07/10 03:23:24
fastresteemupvoted (1.00%) @tmp4321 / url-yann-43
2018/07/10 03:23:24
| voter | fastresteem |
| author | tmp4321 |
| permlink | url-yann-43 |
| weight | 100 (1.00%) |
| Transaction Info | Block #24042342/Trx 27c5695e63165f21ec7f110d5fe57083c80ac721 |
View Raw JSON Data
{
"trx_id": "27c5695e63165f21ec7f110d5fe57083c80ac721",
"block": 24042342,
"trx_in_block": 44,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-10T03:23:24",
"op": [
"vote",
{
"voter": "fastresteem",
"author": "tmp4321",
"permlink": "url-yann-43",
"weight": 100
}
]
}tmp4321published a new post: url-yann-432018/07/10 03:23:15
tmp4321published a new post: url-yann-43
2018/07/10 03:23:15
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | url-yann-43 |
| title | 表单指向添加的URL - yann学长的运维开发指南43 |
| body | ### 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度: 确保功能测试之间相互隔离 解决页面刷新延迟 使用TDD 实现新设计 逐步迭代,实现新设计 使用Django测试客户端一起测试视图、模板和URL 用于添加待办事项的URL和视图  <!--more--> ### 内容介绍 > * 删除冗余代码 > * 删除代码 > * 删除测试 > * 表单指向新URL ### 删除冗余代码 基于前面的测试, 部分构建视图时的代码可以删除了 #### 删除代码 先看视图部分 ```bash vi lists/views.py ```  删除request.method == 'POST'相关的3条判断语句 #### 删除测试 删除 test_only_saves_items_when_necessary 方法 ```bash vi lists/tests.py ```  再次测试 ```bash python manage.py test lists Ran 6 tests in 0.016s OK ``` ### 表单指向新URL 运行功能测试 ```bash python manage.py test functional_tests ERROR: test_can_start_a_list_for_one_user ERROR: test_multiple_users_can_start_lists_at_different_urls ``` 原因是表单的指向尚未修改 ```bash vi lists/templates/home.html ```  ```bash vi lists/templates/list.html ```  再次测试,恢复之前的报错,修改成功 ```bash python manage.py test functional_tests AssertionError: '1: Buy milk' not found in ['1: Buy peacock feathers', '2: Buy milk'] ``` 测试通过 ### 预告 今天的内容也差不多了,下次会调整一下代码,毕竟也修改了很多次 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0705/20180710110213.png","http://www.iamyann.com/images/0705/20180705153957.png","http://www.iamyann.com/images/0705/20180705163954.png","http://www.iamyann.com/images/0706/20180706182411.png","http://www.iamyann.com/images/0706/20180706182717.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #24042339/Trx 69aa4a2ef148c15fb9b49bab3bed763d24b9305a |
View Raw JSON Data
{
"trx_id": "69aa4a2ef148c15fb9b49bab3bed763d24b9305a",
"block": 24042339,
"trx_in_block": 13,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-10T03:23:15",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "url-yann-43",
"title": "表单指向添加的URL - yann学长的运维开发指南43",
"body": "### 目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n确保功能测试之间相互隔离\n解决页面刷新延迟\n使用TDD 实现新设计\n逐步迭代,实现新设计\n使用Django测试客户端一起测试视图、模板和URL\n用于添加待办事项的URL和视图\n\n\n\n<!--more-->\n\n### 内容介绍\n> * 删除冗余代码\n> * 删除代码\n> * 删除测试\n> * 表单指向新URL\n\n\n\n### 删除冗余代码\n基于前面的测试, 部分构建视图时的代码可以删除了\n#### 删除代码\n先看视图部分\n```bash\nvi lists/views.py\n```\n\n\n\n删除request.method == 'POST'相关的3条判断语句\n\n#### 删除测试\n删除 test_only_saves_items_when_necessary 方法\n\n```bash\nvi lists/tests.py\n```\n\n\n\n再次测试\n\n```bash\npython manage.py test lists\n\nRan 6 tests in 0.016s\nOK\n```\n\n### 表单指向新URL\n运行功能测试\n\n```bash\npython manage.py test functional_tests\n\nERROR: test_can_start_a_list_for_one_user\n\nERROR: test_multiple_users_can_start_lists_at_different_urls\n\n```\n原因是表单的指向尚未修改\n```bash\nvi lists/templates/home.html\n```\n\n\n\n```bash\nvi lists/templates/list.html\n```\n\n\n\n\n再次测试,恢复之前的报错,修改成功\n```bash\npython manage.py test functional_tests\n\nAssertionError: '1: Buy milk' not found in ['1: Buy peacock feathers', '2: Buy\nmilk']\n```\n\n测试通过\n\n### 预告\n今天的内容也差不多了,下次会调整一下代码,毕竟也修改了很多次\n\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0705/20180710110213.png\",\"http://www.iamyann.com/images/0705/20180705153957.png\",\"http://www.iamyann.com/images/0705/20180705163954.png\",\"http://www.iamyann.com/images/0706/20180706182411.png\",\"http://www.iamyann.com/images/0706/20180706182717.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}a-0-0replied to @tmp4321 / re-tmp4321-url-yann-42-20180703t123235362z2018/07/03 12:32:39
a-0-0replied to @tmp4321 / re-tmp4321-url-yann-42-20180703t123235362z
2018/07/03 12:32:39
| parent author | tmp4321 |
| parent permlink | url-yann-42 |
| author | a-0-0 |
| permlink | re-tmp4321-url-yann-42-20180703t123235362z |
| title | |
| body | # # upvote for me please? https://steemit.com/news/@bible.com/2sysip # |
| json metadata | {"tags":["devops"],"links":["https://steemit.com/news/@bible.com/2sysip"],"app":"steemit/0.1"} |
| Transaction Info | Block #23852168/Trx 8249e2ffc4faf62a3a88b15c75e387073fae161b |
View Raw JSON Data
{
"trx_id": "8249e2ffc4faf62a3a88b15c75e387073fae161b",
"block": 23852168,
"trx_in_block": 40,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-03T12:32:39",
"op": [
"comment",
{
"parent_author": "tmp4321",
"parent_permlink": "url-yann-42",
"author": "a-0-0",
"permlink": "re-tmp4321-url-yann-42-20180703t123235362z",
"title": "",
"body": "#\n# upvote for me please? https://steemit.com/news/@bible.com/2sysip\n#",
"json_metadata": "{\"tags\":[\"devops\"],\"links\":[\"https://steemit.com/news/@bible.com/2sysip\"],\"app\":\"steemit/0.1\"}"
}
]
}alphabotupvoted (1.00%) @tmp4321 / url-yann-422018/07/03 12:32:00
alphabotupvoted (1.00%) @tmp4321 / url-yann-42
2018/07/03 12:32:00
| voter | alphabot |
| author | tmp4321 |
| permlink | url-yann-42 |
| weight | 100 (1.00%) |
| Transaction Info | Block #23852156/Trx 6cd80b5592ec6716f0da6e0c2b5464c52ae92541 |
View Raw JSON Data
{
"trx_id": "6cd80b5592ec6716f0da6e0c2b5464c52ae92541",
"block": 23852156,
"trx_in_block": 56,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-03T12:32:00",
"op": [
"vote",
{
"voter": "alphabot",
"author": "tmp4321",
"permlink": "url-yann-42",
"weight": 100
}
]
}tmp4321published a new post: url-yann-422018/07/03 12:31:45
tmp4321published a new post: url-yann-42
2018/07/03 12:31:45
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | url-yann-42 |
| title | 添加项目的URL - yann学长的运维开发指南42 |
| body | 目前进度 第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度: 确保功能测试之间相互隔离 解决页面刷新延迟 使用TDD 实现新设计 逐步迭代,实现新设计 使用Django测试客户端一起测试视图、模板和URL 用于添加待办事项的URL和视图 调整模型 每个列表都应该有自己的URL 还需要一个视图,把待办事项加入现有清单 使用URL 引入做最后一次重构 http://www.iamyann.com/images/0703/20180703202305.png 内容介绍 新增项目需要URL 新建测试 添加路由 建立新的视图 修改视图 新增项目需要URL 需要准备一个URL给新增list时使用 新建测试 再新建一个测试类 vi lists / tests . py http://www.iamyann.com/images/0703/20180703194938.png 测试插入一个新项目,及302状态码 还有其他的写法,不过回头再说 添加路由 测试失败 python manage . py test lists AssertionError : 0 != 1 code was 404 ( expected 302 ) 缺少路由 vi superlists / urls . py http://www.iamyann.com/images/0703/20180703200306.png 建立新的视图 再次测试 python manage . py test lists no attribute 'new_list' 报没有视图 vi lists / views . py def new_list ( request ): pass 告警更新 python manage . py test lists The view lists . views . new_list didn ’ t return an HttpResponse object 修改视图 vi lists / views . py http://www.iamyann.com/images/0703/20180703200723.png 再次进行测试 python manage . py test lists self . assertEqual ( Item . objects . count (), 1 ) AssertionError : 0 != 1 把数据库中没有查到数据 补上提交语句 http://www.iamyann.com/images/0703/20180703200926.png 再次进行测试 python manage . py test lists Ran 7 tests in 0.030s OK 测试通过 预告 今天的内容也差不多了,新的测试类可以使用了,同时开发的语句也补充上去了 时间过的飞快,下节再见 http://hero.iamyann.com/blog_webchat.jpg |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0703/20180703202305.png","http://www.iamyann.com/images/0703/20180703194938.png","http://www.iamyann.com/images/0703/20180703200306.png","http://www.iamyann.com/images/0703/20180703200723.png","http://www.iamyann.com/images/0703/20180703200926.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #23852152/Trx 41cf72a4877f6280543871835ca4e899cdcc647e |
View Raw JSON Data
{
"trx_id": "41cf72a4877f6280543871835ca4e899cdcc647e",
"block": 23852152,
"trx_in_block": 50,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-07-03T12:31:45",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "url-yann-42",
"title": "添加项目的URL - yann学长的运维开发指南42",
"body": "目前进度\n第6章的内容比较长,所以拆分成了若干个小节说明,以下为当前进度:\n\n确保功能测试之间相互隔离\n解决页面刷新延迟\n使用TDD 实现新设计\n逐步迭代,实现新设计\n使用Django测试客户端一起测试视图、模板和URL\n用于添加待办事项的URL和视图\n调整模型\n每个列表都应该有自己的URL\n还需要一个视图,把待办事项加入现有清单\n使用URL 引入做最后一次重构\n\nhttp://www.iamyann.com/images/0703/20180703202305.png\n\n内容介绍\n新增项目需要URL\n新建测试\n添加路由\n建立新的视图\n修改视图\n新增项目需要URL\n需要准备一个URL给新增list时使用\n\n新建测试\n再新建一个测试类\n\nvi lists\n/\ntests\n.\npy\nhttp://www.iamyann.com/images/0703/20180703194938.png\n\n测试插入一个新项目,及302状态码\n还有其他的写法,不过回头再说\n\n添加路由\n测试失败\n\npython manage\n.\npy test lists\nAssertionError\n:\n \n0\n \n!=\n \n1\ncode was \n404\n \n(\nexpected \n302\n)\n缺少路由\n\nvi superlists\n/\nurls\n.\npy\nhttp://www.iamyann.com/images/0703/20180703200306.png\n\n建立新的视图\n再次测试\n\npython manage\n.\npy test lists\nno attribute \n'new_list'\n报没有视图\n\nvi lists\n/\nviews\n.\npy\ndef\n new_list\n(\nrequest\n):\n \npass\n告警更新\n\npython manage\n.\npy test lists\nThe\n view lists\n.\nviews\n.\nnew_list didn\n’\nt \nreturn\n an \nHttpResponse\n object\n修改视图\nvi lists\n/\nviews\n.\npy\nhttp://www.iamyann.com/images/0703/20180703200723.png\n再次进行测试\n\npython manage\n.\npy test lists\nself\n.\nassertEqual\n(\nItem\n.\nobjects\n.\ncount\n(),\n \n1\n)\nAssertionError\n:\n \n0\n \n!=\n \n1\n把数据库中没有查到数据\n\n补上提交语句\nhttp://www.iamyann.com/images/0703/20180703200926.png\n\n再次进行测试\n\npython manage\n.\npy test lists\nRan\n \n7\n tests \nin\n \n0.030s\nOK\n测试通过\n\n预告\n今天的内容也差不多了,新的测试类可以使用了,同时开发的语句也补充上去了\n\n时间过的飞快,下节再见\n\nhttp://hero.iamyann.com/blog_webchat.jpg",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0703/20180703202305.png\",\"http://www.iamyann.com/images/0703/20180703194938.png\",\"http://www.iamyann.com/images/0703/20180703200306.png\",\"http://www.iamyann.com/images/0703/20180703200723.png\",\"http://www.iamyann.com/images/0703/20180703200926.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321published a new post: url-yann-412018/06/21 12:45:42
tmp4321published a new post: url-yann-41
2018/06/21 12:45:42
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | url-yann-41 |
| title | 新的URL - yann学长的运维开发指南41 |
| body | ### 大纲 第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站 加上域名就可以对外展示的那种  <!--more--> ### 内容介绍 > * 新的URL > * 新建清单测试 > * 添加模板 > * 建立新的模板 > * 修改模板和视图 ### 新的URL 在之前的测试中,发现需要额外的一个URL,不能用首页来展示查询内容 所以本章就造一个URL出来 #### 新建清单测试 再新建一个测试 ```bash vi lists/tests.py ```  #### 添加模板 测试失败 ```bash python manage.py test lists AssertionError: False is not true : Template 'list.html' was not a template used to render the response. Actual template(s) used: home.html ``` 缺少模板 ```bash vi lists/views.py ```  #### 建立新的模板 再次测试 ```bash python manage.py test lists django.template.exceptions.TemplateDoesNotExist: list.html ``` 报没有模板 ```bash touch lists/templates/list.html python manage.py test lists AssertionError: False is not true : Couldn't find 'itemey 1' in response' ``` 告警有了变化 #### 修改模板和视图 复制home.html的内容,再做一些修改 ```bash cp lists/templates/home.html lists/templates/list.html vi lists/templates/home.html vi lists/views.py ```   再次进行测试 ```bash python manage.py test lists AssertionError: '1: Buy milk' not found in ['1: Buy peacock feathers', '2: Buy milk'] ``` 新配置的URL起作用了,和首页区分开来 ### 预告 战线拖的太长,我也快归纳不出全局了,下节要更新下结构,突出大纲 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0621/20180621204227.png","http://www.iamyann.com/images/0621/20180621201550.png","http://www.iamyann.com/images/0621/20180621201855.png","http://www.iamyann.com/images/0621/20180621202957.png","http://www.iamyann.com/images/0621/20180621203035.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #23516414/Trx 0ca8d530d69d78fc801d47751a980cfe4929d8d1 |
View Raw JSON Data
{
"trx_id": "0ca8d530d69d78fc801d47751a980cfe4929d8d1",
"block": 23516414,
"trx_in_block": 40,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-21T12:45:42",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "url-yann-41",
"title": "新的URL - yann学长的运维开发指南41",
"body": "### 大纲\n第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站\n加上域名就可以对外展示的那种\n\n\n<!--more-->\n\n### 内容介绍\n> * 新的URL\n> * 新建清单测试\n> * 添加模板\n> * 建立新的模板\n> * 修改模板和视图\n\n### 新的URL\n在之前的测试中,发现需要额外的一个URL,不能用首页来展示查询内容\n\n所以本章就造一个URL出来\n\n#### 新建清单测试\n再新建一个测试\n```bash\nvi lists/tests.py\n```\n\n\n\n#### 添加模板\n测试失败\n\n```bash\npython manage.py test lists\n\nAssertionError: False is not true : Template 'list.html' was not a template\nused to render the response. Actual template(s) used: home.html\n```\n缺少模板\n\n```bash\nvi lists/views.py\n```\n\n\n#### 建立新的模板\n再次测试\n\n```bash\npython manage.py test lists\n\ndjango.template.exceptions.TemplateDoesNotExist: list.html\n```\n报没有模板\n\n```bash\ntouch lists/templates/list.html\npython manage.py test lists\n\nAssertionError: False is not true : Couldn't find 'itemey 1' in response'\n```\n告警有了变化\n\n#### 修改模板和视图\n复制home.html的内容,再做一些修改\n\n```bash\ncp lists/templates/home.html lists/templates/list.html\n\nvi lists/templates/home.html\nvi lists/views.py\n```\n\n\n\n\n\n再次进行测试\n```bash\npython manage.py test lists\n\nAssertionError: '1: Buy milk' not found in ['1: Buy peacock feathers', '2: Buy\nmilk']\n```\n新配置的URL起作用了,和首页区分开来\n\n### 预告\n战线拖的太长,我也快归纳不出全局了,下节要更新下结构,突出大纲\n\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0621/20180621204227.png\",\"http://www.iamyann.com/images/0621/20180621201550.png\",\"http://www.iamyann.com/images/0621/20180621201855.png\",\"http://www.iamyann.com/images/0621/20180621202957.png\",\"http://www.iamyann.com/images/0621/20180621203035.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/06/19 09:59:24
2018/06/19 09:59:24
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-40 |
| title | 新的工具 - yann学长的运维开发指南40 |
| body | ### 大纲 第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站 加上域名就可以对外展示的那种  <!--more--> ### 内容介绍 > * 新的工具 > * 新建测试类 > * 配置新的URL > * 建立新的视图 > * 再次更新 > * 测试通过? > * 重新审视代码 ### 新的工具 之前的测试代码比较繁琐,需要检查URL解析,检查视图函数及模板渲染 这里介绍一个新的工具,来替代上述三种检查,虽然新工具一定会有新的问题,先用起来 #### 新建测试类 ```bash vi lists/tests.py ```  #### 配置新的URL 测试新写的测试类 ```bash python manage.py test lists AssertionError: 404 != 200 ``` 设置的唯一URL还不存在,自己设定一下 ```bash vi superlists/urls.py ```  增加一条路由匹配 #### 建立新的视图 再次测试 ```bash python manage.py test lists AttributeError: module 'lists.views' has no attribute 'view_list' ``` 建了匹配没有给对应的视图,自己设定一下 ```bash vi lists/views.py ``` ```Python def view_list(request): pass ``` 最简单的试图 #### 再次更新 再运行一下测试 ```bash python manage.py test lists It returned None instead. FAILED (errors=1) ``` 把视图函数补完,先借用home页面 ```bash vi lists/views.py ```  #### 测试通过? 单元测试通过 ```bash python manage.py test lists Ran 7 tests in 0.016s OK ``` 再试一下功能测试 ```python python manage.py test functional_tests FAIL: test_can_start_a_list_for_one_user ``` 依然失败 #### 重新审视代码 暂时没有很好的办法,重看下之前的代码 然后发现了一个问题 ```bash vi lists/templates/home.html ``` ```html <!-- <form method="POST"> --> <form method="POST" action="/"> ``` 在表单里,action表示提交后的跳转动作,之前一直没有写,也就没跳转orz 再次测试一下 ```bash python manage.py test functional_tests FAIL: test_multiple_users_can_start_lists_at_different_urls ``` 回到了之前的状况,下次可以深入改造了 ### 预告 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0619/20180619175618.png","http://www.iamyann.com/images/0619/20180619171859.png","http://www.iamyann.com/images/0619/20180619172403.png","http://www.iamyann.com/images/0619/20180619173659.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #23455529/Trx 4166b95c11eb73230ffcfa71aa234e92a10eeefb |
View Raw JSON Data
{
"trx_id": "4166b95c11eb73230ffcfa71aa234e92a10eeefb",
"block": 23455529,
"trx_in_block": 19,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-19T09:59:24",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-40",
"title": "新的工具 - yann学长的运维开发指南40",
"body": "### 大纲\n第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站\n加上域名就可以对外展示的那种\n\n\n<!--more-->\n\n### 内容介绍\n> * 新的工具\n> * 新建测试类\n> * 配置新的URL\n> * 建立新的视图\n> * 再次更新\n> * 测试通过?\n> * 重新审视代码\n\n### 新的工具\n之前的测试代码比较繁琐,需要检查URL解析,检查视图函数及模板渲染\n\n这里介绍一个新的工具,来替代上述三种检查,虽然新工具一定会有新的问题,先用起来\n\n#### 新建测试类\n```bash\nvi lists/tests.py\n```\n\n\n\n#### 配置新的URL\n测试新写的测试类\n\n```bash\npython manage.py test lists\n\nAssertionError: 404 != 200\n```\n设置的唯一URL还不存在,自己设定一下\n\n```bash\nvi superlists/urls.py\n```\n\n\n\n增加一条路由匹配\n\n#### 建立新的视图\n再次测试\n\n```bash\npython manage.py test lists\n\nAttributeError: module 'lists.views' has no attribute 'view_list'\n```\n建了匹配没有给对应的视图,自己设定一下\n\n```bash\nvi lists/views.py\n```\n```Python\ndef view_list(request):\n pass\n```\n最简单的试图\n\n#### 再次更新\n再运行一下测试\n\n```bash\npython manage.py test lists\n\nIt returned None instead. FAILED (errors=1)\n```\n把视图函数补完,先借用home页面\n```bash\nvi lists/views.py\n```\n\n\n\n#### 测试通过?\n单元测试通过\n```bash\npython manage.py test lists\n\nRan 7 tests in 0.016s\nOK\n```\n再试一下功能测试\n```python\npython manage.py test functional_tests\n\nFAIL: test_can_start_a_list_for_one_user\n```\n依然失败\n\n#### 重新审视代码\n暂时没有很好的办法,重看下之前的代码\n然后发现了一个问题\n\n```bash\nvi lists/templates/home.html\n```\n```html\n<!-- <form method=\"POST\"> -->\n<form method=\"POST\" action=\"/\"> \n```\n在表单里,action表示提交后的跳转动作,之前一直没有写,也就没跳转orz\n\n再次测试一下\n```bash\npython manage.py test functional_tests\n\nFAIL: test_multiple_users_can_start_lists_at_different_urls\n```\n回到了之前的状况,下次可以深入改造了\n### 预告\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0619/20180619175618.png\",\"http://www.iamyann.com/images/0619/20180619171859.png\",\"http://www.iamyann.com/images/0619/20180619172403.png\",\"http://www.iamyann.com/images/0619/20180619173659.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}hackerzizonupvoted (1.00%) @tmp4321 / yann-382018/06/14 12:59:15
hackerzizonupvoted (1.00%) @tmp4321 / yann-38
2018/06/14 12:59:15
| voter | hackerzizon |
| author | tmp4321 |
| permlink | yann-38 |
| weight | 100 (1.00%) |
| Transaction Info | Block #23315150/Trx 6d8de49d1915668d83a1c4438c9ff409b76532e7 |
View Raw JSON Data
{
"trx_id": "6d8de49d1915668d83a1c4438c9ff409b76532e7",
"block": 23315150,
"trx_in_block": 46,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-14T12:59:15",
"op": [
"vote",
{
"voter": "hackerzizon",
"author": "tmp4321",
"permlink": "yann-38",
"weight": 100
}
]
}2018/06/14 12:58:45
2018/06/14 12:58:45
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-38 |
| title | 一点设计 - yann学长的运维开发指南38 |
| body | ### 大纲 第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站 加上域名就可以对外展示的那种  <!--more--> ### 内容介绍 > * 下面来看今天的内容 > * 具体内容如下: > * 访问方法 > * 新建多用户测试 > * 补完测试脚本 > * 测试效果 > * 构造唯一URL测试 > * 尝试修改视图 ### 一点点设计 #### 访问方法 今天来说一点点设计,涉及备忘录的访问方式,新建条目和文件的方式 作为一个web应用,所谓的方法也是通过web实现的 /lists/id/ 表示清单各自独立的URL /lists/new 表示新建清单条目 /lists/id/add_item 在已有的清单上建立文章 #### 新建多用户测试 老规矩, 有新的需求先把相关的测试写出来 ```bash vi functional_tests/tests.py ```  增加了一个多用户测试,使用了 self.assertRegex() 函数,回头再讲解 #### 补完测试脚本 继续补充其他测试语句  内容如下: 新用户,确认没有之前提交的条目 Buy peacock feathers和make a fly 录入Buy milk 条目,获取唯一URL 再次确认没有之前提交的条目 #### 测试效果 运行一下功能测试,发现一个成功,一个失败 ```bash python manage.py test functional_tests .F '/lists/.+' not found in 'http://localhost:8081/' ``` 看来我们的测试方法还需要修正 #### 构造唯一URL测试 根据报错提示,没有唯一的URL 鉴于相关的代码还没写,我们可以想办法构造一个,先增加点测试 ```bash vi lists/tests.py ``` ```python self.assertEqual(response.status_code, 302) self.assertEqual(response['location'], '/lists/the-only-list-in-the-world/') ``` ```bash python manage.py test lists AssertionError: '/' != '/lists/the-only-list-in-the-world/' ``` 没有这个网址 这是我们最早设置的提示语句,说明功能测试已经跑到最后了,运行测试成功 #### 尝试修改视图 修改下视图文件,看能不能暂时构造出来 ```bash vi lists/views.py ```  再次测试一下 ```bash python manage.py test lists ```  测试依然无法通过, 只有老老实实写语句了,下次会为其添加唯一URL ### 预告 时间过的飞快,下节再见  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0614/20180614205540.png","http://www.iamyann.com/images/0614/20180614201357.png","http://www.iamyann.com/images/0614/20180614202148.png","http://www.iamyann.com/images/0614/20180614204648.png","http://www.iamyann.com/images/0614/20180614204855.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #23315140/Trx ab227997319cb11b276473ed588325e1edf3a647 |
View Raw JSON Data
{
"trx_id": "ab227997319cb11b276473ed588325e1edf3a647",
"block": 23315140,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-14T12:58:45",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-38",
"title": "一点设计 - yann学长的运维开发指南38",
"body": "### 大纲\n第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站\n加上域名就可以对外展示的那种\n\n<!--more-->\n\n### 内容介绍\n\n\n> * 下面来看今天的内容\n> * 具体内容如下:\n> * 访问方法\n> * 新建多用户测试\n> * 补完测试脚本\n> * 测试效果\n> * 构造唯一URL测试\n> * 尝试修改视图\n\n### 一点点设计\n#### 访问方法\n今天来说一点点设计,涉及备忘录的访问方式,新建条目和文件的方式\n\n作为一个web应用,所谓的方法也是通过web实现的\n\n/lists/id/\n表示清单各自独立的URL\n\n/lists/new\n表示新建清单条目\n\n/lists/id/add_item\n在已有的清单上建立文章\n\n#### 新建多用户测试\n老规矩, 有新的需求先把相关的测试写出来\n\n```bash\nvi functional_tests/tests.py\n```\n\n\n增加了一个多用户测试,使用了 self.assertRegex() 函数,回头再讲解\n\n#### 补完测试脚本\n继续补充其他测试语句\n\n\n内容如下:\n新用户,确认没有之前提交的条目 Buy peacock feathers和make a fly\n\n录入Buy milk 条目,获取唯一URL\n\n再次确认没有之前提交的条目\n\n#### 测试效果\n运行一下功能测试,发现一个成功,一个失败\n\n```bash\npython manage.py test functional_tests\n.F\n'/lists/.+' not found in\n'http://localhost:8081/'\n```\n看来我们的测试方法还需要修正\n\n#### 构造唯一URL测试\n根据报错提示,没有唯一的URL\n\n鉴于相关的代码还没写,我们可以想办法构造一个,先增加点测试\n```bash\nvi lists/tests.py\n```\n```python\nself.assertEqual(response.status_code, 302)\nself.assertEqual(response['location'], '/lists/the-only-list-in-the-world/')\n```\n```bash\npython manage.py test lists\n\nAssertionError: '/' != '/lists/the-only-list-in-the-world/'\n```\n没有这个网址\n\n\n这是我们最早设置的提示语句,说明功能测试已经跑到最后了,运行测试成功\n\n#### 尝试修改视图\n修改下视图文件,看能不能暂时构造出来\n```bash\nvi lists/views.py\n```\n\n\n再次测试一下\n```bash\npython manage.py test lists\n```\n\n\n测试依然无法通过, 只有老老实实写语句了,下次会为其添加唯一URL\n\n### 预告\n时间过的飞快,下节再见\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0614/20180614205540.png\",\"http://www.iamyann.com/images/0614/20180614201357.png\",\"http://www.iamyann.com/images/0614/20180614202148.png\",\"http://www.iamyann.com/images/0614/20180614204648.png\",\"http://www.iamyann.com/images/0614/20180614204855.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/06/05 13:22:27
2018/06/05 13:22:27
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-37 |
| title | 网页渲染时间 - yann学长的运维开发指南37 |
| body | ### 大纲 第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站 加上域名就可以对外展示的那种  <!--more--> ### 内容介绍 今天说一下,修改代码以解决测试框架即时操作与网页渲染过慢的矛盾 下面来看今天的内容 具体内容如下: > * 整理模块 > * 文件目录结构 > * 添加NewVisitorTest类 > * 修改访问地址 > * 运行新的功能测试 ### 解决网页渲染时间 #### 只运行单元测试 现在运行测试命令,Django会运行功能测试和单元测试 ```bash python manage.py test ......F Ran 7 tests in 6.732s ``` 如果打算只运行单元测试,就要额外指出 ```bash python manage.py test lists Ran 6 tests in 0.009s ``` #### 升级Selenium 原书的作者在这里升级了Selenium和Geckodriver,因为他遇到了问题 但我并没有遇到,也可能是因为我没有使用Geckodriver. 总之贴一下方法. ```bash pip install --upgrade selenium # 下载新的Geckodriver https://github.com/mozilla/geckodriver/releases ``` #### 说一下 time.sleep 在之前的功能测试里,有这样一个语句  这个语句的意思是发送完Enter后休眠1秒钟,让测试框架有时间检查table的内容 用这个的原因是,浏览器渲染需要时间 #### 反复测试页面 重构一下测试,在10秒内反复测试页面   试了一下,方法可用,现在来改变测试方法 #### 运行新的测试 替换相关语句,具体对比如下  更新后,测试通过 ```bash python manage.py test ......F ``` 这是我们最早设置的提示语句,说明功能测试已经跑到最后了,运行测试成功 ### 预告 今天和页面的渲染时间斗争了一晚上,新功能只能下会再说明了  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0605/20180605211851.png","http://www.iamyann.com/images/0605/20180605204949.png","http://www.iamyann.com/images/0605/20180605205641.png","http://www.iamyann.com/images/0605/20180605205945.png","http://www.iamyann.com/images/0605/20180605210957.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #23057050/Trx 5f89336d56c95fbd19c0f1f249b96e7543e1d20e |
View Raw JSON Data
{
"trx_id": "5f89336d56c95fbd19c0f1f249b96e7543e1d20e",
"block": 23057050,
"trx_in_block": 19,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-06-05T13:22:27",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-37",
"title": "网页渲染时间 - yann学长的运维开发指南37",
"body": "### 大纲\n第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站\n加上域名就可以对外展示的那种\n\n<!--more-->\n\n### 内容介绍\n今天说一下,修改代码以解决测试框架即时操作与网页渲染过慢的矛盾\n\n下面来看今天的内容\n具体内容如下:\n> * 整理模块\n> * 文件目录结构\n> * 添加NewVisitorTest类\n> * 修改访问地址\n> * 运行新的功能测试\n\n### 解决网页渲染时间\n#### 只运行单元测试\n现在运行测试命令,Django会运行功能测试和单元测试\n```bash\npython manage.py test\n\n......F\nRan 7 tests in 6.732s\n```\n如果打算只运行单元测试,就要额外指出\n```bash\npython manage.py test lists\n\nRan 6 tests in 0.009s\n```\n#### 升级Selenium\n原书的作者在这里升级了Selenium和Geckodriver,因为他遇到了问题\n\n但我并没有遇到,也可能是因为我没有使用Geckodriver. 总之贴一下方法.\n\n```bash\npip install --upgrade selenium\n# 下载新的Geckodriver\nhttps://github.com/mozilla/geckodriver/releases\n```\n\n#### 说一下 time.sleep\n在之前的功能测试里,有这样一个语句\n\n\n这个语句的意思是发送完Enter后休眠1秒钟,让测试框架有时间检查table的内容\n\n用这个的原因是,浏览器渲染需要时间\n\n#### 反复测试页面\n重构一下测试,在10秒内反复测试页面\n\n\n试了一下,方法可用,现在来改变测试方法\n\n#### 运行新的测试\n替换相关语句,具体对比如下\n\n更新后,测试通过\n```bash\npython manage.py test\n......F\n```\n\n这是我们最早设置的提示语句,说明功能测试已经跑到最后了,运行测试成功\n\n\n### 预告\n今天和页面的渲染时间斗争了一晚上,新功能只能下会再说明了\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0605/20180605211851.png\",\"http://www.iamyann.com/images/0605/20180605204949.png\",\"http://www.iamyann.com/images/0605/20180605205641.png\",\"http://www.iamyann.com/images/0605/20180605205945.png\",\"http://www.iamyann.com/images/0605/20180605210957.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/31 14:06:54
2018/05/31 14:06:54
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-34 |
| title | 新的一章 - yann学长的运维开发指南34 |
| body | ### 大纲 第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站 加上域名就可以对外展示的那种  <!--more--> ### 内容介绍 根据大纲看来,这一章也是内容复杂的一章,不过请放心,最后会有总结的 下面来看今天的内容: 具体内容如下: > * 整理模块 > * 文件目录结构 > * 添加NewVisitorTest类 > * 修改访问地址 > * 运行新的功能测试 ### 功能测试的隔离 #### 整理模块 上一章最后遗留了一个问题: 多执行几次功能测试后,页面上会留下复数的内容结果,虽然手动解决了,但不是最佳方法 其实,单元测试是会自己建数据库内容,用完自己清除的,但功能测用的是真实库不能这样 不过Django有一个类可以做这个工作 LiveServerTestCase 先整理一下测试模块 ```bash mkdir functional_tests touch functional_tests/__init__.py git mv functional_tests.py functional_tests/tests.py ``` 为功能测试专门建了一个目录 __init__.py是模块必须的 使用git mv移动了功能测试文件 #### 文件目录结构 调整后的文件目录结构如下:  各部分之前章节都有过说明,如果有疑问请留言咨询 #### 添加NewVisitorTest类 经过前几的几章,功能测试文件已经很大了,我们只能展示开头部分 ```bash vi functional_tests/tests.py ```  添加 class NewVisitorTest() #### 修改访问地址 引入新类的同时,也不能使用原有的localhost方式访问了 ```bash vi functional_tests/tests.py ```  双#的注释是我加的,可以看到get地址已经变掉了 #### 运行新的功能测试 使用新的命令来运动功能测试 ```bash python manage.py test functional_tests self.fail('Finish the test!') AssertionError: Finish the test! ``` 这是我们最早设置的提示语句,说明功能测试已经跑到最后了,运行测试成功 ### 预告 新的一章开始了,希望大家和我一同加油!  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0531/20180531202651.png","http://www.iamyann.com/images/0531/20180531204147.png","http://www.iamyann.com/images/0531/20180531204858.png","http://www.iamyann.com/images/0531/20180531205513.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22914001/Trx a289f0724b401069cf81716d7e7cbb90e0092c16 |
View Raw JSON Data
{
"trx_id": "a289f0724b401069cf81716d7e7cbb90e0092c16",
"block": 22914001,
"trx_in_block": 74,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-31T14:06:54",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-34",
"title": "新的一章 - yann学长的运维开发指南34",
"body": "### 大纲\n第6章的内容还是比较激动的,在这个章节里会完成一个可用的网站\n加上域名就可以对外展示的那种\n\n<!--more-->\n\n### 内容介绍\n\n根据大纲看来,这一章也是内容复杂的一章,不过请放心,最后会有总结的\n\n下面来看今天的内容:\n具体内容如下:\n> * 整理模块\n> * 文件目录结构\n> * 添加NewVisitorTest类\n> * 修改访问地址\n> * 运行新的功能测试\n\n### 功能测试的隔离\n#### 整理模块\n上一章最后遗留了一个问题:\n\n多执行几次功能测试后,页面上会留下复数的内容结果,虽然手动解决了,但不是最佳方法\n\n其实,单元测试是会自己建数据库内容,用完自己清除的,但功能测用的是真实库不能这样\n\n不过Django有一个类可以做这个工作 LiveServerTestCase\n\n先整理一下测试模块\n```bash\nmkdir functional_tests\ntouch functional_tests/__init__.py\n\ngit mv functional_tests.py functional_tests/tests.py\n```\n为功能测试专门建了一个目录\n__init__.py是模块必须的\n使用git mv移动了功能测试文件\n\n#### 文件目录结构\n调整后的文件目录结构如下:\n\n\n\n各部分之前章节都有过说明,如果有疑问请留言咨询\n\n#### 添加NewVisitorTest类\n经过前几的几章,功能测试文件已经很大了,我们只能展示开头部分\n\n```bash\nvi functional_tests/tests.py\n```\n\n添加 class NewVisitorTest()\n\n#### 修改访问地址\n引入新类的同时,也不能使用原有的localhost方式访问了\n```bash\nvi functional_tests/tests.py\n```\n\n双#的注释是我加的,可以看到get地址已经变掉了\n\n#### 运行新的功能测试\n使用新的命令来运动功能测试\n```bash\npython manage.py test functional_tests\n\nself.fail('Finish the test!')\nAssertionError: Finish the test!\n```\n\n这是我们最早设置的提示语句,说明功能测试已经跑到最后了,运行测试成功\n\n\n### 预告\n新的一章开始了,希望大家和我一同加油!\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0531/20180531202651.png\",\"http://www.iamyann.com/images/0531/20180531204147.png\",\"http://www.iamyann.com/images/0531/20180531204858.png\",\"http://www.iamyann.com/images/0531/20180531205513.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/29 06:40:33
2018/05/29 06:40:33
| voter | chenlocus |
| author | tmp4321 |
| permlink | 5-yann-33 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22847479/Trx 4a846c9687ccb27464c15c7babceb5a96fe9cdc7 |
View Raw JSON Data
{
"trx_id": "4a846c9687ccb27464c15c7babceb5a96fe9cdc7",
"block": 22847479,
"trx_in_block": 28,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-29T06:40:33",
"op": [
"vote",
{
"voter": "chenlocus",
"author": "tmp4321",
"permlink": "5-yann-33",
"weight": 10000
}
]
}2018/05/29 06:19:48
2018/05/29 06:19:48
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | 5-yann-33 |
| title | 内容总结5 - yann学长的运维开发指南33 |
| body | ### 大纲 第五次内容终结的大纲 本次的主要内容是把用户输入的内容保存到数据库中  <!--more--> ### 分集介绍 以下为前面数期的分集介绍,提供超链接指向,方便查看. 具体内容如下: > * 编写表单,发送POST请求 > * 在服务器中处理POST请求 > * 把Python变量传入模板中渲染 > * ORM及数据库模型 > * 把POST请求中的数据存入数据库 > * 处理完POST请求后重定向 > * 在模板中渲染待办事项 > * 使用迁移创建生产数据库 ### 分集大纲 #### 编写表单,发送POST请求  #### 在服务器中处理POST请求  #### 把Python变量传入模板中渲染  #### ORM及数据库模型  #### 把POST请求中的数据存入数据库  #### 处理完POST请求后重定向  #### 在模板中渲染待办事项  #### 使用迁移创建生产数据库  ### 预告 对前面的8篇文章做了一个汇总, 本来是应该周末做的,但是远程不太方便又摸鱼了 好吧,只是一个借口,周末光顾着听歌了,没去弄,顺便推荐一下我用的sonos极好用  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0529/20180529134917.png","http://www.iamyann.com/images/0529/20180529140043.png","http://www.iamyann.com/images/0529/20180529140119.png","http://www.iamyann.com/images/0529/20180529140145.png","http://www.iamyann.com/images/0529/20180529140212.png","http://www.iamyann.com/images/0529/20180529140241.png","http://www.iamyann.com/images/0529/20180529140306.png","http://www.iamyann.com/images/0529/20180529140328.png","http://www.iamyann.com/images/0529/20180529140348.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22847064/Trx 109f29981efb9a8d9416cc09f880e2495d81e831 |
View Raw JSON Data
{
"trx_id": "109f29981efb9a8d9416cc09f880e2495d81e831",
"block": 22847064,
"trx_in_block": 24,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-29T06:19:48",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "5-yann-33",
"title": "内容总结5 - yann学长的运维开发指南33",
"body": "### 大纲\n第五次内容终结的大纲\n本次的主要内容是把用户输入的内容保存到数据库中\n\n<!--more-->\n\n### 分集介绍\n\n以下为前面数期的分集介绍,提供超链接指向,方便查看.\n\n具体内容如下:\n> * 编写表单,发送POST请求\n> * 在服务器中处理POST请求\n> * 把Python变量传入模板中渲染\n> * ORM及数据库模型\n> * 把POST请求中的数据存入数据库\n> * 处理完POST请求后重定向\n> * 在模板中渲染待办事项\n> * 使用迁移创建生产数据库\n\n\n\n\n### 分集大纲\n#### 编写表单,发送POST请求\n\n\n#### 在服务器中处理POST请求\n\n\n#### 把Python变量传入模板中渲染\n\n\n#### ORM及数据库模型\n\n\n#### 把POST请求中的数据存入数据库\n\n\n#### 处理完POST请求后重定向\n\n\n#### 在模板中渲染待办事项\n\n\n#### 使用迁移创建生产数据库\n\n\n### 预告\n对前面的8篇文章做了一个汇总, 本来是应该周末做的,但是远程不太方便又摸鱼了\n\n好吧,只是一个借口,周末光顾着听歌了,没去弄,顺便推荐一下我用的sonos极好用\n\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0529/20180529134917.png\",\"http://www.iamyann.com/images/0529/20180529140043.png\",\"http://www.iamyann.com/images/0529/20180529140119.png\",\"http://www.iamyann.com/images/0529/20180529140145.png\",\"http://www.iamyann.com/images/0529/20180529140212.png\",\"http://www.iamyann.com/images/0529/20180529140241.png\",\"http://www.iamyann.com/images/0529/20180529140306.png\",\"http://www.iamyann.com/images/0529/20180529140328.png\",\"http://www.iamyann.com/images/0529/20180529140348.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/24 13:48:18
2018/05/24 13:48:18
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-33 |
| title | 迁移数据库 - yann学长的运维开发指南33 |
| body | --- title: 迁移数据库 - yann学长的运维开发指南33 tags: - python categories: - 运维开发 keywords: 'python,tdd,web开发' description: 操作数据库 date: 2018-05-24 21:21:09 --- ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 上节说到修改模板以显示多条记录,但并没有说完,现在补充余下的部分. 今天的具体内容如下: > * 代办事项传入模板 > * 看不懂错误时换个方式 > * 数据库位置 > * 数据库迁移 > * 修改模板中的序号表示 > * 一点点小问题 #### 代办事项传入模板 修改视图文件,传值到模板 ```bash vi lists/views.py ```  再次运行测试 ```bash python functional_tests.py AssertionError: 'To-Do' not found in 'OperationalError at /' ``` #### 看不懂错误时换个方式 在浏览器下打开页面 http://localhost:8000 ```bash no such table: lists_item ``` 渲染完毕的浏览器报出了故障的原因: 找不到lists_item表 需要做数据库迁移了 #### 数据库位置 数据库迁移只是一个说法,其实是用之前写好的建表文件在固定的地方来建立数据库 建库的位置是写在配置文件里的,默认在项目的基础目录 ```bash vi superlists/settings.py ```  #### 数据库迁移 在项目的基础目录运行数据库迁移命令,其实大多数命令都是在这个目录下运行的 ```bash python manage.py migrate ``` 刷新刚才打开的浏览器 ```bash AssertionError: '2: Use peacock feathers to make a fly' not found in ['1: Buy peacock feathers', '1: Use peacock feathers to make a fly'] ``` 序号还是不对 #### 修改模板中的序号表示 forloop.counter标签 ```bash vi lists/templates/home.html ```  再次运行,测试成功 #### 一点点小问题 再次确认测试成功.结果发现每测一次,页面会多两条相同的数据 对于这个问题,目前先手动处理下 ```bash rm db.sqlite3 python manage.py migrate --noinput ``` ### 预告 漫长的第五章终于完成了,周末我打算做一个大纲并附上链接,希望自己不要摸鱼^^  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0524/20180524214623.png","http://www.iamyann.com/images/0524/20180524212629.png","http://www.iamyann.com/images/0524/20180524213414.png","http://www.iamyann.com/images/0524/20180524214002.png","http://hero.iamyann.com/blog_webchat.jpg"],"links":["http://localhost:8000"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22712060/Trx db8f039f1bdd22ee01348c5f0c06f6ccb20cbf77 |
View Raw JSON Data
{
"trx_id": "db8f039f1bdd22ee01348c5f0c06f6ccb20cbf77",
"block": 22712060,
"trx_in_block": 17,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-24T13:48:18",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-33",
"title": "迁移数据库 - yann学长的运维开发指南33",
"body": "---\ntitle: 迁移数据库 - yann学长的运维开发指南33\ntags:\n - python\ncategories:\n - 运维开发\nkeywords: 'python,tdd,web开发'\ndescription: 操作数据库\ndate: 2018-05-24 21:21:09\n---\n\n\n### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n上节说到修改模板以显示多条记录,但并没有说完,现在补充余下的部分.\n\n今天的具体内容如下:\n> * 代办事项传入模板\n> * 看不懂错误时换个方式\n> * 数据库位置\n> * 数据库迁移\n> * 修改模板中的序号表示\n> * 一点点小问题\n\n\n\n\n#### 代办事项传入模板\n修改视图文件,传值到模板\n```bash\nvi lists/views.py\n```\n\n\n再次运行测试\n```bash\npython functional_tests.py\n\nAssertionError: 'To-Do' not found in 'OperationalError at /'\n```\n#### 看不懂错误时换个方式\n在浏览器下打开页面 http://localhost:8000\n\n\n```bash\nno such table: lists_item\n```\n渲染完毕的浏览器报出了故障的原因:\n找不到lists_item表\n需要做数据库迁移了\n\n#### 数据库位置\n数据库迁移只是一个说法,其实是用之前写好的建表文件在固定的地方来建立数据库\n\n建库的位置是写在配置文件里的,默认在项目的基础目录\n```bash\nvi superlists/settings.py\n```\n\n\n\n\n#### 数据库迁移\n在项目的基础目录运行数据库迁移命令,其实大多数命令都是在这个目录下运行的\n```bash\npython manage.py migrate\n```\n刷新刚才打开的浏览器\n```bash\nAssertionError: '2: Use peacock feathers to make a fly' not found in ['1: Buy\npeacock feathers', '1: Use peacock feathers to make a fly']\n```\n序号还是不对\n\n#### 修改模板中的序号表示\nforloop.counter标签\n```bash\nvi lists/templates/home.html\n```\n\n\n再次运行,测试成功\n\n#### 一点点小问题\n再次确认测试成功.结果发现每测一次,页面会多两条相同的数据\n\n对于这个问题,目前先手动处理下\n```bash\nrm db.sqlite3\npython manage.py migrate --noinput\n```\n\n\n### 预告\n漫长的第五章终于完成了,周末我打算做一个大纲并附上链接,希望自己不要摸鱼^^\n\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0524/20180524214623.png\",\"http://www.iamyann.com/images/0524/20180524212629.png\",\"http://www.iamyann.com/images/0524/20180524213414.png\",\"http://www.iamyann.com/images/0524/20180524214002.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"links\":[\"http://localhost:8000\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321published a new post: post-yann-322018/05/22 10:22:36
tmp4321published a new post: post-yann-32
2018/05/22 10:22:36
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | post-yann-32 |
| title | 处理完POST请求后跳转 - yann学长的运维开发指南32 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 上节介绍了如何测试数据库里数据的条数及如何识别空的提交内容. 提示一下,目前的环境里每次测试是现插数据到数据库的,用完就清理掉了,请注意 今天的具体内容如下: > * POST请求后需要重定向 > * 清理视图函数 > * 分割测试内容 > * 在模板中渲染多条记录 > * 模板遍历列表 #### POST请求后需要重定向 处理完POST请求后是需要重定向的,先试一下重定向到首页,修改测试文件 ```bash vi lists/tests.py ```  测试断言状态码302和路径'/' #### 清理视图函数 运行测试报错,200 != 302 目标达到,调整视图 ```bash lists/views.py ```  新增了重定向部分,测试通过 #### 分割测试内容 习惯上,一段测试代码只测一个内容,这样可以避免前面断言的失败影响后面的测试 修改下现有的测试 ```bash vi lists/tests.py ```  #### 在模板中渲染多条记录 这个是之前的需求之一,不能总显示一条记录 继续新建测试 ```bash lists/tests.py ```  内容很简单,插入两条记录,期望显示2条 #### 模板遍历列表 意料之内的失败 ```bash AssertionError: 'itemey 1' not found in '<html>\n <head>\n [...]' ``` 更新home模板 ```bash lists/templates/home.html ```  只更新模板,还不足以让测试通过,所以这里只是熟悉一下 %for in%的语法 下一节会解决剩下的问题,同时迁移创建数据库 ### 预告 写了30篇小短文后,回头看看自己的公众号,感觉不是很连续 后续要整理下,每完成一个大的章节,就做一个大纲并附上链接,方便读者阅读  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0522/20180522181936.png","http://www.iamyann.com/images/0522/20180522171835.png","http://www.iamyann.com/images/0522/20180522172233.png","http://www.iamyann.com/images/0522/20180522173040.png","http://www.iamyann.com/images/0517/20180522173742.png","http://www.iamyann.com/images/0522/20180522181431.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22650726/Trx 8d1d927d4e35a1fb8066077b1b2b5e268b723b94 |
View Raw JSON Data
{
"trx_id": "8d1d927d4e35a1fb8066077b1b2b5e268b723b94",
"block": 22650726,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-22T10:22:36",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "post-yann-32",
"title": "处理完POST请求后跳转 - yann学长的运维开发指南32",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n上节介绍了如何测试数据库里数据的条数及如何识别空的提交内容.\n提示一下,目前的环境里每次测试是现插数据到数据库的,用完就清理掉了,请注意\n\n今天的具体内容如下:\n> * POST请求后需要重定向\n> * 清理视图函数\n> * 分割测试内容\n> * 在模板中渲染多条记录\n> * 模板遍历列表\n\n\n\n#### POST请求后需要重定向\n处理完POST请求后是需要重定向的,先试一下重定向到首页,修改测试文件\n```bash\nvi lists/tests.py\n```\n\n\n测试断言状态码302和路径'/'\n\n#### 清理视图函数\n运行测试报错,200 != 302\n\n目标达到,调整视图\n\n```bash\nlists/views.py\n```\n\n\n新增了重定向部分,测试通过\n\n#### 分割测试内容\n习惯上,一段测试代码只测一个内容,这样可以避免前面断言的失败影响后面的测试\n修改下现有的测试\n\n```bash\nvi lists/tests.py\n```\n\n\n\n#### 在模板中渲染多条记录\n这个是之前的需求之一,不能总显示一条记录\n继续新建测试\n```bash\nlists/tests.py\n```\n\n内容很简单,插入两条记录,期望显示2条\n\n#### 模板遍历列表\n意料之内的失败\n```bash\nAssertionError: 'itemey 1' not found in '<html>\\n <head>\\n [...]'\n```\n\n更新home模板\n\n```bash\nlists/templates/home.html\n```\n\n\n只更新模板,还不足以让测试通过,所以这里只是熟悉一下 %for in%的语法\n\n下一节会解决剩下的问题,同时迁移创建数据库\n\n\n### 预告\n写了30篇小短文后,回头看看自己的公众号,感觉不是很连续\n后续要整理下,每完成一个大的章节,就做一个大纲并附上链接,方便读者阅读\n\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0522/20180522181936.png\",\"http://www.iamyann.com/images/0522/20180522171835.png\",\"http://www.iamyann.com/images/0522/20180522172233.png\",\"http://www.iamyann.com/images/0522/20180522173040.png\",\"http://www.iamyann.com/images/0517/20180522173742.png\",\"http://www.iamyann.com/images/0522/20180522181431.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/19 10:26:57
2018/05/19 10:26:57
| delegator | steem |
| delegatee | tmp4321 |
| vesting shares | 29496.448096 VESTS |
| Transaction Info | Block #22564428/Trx f97d5ae88296840a417b7a70d0bc360d6e5d34b7 |
View Raw JSON Data
{
"trx_id": "f97d5ae88296840a417b7a70d0bc360d6e5d34b7",
"block": 22564428,
"trx_in_block": 63,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-19T10:26:57",
"op": [
"delegate_vesting_shares",
{
"delegator": "steem",
"delegatee": "tmp4321",
"vesting_shares": "29496.448096 VESTS"
}
]
}tmp4321published a new post: post-yann-312018/05/17 14:08:15
tmp4321published a new post: post-yann-31
2018/05/17 14:08:15
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | post-yann-31 |
| title | POST请求参数存入数据库 - yann学长的运维开发指南31 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 在上节的内容中,填写的内容是无法保持的,所以本节会介绍ORM,使用其比直接操作数据库方便一点. 今天的具体内容如下: > * 把POST请求的参数存入数据库 > * 提交到数据库 > * 修改函数返回值 > * 不保存空内容的测试 > * 更新视图 #### 把POST请求的参数存入数据库 更新上周的测试模块,添加三条语句 ```bash vi lists/tests.py ```  objects.count()是objects.all().count()的简写 对比数据库记录总笔数是不是等于1条 objects.first()第一条记录的对象 再对比对象的text内容是否等于给定值 测试文件也比较长了,回头需要重写一下 #### 提交到数据库 运行测试报错,数据库笔数为0 ```bash self.assertEqual(Item.objects.count(), 1) AssertionError: 0 != 1 ``` 调整视图 ```bash lists/views.py ```  写了个不是很完善的home_page函数,通过了测试, 回头需要更新一下 #### 修改函数返回值 通过了单元测试,把返回修改下 ```python vi lists/views.py return render(request, 'home.html', { 'new_item_text': item.text }) ``` 不用获取了,直接使用对象 #### 不保存空内容的测试 下面开如新的测试,这次的测试起源于一个需求:无内容的提交不要保存 再建一个测试方法 ```bash lists/tests.py ```  检测没有提交时,数据库笔数是否为0 #### 更新视图 测试报错 1 != 0 failure ```bash vi lists/views.py ```  调整视图文件,测试通过 建了一个新变量,其值是POST请求数据或空字符串 .objects.create是创建新Item对象的简化方式,不需要调用保存方法 ### 预告 写了30篇小短文后,回头看看自己的公众号,感觉不是很连续 后续要整理下,每完成一个大的章节,就做一个大纲并附上链接,方便读者阅读  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0517/20180517220201.png","http://www.iamyann.com/images/0517/20180517210947.png","http://www.iamyann.com/images/0517/20180517212032.png","http://www.iamyann.com/images/0517/20180517213236.png","http://www.iamyann.com/images/0517/20180517214943.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22511262/Trx 73b5b72c6caa85dee110586175ac457c9d57062b |
View Raw JSON Data
{
"trx_id": "73b5b72c6caa85dee110586175ac457c9d57062b",
"block": 22511262,
"trx_in_block": 83,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-17T14:08:15",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "post-yann-31",
"title": "POST请求参数存入数据库 - yann学长的运维开发指南31",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n在上节的内容中,填写的内容是无法保持的,所以本节会介绍ORM,使用其比直接操作数据库方便一点.\n\n今天的具体内容如下:\n> * 把POST请求的参数存入数据库\n> * 提交到数据库\n> * 修改函数返回值\n> * 不保存空内容的测试\n> * 更新视图\n\n\n\n#### 把POST请求的参数存入数据库\n更新上周的测试模块,添加三条语句\n```bash\nvi lists/tests.py\n```\n\n\nobjects.count()是objects.all().count()的简写\n对比数据库记录总笔数是不是等于1条\n\nobjects.first()第一条记录的对象\n再对比对象的text内容是否等于给定值\n\n测试文件也比较长了,回头需要重写一下\n\n#### 提交到数据库\n运行测试报错,数据库笔数为0\n```bash\nself.assertEqual(Item.objects.count(), 1)\nAssertionError: 0 != 1\n```\n调整视图\n\n```bash\nlists/views.py\n```\n\n\n写了个不是很完善的home_page函数,通过了测试, 回头需要更新一下\n\n#### 修改函数返回值\n通过了单元测试,把返回修改下\n```python\nvi lists/views.py\n return render(request, 'home.html', {\n 'new_item_text': item.text\n })\n```\n不用获取了,直接使用对象\n\n#### 不保存空内容的测试\n下面开如新的测试,这次的测试起源于一个需求:无内容的提交不要保存\n\n再建一个测试方法\n\n```bash\nlists/tests.py\n```\n\n检测没有提交时,数据库笔数是否为0\n\n#### 更新视图\n测试报错 1 != 0 failure\n\n```bash\nvi lists/views.py\n```\n\n调整视图文件,测试通过\n\n建了一个新变量,其值是POST请求数据或空字符串\n\n.objects.create是创建新Item对象的简化方式,不需要调用保存方法\n\n\n\n### 预告\n写了30篇小短文后,回头看看自己的公众号,感觉不是很连续 \n后续要整理下,每完成一个大的章节,就做一个大纲并附上链接,方便读者阅读\n\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0517/20180517220201.png\",\"http://www.iamyann.com/images/0517/20180517210947.png\",\"http://www.iamyann.com/images/0517/20180517212032.png\",\"http://www.iamyann.com/images/0517/20180517213236.png\",\"http://www.iamyann.com/images/0517/20180517214943.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321published a new post: orm-yann-302018/05/15 15:33:45
tmp4321published a new post: orm-yann-30
2018/05/15 15:33:45
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | orm-yann-30 |
| title | ORM及数据库模型 - yann学长的运维开发指南30 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 在上节的内容中,填写的内容是无法保持的,所以本节会介绍ORM,使用其比直接操作数据库方便一点. 今天的具体内容如下: > * 给ORM的测试 > * 定义Item > * 继承save属性 > * 构造lists_item表 > * 定义text属性 > * 生成数据库字段 > * 定义默认值 #### 给ORM的测试 先写一个测试类,给ORM用 ```bash vi lists/tests.py ```  内容为保存两个item到数据库,再查询数据库中的所有,看是不是有两个 最后调出两个数据看和测试期望值是否匹配 #### 定义Item 运行测试,报无法导入Item模块 ```bash ImportError: cannot import name 'Item' ``` 去models.py里建立Item类 ```Python vi lists/models.py from django.db import models class Item(object): pass ``` #### 继承save属性 再测试发现没有save属性 ```bash first_item.save() AttributeError: 'Item' object has no attribute 'save' ``` 去models.py里建立Item类 ```python vi lists/models.py from django.db import models class Item(models.Model): pass ``` 从Model类继承相关属性 #### 构造lists_item表 再次测试,报没有表 lists_item ```bash django.db.utils.OperationalError: no such table: lists_item ``` 开始建造结构 ```bash python manage.py makemigrations # 查看生成的文件 ls lists/migrations 0001_initial.py __init__.py __pycache__ ``` #### 定义text属性 再次测试,报没有text属性 ```bash AttributeError: 'Item' object has no attribute 'text' ``` 于是写入text的定义 ```python vi lists/models.py class Item(models.Model): text = models.TextField() ``` #### 生成数据库字段 再次测试,报没有lists_item.text行 ```bash django.db.utils.OperationalError: no such column: lists_item.text ``` 这是因为之前都是对数据库的设计,其实还没有定入数据库 ```bash python manage.py makemigrations ``` 这时运行数据库,会有提示没有默认值,这时选择2退出去字段的默认值 #### 定义默认值 ```python vi lists/models.py class Item(models.Model): text = models.TextField(default='') ``` 再次迁移并运行测试,测试成功 ```bash python manage.py makemigrations python manage.py test lists ``` ### 预告 今天的内容,繁杂且乱,基于正式的开发,是不用这个样子操作的,但对于学习,这样的流程是很好的 通过一步步说明了,操作ORM的需求,每个语句为什么要写 基于长度考虑,我会尽量减少代码的演示,控制表达. 力求说明白,简短表达. 现在还在过渡期,请大家逐渐习惯一下,因为我自己也觉得,手机上看自己写的东西没那么舒服.所以开始改变.  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0515/20180515174205.png","http://www.iamyann.com/images/0515/20180515174605.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22455383/Trx 38820cd4cbd200e6803bc462dfa23f8084197710 |
View Raw JSON Data
{
"trx_id": "38820cd4cbd200e6803bc462dfa23f8084197710",
"block": 22455383,
"trx_in_block": 55,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-15T15:33:45",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "orm-yann-30",
"title": "ORM及数据库模型 - yann学长的运维开发指南30",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n在上节的内容中,填写的内容是无法保持的,所以本节会介绍ORM,使用其比直接操作数据库方便一点.\n\n今天的具体内容如下:\n> * 给ORM的测试\n> * 定义Item\n> * 继承save属性\n> * 构造lists_item表\n> * 定义text属性\n> * 生成数据库字段\n> * 定义默认值\n\n\n\n#### 给ORM的测试\n先写一个测试类,给ORM用\n```bash\nvi lists/tests.py\n```\n\n\n内容为保存两个item到数据库,再查询数据库中的所有,看是不是有两个\n最后调出两个数据看和测试期望值是否匹配\n\n#### 定义Item\n运行测试,报无法导入Item模块\n```bash\nImportError: cannot import name 'Item'\n```\n去models.py里建立Item类\n\n```Python\nvi lists/models.py\n\nfrom django.db import models\n\nclass Item(object):\n pass\n```\n\n#### 继承save属性\n再测试发现没有save属性\n```bash\nfirst_item.save()\nAttributeError: 'Item' object has no attribute 'save'\n```\n去models.py里建立Item类\n\n```python\nvi lists/models.py\n\nfrom django.db import models\n\nclass Item(models.Model):\n pass\n```\n从Model类继承相关属性\n\n#### 构造lists_item表\n再次测试,报没有表 lists_item\n\n```bash\ndjango.db.utils.OperationalError: no such table: lists_item\n```\n开始建造结构\n```bash\npython manage.py makemigrations\n# 查看生成的文件\nls lists/migrations\n0001_initial.py __init__.py __pycache__\n```\n\n#### 定义text属性\n再次测试,报没有text属性\n\n```bash\nAttributeError: 'Item' object has no attribute 'text'\n```\n于是写入text的定义\n\n```python\nvi lists/models.py\n\nclass Item(models.Model):\n text = models.TextField()\n```\n\n#### 生成数据库字段\n再次测试,报没有lists_item.text行\n\n```bash\ndjango.db.utils.OperationalError: no such column: lists_item.text\n```\n这是因为之前都是对数据库的设计,其实还没有定入数据库\n\n```bash\npython manage.py makemigrations\n```\n这时运行数据库,会有提示没有默认值,这时选择2退出去字段的默认值\n\n#### 定义默认值\n```python\nvi lists/models.py\n\nclass Item(models.Model):\n text = models.TextField(default='')\n```\n再次迁移并运行测试,测试成功\n\n```bash\npython manage.py makemigrations\npython manage.py test lists\n```\n\n### 预告\n今天的内容,繁杂且乱,基于正式的开发,是不用这个样子操作的,但对于学习,这样的流程是很好的\n\n通过一步步说明了,操作ORM的需求,每个语句为什么要写\n\n基于长度考虑,我会尽量减少代码的演示,控制表达. 力求说明白,简短表达.\n\n现在还在过渡期,请大家逐渐习惯一下,因为我自己也觉得,手机上看自己写的东西没那么舒服.所以开始改变.\n\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0515/20180515174205.png\",\"http://www.iamyann.com/images/0515/20180515174605.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/10 16:27:33
2018/05/10 16:27:33
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-29 |
| title | 关于表单提交的功能测试 - yann学长的运维开发指南29 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 今天的内容是服务端处理POST请求及模板渲染. 今天的具体内容如下: > * 再次发起功能测试 > * 构造新的功能测试 ### 再次发起功能测试 上节通过各种修改,我们POST的字符串,传到了模板上,并通过了相关的单元测试. 这次我们要对其再进行功能测试 ```bash python functional_tests.py ``` 结果测试失败,表格上并没有字符串 ```bash AssertionError: False is not true : New to-do item did not appear in table ``` 为了让报错再明显一点,我们修改了functional_tests.py 测试文件 [点击查看 functional_tests.py](https://github.com/lluxury/python-tdd-book/commit/4985c90533b73befa4d40d2832ebd2dd2ceb0773) 以显示特定文字及table.text的变量 其中这个f是python3.6才有的用法, 格式化的字符串常量,后面会找个机会说明一下 ```bash python functional_tests.py ``` 再次测试,打印出的变量和测试设置的变量不同 ```bash AssertionError: False is not true : New to-do item did not appear in table. Contents were: Buy peacock feathers ``` 修改lists/templates/home.html 模板文件解决,修改之后测试通过 [点击查看 lists/templates/home.html](https://github.com/lluxury/python-tdd-book/commit/e0b3a4a5c0092c3a026dce025a010f48308a1cf9) ### 构造新的功能测试 因为之前的功能测试, 我们是修改了测试文件才通过的,所以很怀疑其功能性 把'1:'排在外面通过了,那再新添加一个项目,'1:'变成'2:'的时候,能通过么 说干就干,下面构建新的测试 [点击查看 functional_tests.py](https://github.com/lluxury/python-tdd-book/commit/e0b3a4a5c0092c3a026dce025a010f48308a1cf9) 果然失败了 ```bash AssertionError: '1: Buy peacock feathers' not found in ['1: Use peacock feathers to make a fly'] ``` 期待的'2:'项目没有出来,还是会去找第'1:'项 其实我们感觉到缺什么东西, 但现在条件还不具备,只能用妥协的办法实现需求 比如说,再改一次测试 [点击查看 functional_tests.py](https://github.com/lluxury/python-tdd-book/commit/39ad0257329bf51ce15807acdb765e7174827811) 手工写了第二条项目,测试又通过了,但我们都觉得,这样可不行. 先暂停一下,提交并上传代码, 下一节会介绍一个超好用的工具,解决目前的问题. 本节因为时间的问题, 先再见 ### 预告 首先设置了折线的长度,但是不知道适合手机的阅读在电脑上是效果. 但是我会尽量融合两种阅读习惯, 在手机上的碎片化阅读思路分享, 以及在电脑上的代码回顾. 基于长度考虑,我会尽量减少代码的演示,控制表达. 力求说明白,简短表达. 现在还在过渡期,请大家逐渐习惯一下,因为我自己也觉得,手机上看自己写的东西没那么舒服.所以开始改变.  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/20180508163521.png","http://hero.iamyann.com/blog_webchat.jpg"],"links":["https://github.com/lluxury/python-tdd-book/commit/4985c90533b73befa4d40d2832ebd2dd2ceb0773","https://github.com/lluxury/python-tdd-book/commit/e0b3a4a5c0092c3a026dce025a010f48308a1cf9","https://github.com/lluxury/python-tdd-book/commit/39ad0257329bf51ce15807acdb765e7174827811"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22312466/Trx e7563a9d1355e010e24268a58a0b6662cd7b233c |
View Raw JSON Data
{
"trx_id": "e7563a9d1355e010e24268a58a0b6662cd7b233c",
"block": 22312466,
"trx_in_block": 37,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-10T16:27:33",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-29",
"title": "关于表单提交的功能测试 - yann学长的运维开发指南29",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n今天的内容是服务端处理POST请求及模板渲染.\n\n今天的具体内容如下:\n> * 再次发起功能测试\n> * 构造新的功能测试\n\n\n### 再次发起功能测试\n上节通过各种修改,我们POST的字符串,传到了模板上,并通过了相关的单元测试.\n\n这次我们要对其再进行功能测试\n\n```bash\npython functional_tests.py\n```\n结果测试失败,表格上并没有字符串\n```bash\nAssertionError: False is not true : New to-do item did not appear in table\n```\n\n为了让报错再明显一点,我们修改了functional_tests.py 测试文件\n\n[点击查看 functional_tests.py](https://github.com/lluxury/python-tdd-book/commit/4985c90533b73befa4d40d2832ebd2dd2ceb0773)\n\n以显示特定文字及table.text的变量\n\n其中这个f是python3.6才有的用法, 格式化的字符串常量,后面会找个机会说明一下\n\n```bash\npython functional_tests.py\n```\n再次测试,打印出的变量和测试设置的变量不同\n\n```bash\nAssertionError: False is not true : New to-do item did not appear in table.\nContents were:\nBuy peacock feathers\n```\n\n修改lists/templates/home.html 模板文件解决,修改之后测试通过\n\n[点击查看 lists/templates/home.html](https://github.com/lluxury/python-tdd-book/commit/e0b3a4a5c0092c3a026dce025a010f48308a1cf9)\n\n### 构造新的功能测试\n因为之前的功能测试, 我们是修改了测试文件才通过的,所以很怀疑其功能性\n\n把'1:'排在外面通过了,那再新添加一个项目,'1:'变成'2:'的时候,能通过么\n\n说干就干,下面构建新的测试\n[点击查看 functional_tests.py](https://github.com/lluxury/python-tdd-book/commit/e0b3a4a5c0092c3a026dce025a010f48308a1cf9)\n\n果然失败了\n\n```bash\nAssertionError: '1: Buy peacock feathers' not found in ['1: Use peacock\nfeathers to make a fly']\n```\n\n期待的'2:'项目没有出来,还是会去找第'1:'项\n\n其实我们感觉到缺什么东西, 但现在条件还不具备,只能用妥协的办法实现需求\n\n比如说,再改一次测试\n[点击查看 functional_tests.py](https://github.com/lluxury/python-tdd-book/commit/39ad0257329bf51ce15807acdb765e7174827811)\n\n手工写了第二条项目,测试又通过了,但我们都觉得,这样可不行.\n\n先暂停一下,提交并上传代码, 下一节会介绍一个超好用的工具,解决目前的问题. 本节因为时间的问题, 先再见 \n\n\n\n### 预告\n首先设置了折线的长度,但是不知道适合手机的阅读在电脑上是效果.\n\n但是我会尽量融合两种阅读习惯, 在手机上的碎片化阅读思路分享, 以及在电脑上的代码回顾.\n\n基于长度考虑,我会尽量减少代码的演示,控制表达. 力求说明白,简短表达.\n\n现在还在过渡期,请大家逐渐习惯一下,因为我自己也觉得,手机上看自己写的东西没那么舒服.所以开始改变.\n\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/20180508163521.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"links\":[\"https://github.com/lluxury/python-tdd-book/commit/4985c90533b73befa4d40d2832ebd2dd2ceb0773\",\"https://github.com/lluxury/python-tdd-book/commit/e0b3a4a5c0092c3a026dce025a010f48308a1cf9\",\"https://github.com/lluxury/python-tdd-book/commit/39ad0257329bf51ce15807acdb765e7174827811\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/08 08:42:27
2018/05/08 08:42:27
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-28 |
| title | 服务端处理表单提交 - yann学长的运维开发指南28 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 今天的内容是服务端处理POST请求及模板渲染. 今天的具体内容如下: > * 服务端处理提交的请求 > * 构造正确的结果 > * 把变量传入模板渲染 > * 测试使用模板 > * 更新视图模块 ### 服务端处理提交的请求 复习一下之前的知识, form表单提交之后,会有一个action属性 如果没有指定属性的话,提交后会返回之前的页面,这样往往是有问题的 解决这个问题之前,先把测试文件写出来 ```bash vi lists/tests.py ``` ```python def test_uses_home_template(self): response = self.client.get('/') self.assertTemplateUsed(response, 'home.html') def test_can_save_a_POST_request(self): response = self.client.post('/', data={'item_text': 'A new list item'}) self.assertIn('A new list item', response.content.decode()) ``` 在HomePageTest类新加一个方法,检查POST后返回的是否html文件中是否有目标字段 ```bash python manage.py test AssertionError: 'A new list item' not found in '<html>\n <head>\n' ``` 提示没有找到提交的字段,显示的内容是首页的, 首页只有To-Do字样,测试看起来是正确的 ### 构造正确的结果 暂时修改下视图模块,给一个期待的反馈 ```bash vi lists/views.py ``` ```python from django.http import HttpResponse from django.shortcuts import render def home_page(request): if request.method == 'POST': return HttpResponse(request.POST['item_text']) return render(request, 'home.html') ``` 如果遇到POST的方法,直接把提交的字符串返回回去 这样测试是通过了,但也就没有测试应有的用途了 ### 把变量传入模板渲染 ```bash lists/templates/home.html ``` ```html <body> <h1>Your To-Do list</h1> <form method="POST"> <input name="item_text" id="id_new_item" placeholder="Enter a to-do item" /> {% csrf_token %} </form> <table id="id_list_table"> <tr><td>{{ new_item_text }}</td></tr> </table> </body> ``` 在模板上写一个表格,来放传过来的字符串 ### 测试使用模板 ```bash lists/tests.py ``` ```python def test_can_save_a_POST_request(self): response = self.client.post('/', data={'item_text': 'A new list item'}) self.assertIn('A new list item', response.content.decode()) self.assertTemplateUsed(response, 'home.html') ``` 增加模板测试内容,然后测试 ```bash python manage.py test AssertionError: No templates used to render the response ``` 因为视图函数没有使用模板,所以测试失败,这样就排除了之前"作弊"的内容 ### 更新视图模块 ```bash lists/views.py ``` ```python def home_page(request): return render(request, 'home.html', { 'new_item_text': request.POST['item_text'], }) ``` 更新试图内容,然后测试 ```bash python manage.py test ERROR: test_uses_home_template (lists.tests.HomePageTest) [...] File "...python-tdd-book/lists/views.py", line 5, in home_page 'new_item_text': request.POST['item_text'], [...] django.utils.datastructures.MultiValueDictKeyError: "'item_text'" ``` 意外故障出现,这是request.Post/Get 时,提取的 Key 不存在导致 ```bash lists/views.py ``` ```python def home_page(request): return render(request, 'home.html', { 'new_item_text': request.POST.get('item_text', ''), }) ``` 更新,修改了获取的方法 ### 预告 折腾了这么就,单元测试终于通过了,下一节会和功能测试做斗争 回顾一下,这已经是第28篇文章了, 坚持了几个月,但是最近越来越没动力,偶然间读了下自己的文章,感觉代入感不强,也许,代码还是应该回归电脑之前,在手机端解释代码的做法还是有些愚笨,还有3期,我也在孕量修改,到30期应该会有一个大的变化.  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/20180508163521.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22245578/Trx eabbfd471cc9564288272afe658057e96c0d09ce |
View Raw JSON Data
{
"trx_id": "eabbfd471cc9564288272afe658057e96c0d09ce",
"block": 22245578,
"trx_in_block": 37,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-08T08:42:27",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-28",
"title": "服务端处理表单提交 - yann学长的运维开发指南28",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n今天的内容是服务端处理POST请求及模板渲染.\n\n今天的具体内容如下:\n> * 服务端处理提交的请求\n> * 构造正确的结果\n> * 把变量传入模板渲染\n> * 测试使用模板\n> * 更新视图模块\n\n\n### 服务端处理提交的请求\n复习一下之前的知识, form表单提交之后,会有一个action属性\n如果没有指定属性的话,提交后会返回之前的页面,这样往往是有问题的\n解决这个问题之前,先把测试文件写出来\n```bash\nvi lists/tests.py\n```\n\n```python\ndef test_uses_home_template(self):\n response = self.client.get('/')\n self.assertTemplateUsed(response, 'home.html')\n\n\ndef test_can_save_a_POST_request(self):\n response = self.client.post('/', data={'item_text': 'A new list item'})\n self.assertIn('A new list item', response.content.decode())\n```\n在HomePageTest类新加一个方法,检查POST后返回的是否html文件中是否有目标字段\n```bash\npython manage.py test\nAssertionError: 'A new list item' not found in '<html>\\n <head>\\n'\n```\n提示没有找到提交的字段,显示的内容是首页的, 首页只有To-Do字样,测试看起来是正确的\n\n### 构造正确的结果\n暂时修改下视图模块,给一个期待的反馈\n```bash\nvi lists/views.py\n```\n```python\nfrom django.http import HttpResponse\nfrom django.shortcuts import render\n\ndef home_page(request):\n if request.method == 'POST':\n return HttpResponse(request.POST['item_text'])\n return render(request, 'home.html')\n```\n如果遇到POST的方法,直接把提交的字符串返回回去\n这样测试是通过了,但也就没有测试应有的用途了\n\n### 把变量传入模板渲染\n```bash\nlists/templates/home.html\n```\n```html\n<body>\n <h1>Your To-Do list</h1>\n <form method=\"POST\">\n <input name=\"item_text\" id=\"id_new_item\" placeholder=\"Enter a to-do item\" />\n {% csrf_token %}\n </form>\n\n <table id=\"id_list_table\">\n <tr><td>{{ new_item_text }}</td></tr> \n </table>\n</body>\n```\n在模板上写一个表格,来放传过来的字符串\n\n### 测试使用模板\n\n```bash\nlists/tests.py\n```\n```python\ndef test_can_save_a_POST_request(self):\n response = self.client.post('/', data={'item_text': 'A new list item'})\n self.assertIn('A new list item', response.content.decode())\n self.assertTemplateUsed(response, 'home.html')\n```\n增加模板测试内容,然后测试\n```bash\npython manage.py test\nAssertionError: No templates used to render the response\n```\n因为视图函数没有使用模板,所以测试失败,这样就排除了之前\"作弊\"的内容\n\n### 更新视图模块\n\n```bash\nlists/views.py\n```\n```python\ndef home_page(request):\n return render(request, 'home.html', {\n 'new_item_text': request.POST['item_text'],\n })\n```\n更新试图内容,然后测试\n```bash\npython manage.py test\n\nERROR: test_uses_home_template (lists.tests.HomePageTest)\n[...]\n File \"...python-tdd-book/lists/views.py\", line 5, in home_page\n 'new_item_text': request.POST['item_text'],\n[...]\ndjango.utils.datastructures.MultiValueDictKeyError: \"'item_text'\"\n\n```\n意外故障出现,这是request.Post/Get 时,提取的 Key 不存在导致\n\n```bash\nlists/views.py\n```\n```python\ndef home_page(request):\n return render(request, 'home.html', {\n 'new_item_text': request.POST.get('item_text', ''),\n })\n``` \n更新,修改了获取的方法\n\n\n### 预告\n折腾了这么就,单元测试终于通过了,下一节会和功能测试做斗争\n\n回顾一下,这已经是第28篇文章了, 坚持了几个月,但是最近越来越没动力,偶然间读了下自己的文章,感觉代入感不强,也许,代码还是应该回归电脑之前,在手机端解释代码的做法还是有些愚笨,还有3期,我也在孕量修改,到30期应该会有一个大的变化.\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/20180508163521.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/05/03 09:38:03
2018/05/03 09:38:03
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-27 |
| title | 编写表单发送请求 - yann学长的运维开发指南27 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 延续上节的内容,这次来实践一下.主要内容是修改模板,及解决跨站问题. 今天的具体内容如下: > * 更新模板 > * 奇怪的失败 > * 稍微作弊一下 > * 问题解决 ### 更新模板 ```bash vi lists/templates/home.html ``` ```html <h1>Your To-Do list</h1> <form method="POST"> <input name="item_text" id="id_new_item" placeholder="Enter a to-do item" /> </form> <table id="id_list_table"> ``` ```bash python functional_tests.py ``` 为表单添加POST方法并测试 ### 奇怪的失败 测试失败,报错如下 ```bash [...] Traceback (most recent call last): File "functional_tests.py", line 40, in test_can_start_a_list_and_retrieve_it_later table = self.browser.find_element_by_id('id_list_table') [...] selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="id_list_table"] ``` 这个比较麻烦,没有明显的调试信息,说找不到的元素,其实也是有的 ### 稍微作弊一下 ```python vi functional_tests.py inputbox.send_keys(Keys.ENTER) time.sleep(10) table = self.browser.find_element_by_id('id_list_table') ``` 给操作的加一个休眠时间,在这个时间窗里,使用浏览器查看网页 ### 问题解决 作弊还是有效的,页面显示大大的403,并且说明有CSRF验证失败,跨域了呢 说明放在后面,先写下修正代码 ```bash vi lists/templates/home.html ``` ```html <form method="POST"> <input name="item_text" id="id_new_item" placeholder="Enter a to-do item" /> {% csrf_token %} </form> ``` ```bash python functional_tests.py ``` 报错消失 ### 预告 今天的内容其实不完整,可以等下一篇一起看.本来打算一起做出来的,但是因为篇幅原因放弃了. 上次是一小步,这次也是一小步,但是走一步算一步,只要坚持不倒退,总会到达目标的.  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0426/20180426144747.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #22102743/Trx 731395cc5d8ff09309a639750b22d948fae574bc |
View Raw JSON Data
{
"trx_id": "731395cc5d8ff09309a639750b22d948fae574bc",
"block": 22102743,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-05-03T09:38:03",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-27",
"title": "编写表单发送请求 - yann学长的运维开发指南27",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n延续上节的内容,这次来实践一下.主要内容是修改模板,及解决跨站问题.\n\n今天的具体内容如下:\n> * 更新模板\n> * 奇怪的失败\n> * 稍微作弊一下\n> * 问题解决\n\n\n### 更新模板\n```bash\nvi lists/templates/home.html\n```\n\n```html\n <h1>Your To-Do list</h1>\n <form method=\"POST\">\n <input name=\"item_text\" id=\"id_new_item\" placeholder=\"Enter a to-do item\" />\n </form>\n\n <table id=\"id_list_table\">\n```\n\n```bash\npython functional_tests.py\n```\n为表单添加POST方法并测试\n\n### 奇怪的失败\n测试失败,报错如下\n```bash\n[...]\nTraceback (most recent call last):\n File \"functional_tests.py\", line 40, in\ntest_can_start_a_list_and_retrieve_it_later\n table = self.browser.find_element_by_id('id_list_table')\n[...]\nselenium.common.exceptions.NoSuchElementException: Message: Unable to locate\nelement: [id=\"id_list_table\"]\n```\n这个比较麻烦,没有明显的调试信息,说找不到的元素,其实也是有的\n\n### 稍微作弊一下\n```python\nvi functional_tests.py\n inputbox.send_keys(Keys.ENTER)\n time.sleep(10)\n\n table = self.browser.find_element_by_id('id_list_table')\n```\n给操作的加一个休眠时间,在这个时间窗里,使用浏览器查看网页\n\n### 问题解决\n作弊还是有效的,页面显示大大的403,并且说明有CSRF验证失败,跨域了呢\n说明放在后面,先写下修正代码\n```bash\nvi lists/templates/home.html\n```\n\n```html\n<form method=\"POST\">\n <input name=\"item_text\" id=\"id_new_item\" placeholder=\"Enter a to-do item\" />\n {% csrf_token %}\n</form>\n```\n\n```bash\npython functional_tests.py\n```\n报错消失\n\n### 预告\n今天的内容其实不完整,可以等下一篇一起看.本来打算一起做出来的,但是因为篇幅原因放弃了.\n\n上次是一小步,这次也是一小步,但是走一步算一步,只要坚持不倒退,总会到达目标的.\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0426/20180426144747.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}2018/04/26 13:28:21
2018/04/26 13:28:21
| voter | anomaly |
| author | tmp4321 |
| permlink | yann-26 |
| weight | 100 (1.00%) |
| Transaction Info | Block #21905796/Trx 595606b4774cc1f0ace8a01e9ad54fd2c1fd0552 |
View Raw JSON Data
{
"trx_id": "595606b4774cc1f0ace8a01e9ad54fd2c1fd0552",
"block": 21905796,
"trx_in_block": 88,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T13:28:21",
"op": [
"vote",
{
"voter": "anomaly",
"author": "tmp4321",
"permlink": "yann-26",
"weight": 100
}
]
}2018/04/26 12:56:21
2018/04/26 12:56:21
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | yann-26 |
| title | yann学长的运维开发指南26 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 单元测试小有成就,这次来做一下功能测试 今天的具体内容如下: > * 表单及请求 > * 关于表单的及简说明 > * POST请求和GET ### 表单及请求 下面进入list项目的第5个小节,保存用户的输入内容,这节可是很长的,请大家做好准备. 先从上次分享的大图上撕下一小块内容来,如图:  * 编写表单,发送POST请求 >提交表单 >面对面调试 >开放访问权限 >CSRF错误 >模板标签 本来打算一气说下去的. 如何提交表单,再调试,开放django的访问权限,果断的遇到跨域错误,再解决掉,再把提交的内容通过特殊标签打入模板. 不过为了我们可爱的雏鸟,我先把两块基础知识相关的内容说明一下吧. ### 关于表单的及简说明 表单是啥,我也说不清楚. 自我的理解就是一种网页组件,可以用来提交一些信息.比如我们最熟悉的登录页面. 另外,表单元素是可以操作的,之前流行的自动登录脚本,就是对表单元素操作的结果. 以下例子引自我最喜欢的w3school网站,如果人家来抗议的话,我会换成别家的. ```html <!DOCTYPE html> <html> <body> <form action="/demo/demo_form.asp"> First name:<br> <input type="text" name="firstname" value="Mickey"> <br> Last name:<br> <input type="text" name="lastname" value=" "> <br><br> <input type="submit" value="Submit"> </form> <p>如果您点击提交,表单数据会被发送到名为 demo_form.asp 的页面。</p> </body> </html> ``` 演示效果如图:  从界面看,比较重要的有输入框,提交按钮等 从代码看,还需要注意 action, 指出向何处发送表单数据 ### POST请求和GET 说完表单,我们还要说一下POST和GET,这东西嘛,我尽力说明,大家有个映象就行,实在理解不了,回头边敲代码边实践就好了. > * HTTP协议 HTTP使用统一资源标识符(URI)来传输数据和建立连接. URL: 就是网址, 包括协议,域名,端口,虚拟目录,文件名,锚及参数 > * URI和URL区别 网上的文档,图像,视频,花鸟鱼虫都有URI,URL是一种特殊的URI > * HTTP状态码 常见的500,404等,是服务端对客户端的响应 > * GET 和POST请求 GET和POST都是客户端向服务端请求方法,请求一定的Web页面的程序或用于特定的URL. 两者的主要差别是GET要提交数据的话,数据是放在URL里面的,非常不安全. 比如密码会被看到. POST方法提交的数据是放在HTTP包的Body中,会好很多. ps. 以上的说明非常的不完整,仅供科普,有意深究的同学请自己查询相关资料. ### 预告 今天没有代码,全是基础说明,请期待下一篇. 上次是一小步,这次也是一小步,但是走一步算一步,只要坚持不倒退,总会到达目标的.  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0419/lists.png","http://www.iamyann.com/images/0426/20180426144747.png","http://www.iamyann.com/images/0426/20180424153117.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #21905156/Trx 7233599d3ca9556e2c8a043ff79b0ee87f638fcf |
View Raw JSON Data
{
"trx_id": "7233599d3ca9556e2c8a043ff79b0ee87f638fcf",
"block": 21905156,
"trx_in_block": 14,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-26T12:56:21",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "yann-26",
"title": "yann学长的运维开发指南26",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n\n单元测试小有成就,这次来做一下功能测试\n\n今天的具体内容如下:\n> * 表单及请求\n> * 关于表单的及简说明\n> * POST请求和GET\n\n\n\n### 表单及请求\n下面进入list项目的第5个小节,保存用户的输入内容,这节可是很长的,请大家做好准备.\n先从上次分享的大图上撕下一小块内容来,如图:\n\n\n* 编写表单,发送POST请求\n >提交表单\n >面对面调试\n >开放访问权限\n >CSRF错误\n >模板标签\n\n本来打算一气说下去的. 如何提交表单,再调试,开放django的访问权限,果断的遇到跨域错误,再解决掉,再把提交的内容通过特殊标签打入模板.\n\n不过为了我们可爱的雏鸟,我先把两块基础知识相关的内容说明一下吧.\n\n### 关于表单的及简说明\n表单是啥,我也说不清楚. 自我的理解就是一种网页组件,可以用来提交一些信息.比如我们最熟悉的登录页面.\n\n另外,表单元素是可以操作的,之前流行的自动登录脚本,就是对表单元素操作的结果.\n\n以下例子引自我最喜欢的w3school网站,如果人家来抗议的话,我会换成别家的.\n\n```html\n<!DOCTYPE html>\n<html>\n<body>\n\n<form action=\"/demo/demo_form.asp\">\nFirst name:<br>\n<input type=\"text\" name=\"firstname\" value=\"Mickey\">\n<br>\nLast name:<br>\n<input type=\"text\" name=\"lastname\" value=\" \">\n<br><br>\n<input type=\"submit\" value=\"Submit\">\n</form>\n\n<p>如果您点击提交,表单数据会被发送到名为 demo_form.asp 的页面。</p>\n\n</body>\n</html>\n```\n演示效果如图:\n\n从界面看,比较重要的有输入框,提交按钮等\n从代码看,还需要注意 action, 指出向何处发送表单数据\n\n### POST请求和GET\n说完表单,我们还要说一下POST和GET,这东西嘛,我尽力说明,大家有个映象就行,实在理解不了,回头边敲代码边实践就好了.\n> * HTTP协议\nHTTP使用统一资源标识符(URI)来传输数据和建立连接.\nURL: 就是网址, 包括协议,域名,端口,虚拟目录,文件名,锚及参数\n\n> * URI和URL区别\n网上的文档,图像,视频,花鸟鱼虫都有URI,URL是一种特殊的URI\n\n> * HTTP状态码\n常见的500,404等,是服务端对客户端的响应\n\n> * GET 和POST请求\nGET和POST都是客户端向服务端请求方法,请求一定的Web页面的程序或用于特定的URL.\n 两者的主要差别是GET要提交数据的话,数据是放在URL里面的,非常不安全. 比如密码会被看到.\n POST方法提交的数据是放在HTTP包的Body中,会好很多.\n\n\nps. 以上的说明非常的不完整,仅供科普,有意深究的同学请自己查询相关资料.\n### 预告\n今天没有代码,全是基础说明,请期待下一篇.\n\n上次是一小步,这次也是一小步,但是走一步算一步,只要坚持不倒退,总会到达目标的.\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0419/lists.png\",\"http://www.iamyann.com/images/0426/20180426144747.png\",\"http://www.iamyann.com/images/0426/20180424153117.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}dednovaupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:58:09
dednovaupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:58:09
| voter | dednova |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852468/Trx 2ff20db05bae320786d67179e894b6867ef44901 |
View Raw JSON Data
{
"trx_id": "2ff20db05bae320786d67179e894b6867ef44901",
"block": 21852468,
"trx_in_block": 32,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:58:09",
"op": [
"vote",
{
"voter": "dednova",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}pobedasupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:57:42
pobedasupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:57:42
| voter | pobedas |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852459/Trx a3f03994b09e323b71870ef9872e3c63af0aba12 |
View Raw JSON Data
{
"trx_id": "a3f03994b09e323b71870ef9872e3c63af0aba12",
"block": 21852459,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:57:42",
"op": [
"vote",
{
"voter": "pobedas",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}vojnovanastyaupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:57:39
vojnovanastyaupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:57:39
| voter | vojnovanastya |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852458/Trx 609e37b08869226a1e2e429396abbb7a36dd59d0 |
View Raw JSON Data
{
"trx_id": "609e37b08869226a1e2e429396abbb7a36dd59d0",
"block": 21852458,
"trx_in_block": 27,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:57:39",
"op": [
"vote",
{
"voter": "vojnovanastya",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}tczajkowskiupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:57:33
tczajkowskiupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:57:33
| voter | tczajkowski |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852456/Trx f49eed643421ec7794175261a902e0fe1c3d3621 |
View Raw JSON Data
{
"trx_id": "f49eed643421ec7794175261a902e0fe1c3d3621",
"block": 21852456,
"trx_in_block": 15,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:57:33",
"op": [
"vote",
{
"voter": "tczajkowski",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}cherekrestupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:54:00
cherekrestupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:54:00
| voter | cherekrest |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852385/Trx 6ab0e114dda1b294309c610384b458ae79125ba8 |
View Raw JSON Data
{
"trx_id": "6ab0e114dda1b294309c610384b458ae79125ba8",
"block": 21852385,
"trx_in_block": 30,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:54:00",
"op": [
"vote",
{
"voter": "cherekrest",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}igor101upvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:54:00
igor101upvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:54:00
| voter | igor101 |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852385/Trx ccd492b008c9cb63611e53d1f1d16dec3a689360 |
View Raw JSON Data
{
"trx_id": "ccd492b008c9cb63611e53d1f1d16dec3a689360",
"block": 21852385,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:54:00",
"op": [
"vote",
{
"voter": "igor101",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}vikktoupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:53:57
vikktoupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:53:57
| voter | vikkto |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852384/Trx ff10b9effd39d6c7a1ee0559589d45f780ebb357 |
View Raw JSON Data
{
"trx_id": "ff10b9effd39d6c7a1ee0559589d45f780ebb357",
"block": 21852384,
"trx_in_block": 89,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:53:57",
"op": [
"vote",
{
"voter": "vikkto",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}krossovokupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:53:57
krossovokupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:53:57
| voter | krossovok |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852384/Trx 41c9bab15a08cda9d13e1809933bb5baa4a622c2 |
View Raw JSON Data
{
"trx_id": "41c9bab15a08cda9d13e1809933bb5baa4a622c2",
"block": 21852384,
"trx_in_block": 67,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:53:57",
"op": [
"vote",
{
"voter": "krossovok",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}dolendoisirdyaupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:53:57
dolendoisirdyaupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:53:57
| voter | dolendoisirdya |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852384/Trx ae7a4a8ad388d24af6cd0f348d624db54f7f0fdc |
View Raw JSON Data
{
"trx_id": "ae7a4a8ad388d24af6cd0f348d624db54f7f0fdc",
"block": 21852384,
"trx_in_block": 32,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:53:57",
"op": [
"vote",
{
"voter": "dolendoisirdya",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}medvediupvoted (100.00%) @tmp4321 / part-1-yann-252018/04/24 16:53:54
medvediupvoted (100.00%) @tmp4321 / part-1-yann-25
2018/04/24 16:53:54
| voter | medvedi |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21852383/Trx 7466f7b73d8b34f3297afe25f08b5f336ab752ef |
View Raw JSON Data
{
"trx_id": "7466f7b73d8b34f3297afe25f08b5f336ab752ef",
"block": 21852383,
"trx_in_block": 7,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T16:53:54",
"op": [
"vote",
{
"voter": "medvedi",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"weight": 10000
}
]
}tmp4321published a new post: part-1-yann-252018/04/24 08:23:00
tmp4321published a new post: part-1-yann-25
2018/04/24 08:23:00
| parent author | |
| parent permlink | devops |
| author | tmp4321 |
| permlink | part-1-yann-25 |
| title | 测试回顾 part 1 - yann学长的运维开发指南25 |
| body | ### 说明 目前的进度及后续的课程  <!--more--> ### 介绍 截至到上节,我们的进度到了一个小节点,对于首页的基本测试完成了. 本来打算上次分享上做总结的,谁知道堆积下来篇幅比较长,就放到这一次了. 具体内容如下: > * 总结回顾对于首页的测试 > * 说明保存用户输入 ### 总结回顾对于首页的测试 因为关于首页的测试,是本教程的第一篇测试,所以我们花点时间,把过程重新梳理一下: #### 从零开始 > * 我们先建了个Django的项目 django-admin.py startproject superlists . > * 然后建了一个应用 python manage.py startapp lists > * 在应用里的tests文件里写了一个测试 vi lists/tests.py > * 逐步把tests里的测试调试成功,期间修改了 urls和view文件 vi lists/views.py vi superlists/urls.py > * 为视图编写了一个单元测试 HomePageTest() vi lists/tests.py > * 调试通过后,又为其写了一个功能测试 vi functional_tests.py > * 证明功能测试工作正常后,我们扩充了功能测试的内容 vi functional_tests.py > * 正进一步的测试中,我们引入了模板,并重构了代码 vi lists/templates/home.html > * 因为测试失败,我们在settings里注册了lists应用 vi superlists/settings.py > * 逐步把functional_tests里的测试调试成功 vi lists/templates/home.html 以上就是目前的进度,跑到了靠近底部的功能测试,却无法通过,我们最后打了个标记在上面. ps. 如果大家git用的熟练,可以自己checkout 相关分支查看代码细节,如果不是很熟悉这方面的技巧,请查看我前几期分享的内容.github下载的代码显示的是最终提交结果,文件和内容可能和前期描述并不一致. ### 说明保存用户输入 下一章的内容很多,先借参考书的目录来当大纲吧,反正内容我是会自己写的:  > 需要了解表单 > 发送POST请求 > 处理POST请求 > 把URL的变量传入模板 > 了解ORM工具 > 把POST请求传入数据库 > 以及重定向及模板渲染等 ### 预告 敲字真的很耗时间啊,半小时过去了. 大约就是以上的情况, 之所以做个总结 or 小结, 就是想告诉大家,我们的教程是连续的, 请放心跟随,不是东一锤西一棒子的知识百科. 上次是一小步,这次也是一小步,但是走一步算一步,只要坚持不倒退,总会到达目标的.  |
| json metadata | {"tags":["devops","python"],"image":["http://www.iamyann.com/images/0419/lists.png","http://www.iamyann.com/images/20180424142642.png","http://hero.iamyann.com/blog_webchat.jpg"],"app":"steemit/0.1","format":"markdown"} |
| Transaction Info | Block #21842214/Trx 6991602334dc4fc31eb60ebffb9d152ac9fe698f |
View Raw JSON Data
{
"trx_id": "6991602334dc4fc31eb60ebffb9d152ac9fe698f",
"block": 21842214,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-24T08:23:00",
"op": [
"comment",
{
"parent_author": "",
"parent_permlink": "devops",
"author": "tmp4321",
"permlink": "part-1-yann-25",
"title": "测试回顾 part 1 - yann学长的运维开发指南25",
"body": "### 说明\n目前的进度及后续的课程\n\n<!--more-->\n\n### 介绍\n截至到上节,我们的进度到了一个小节点,对于首页的基本测试完成了. 本来打算上次分享上做总结的,谁知道堆积下来篇幅比较长,就放到这一次了.\n\n具体内容如下:\n> * 总结回顾对于首页的测试\n> * 说明保存用户输入\n\n\n\n### 总结回顾对于首页的测试\n因为关于首页的测试,是本教程的第一篇测试,所以我们花点时间,把过程重新梳理一下:\n\n#### 从零开始\n> * 我们先建了个Django的项目\ndjango-admin.py startproject superlists .\n\n> * 然后建了一个应用\npython manage.py startapp lists\n\n> * 在应用里的tests文件里写了一个测试\nvi lists/tests.py\n\n> * 逐步把tests里的测试调试成功,期间修改了 urls和view文件\nvi lists/views.py\nvi superlists/urls.py\n\n> * 为视图编写了一个单元测试 HomePageTest()\nvi lists/tests.py\n\n> * 调试通过后,又为其写了一个功能测试\nvi functional_tests.py\n\n> * 证明功能测试工作正常后,我们扩充了功能测试的内容\nvi functional_tests.py\n\n> * 正进一步的测试中,我们引入了模板,并重构了代码\nvi lists/templates/home.html\n\n> * 因为测试失败,我们在settings里注册了lists应用\nvi superlists/settings.py\n\n> * 逐步把functional_tests里的测试调试成功\nvi lists/templates/home.html\n\n以上就是目前的进度,跑到了靠近底部的功能测试,却无法通过,我们最后打了个标记在上面.\n\nps. 如果大家git用的熟练,可以自己checkout 相关分支查看代码细节,如果不是很熟悉这方面的技巧,请查看我前几期分享的内容.github下载的代码显示的是最终提交结果,文件和内容可能和前期描述并不一致.\n\n### 说明保存用户输入\n下一章的内容很多,先借参考书的目录来当大纲吧,反正内容我是会自己写的:\n\n\n> 需要了解表单\n> 发送POST请求\n> 处理POST请求\n> 把URL的变量传入模板\n> 了解ORM工具\n> 把POST请求传入数据库\n> 以及重定向及模板渲染等\n\n\n### 预告\n敲字真的很耗时间啊,半小时过去了. 大约就是以上的情况, 之所以做个总结 or 小结, 就是想告诉大家,我们的教程是连续的, 请放心跟随,不是东一锤西一棒子的知识百科.\n\n上次是一小步,这次也是一小步,但是走一步算一步,只要坚持不倒退,总会到达目标的.\n\n\n",
"json_metadata": "{\"tags\":[\"devops\",\"python\"],\"image\":[\"http://www.iamyann.com/images/0419/lists.png\",\"http://www.iamyann.com/images/20180424142642.png\",\"http://hero.iamyann.com/blog_webchat.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
}
]
}tmp4321replied to @tmp4321 / re-tmp4321-yann-18-20180423t020242668z2018/04/23 02:04:48
tmp4321replied to @tmp4321 / re-tmp4321-yann-18-20180423t020242668z
2018/04/23 02:04:48
| parent author | tmp4321 |
| parent permlink | yann-18 |
| author | tmp4321 |
| permlink | re-tmp4321-yann-18-20180423t020242668z |
| title | |
| body | 请扫描二维码看微信上的版本,这个不知道为什么乱掉了,而且不能编辑,十分抱歉. |
| json metadata | {"tags":["devops"],"app":"steemit/0.1"} |
| Transaction Info | Block #21806378/Trx 6c1bc47c258af224f9f2b949788892eda7d3e802 |
View Raw JSON Data
{
"trx_id": "6c1bc47c258af224f9f2b949788892eda7d3e802",
"block": 21806378,
"trx_in_block": 4,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-23T02:04:48",
"op": [
"comment",
{
"parent_author": "tmp4321",
"parent_permlink": "yann-18",
"author": "tmp4321",
"permlink": "re-tmp4321-yann-18-20180423t020242668z",
"title": "",
"body": "请扫描二维码看微信上的版本,这个不知道为什么乱掉了,而且不能编辑,十分抱歉.",
"json_metadata": "{\"tags\":[\"devops\"],\"app\":\"steemit/0.1\"}"
}
]
}tmp4321replied to @tmp4321 / re-tmp4321-yann-18-20180423t020349833z2018/04/23 02:03:51
tmp4321replied to @tmp4321 / re-tmp4321-yann-18-20180423t020349833z
2018/04/23 02:03:51
| parent author | tmp4321 |
| parent permlink | yann-18 |
| author | tmp4321 |
| permlink | re-tmp4321-yann-18-20180423t020349833z |
| title | |
| body | 请扫描二维码看微信上的版本,这个不知道为什么乱掉了,而且不能编辑,十分抱歉. |
| json metadata | {"tags":["devops"],"app":"steemit/0.1"} |
| Transaction Info | Block #21806359/Trx 88c74b1ccb2ee346b7e0a72717c90d1cf44571df |
View Raw JSON Data
{
"trx_id": "88c74b1ccb2ee346b7e0a72717c90d1cf44571df",
"block": 21806359,
"trx_in_block": 42,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-23T02:03:51",
"op": [
"comment",
{
"parent_author": "tmp4321",
"parent_permlink": "yann-18",
"author": "tmp4321",
"permlink": "re-tmp4321-yann-18-20180423t020349833z",
"title": "",
"body": "请扫描二维码看微信上的版本,这个不知道为什么乱掉了,而且不能编辑,十分抱歉.",
"json_metadata": "{\"tags\":[\"devops\"],\"app\":\"steemit/0.1\"}"
}
]
}2018/04/22 16:42:24
2018/04/22 16:42:24
| voter | pilyug |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795131/Trx 1d57251d075d3160ee2330575f0658967fe6ee49 |
View Raw JSON Data
{
"trx_id": "1d57251d075d3160ee2330575f0658967fe6ee49",
"block": 21795131,
"trx_in_block": 11,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:42:24",
"op": [
"vote",
{
"voter": "pilyug",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:42:21
2018/04/22 16:42:21
| voter | iksar |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795130/Trx e89f3c38e5c52e58e997eacea0bcfaac7f1e5357 |
View Raw JSON Data
{
"trx_id": "e89f3c38e5c52e58e997eacea0bcfaac7f1e5357",
"block": 21795130,
"trx_in_block": 62,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:42:21",
"op": [
"vote",
{
"voter": "iksar",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:42:12
2018/04/22 16:42:12
| voter | saunina |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795127/Trx d15c435240f4d1189cb3bf97f1b9c9360b52a793 |
View Raw JSON Data
{
"trx_id": "d15c435240f4d1189cb3bf97f1b9c9360b52a793",
"block": 21795127,
"trx_in_block": 46,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:42:12",
"op": [
"vote",
{
"voter": "saunina",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}teodotrshmidupvoted (100.00%) @tmp4321 / yann-242018/04/22 16:42:09
teodotrshmidupvoted (100.00%) @tmp4321 / yann-24
2018/04/22 16:42:09
| voter | teodotrshmid |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795126/Trx 1e7e21bacc272190eb7c4ce22d936f467a6a2b50 |
View Raw JSON Data
{
"trx_id": "1e7e21bacc272190eb7c4ce22d936f467a6a2b50",
"block": 21795126,
"trx_in_block": 17,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:42:09",
"op": [
"vote",
{
"voter": "teodotrshmid",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:42:09
2018/04/22 16:42:09
| voter | dakhnova |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795126/Trx 797c3bb8dab82f567aeac70a795d08329b19d8ec |
View Raw JSON Data
{
"trx_id": "797c3bb8dab82f567aeac70a795d08329b19d8ec",
"block": 21795126,
"trx_in_block": 3,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:42:09",
"op": [
"vote",
{
"voter": "dakhnova",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:42:06
2018/04/22 16:42:06
| voter | robsa |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795125/Trx 897189405cff316954eb5919b865d63401c73de1 |
View Raw JSON Data
{
"trx_id": "897189405cff316954eb5919b865d63401c73de1",
"block": 21795125,
"trx_in_block": 13,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:42:06",
"op": [
"vote",
{
"voter": "robsa",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:41:54
2018/04/22 16:41:54
| voter | ebyjh1024 |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795121/Trx 4576d7182fb35c1a71cdaefd5122b54df373ee99 |
View Raw JSON Data
{
"trx_id": "4576d7182fb35c1a71cdaefd5122b54df373ee99",
"block": 21795121,
"trx_in_block": 25,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:54",
"op": [
"vote",
{
"voter": "ebyjh1024",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}nikolasantiupvoted (100.00%) @tmp4321 / yann-242018/04/22 16:41:48
nikolasantiupvoted (100.00%) @tmp4321 / yann-24
2018/04/22 16:41:48
| voter | nikolasanti |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795119/Trx 3b0fe50b9e6478c8980ad7725ba21b1fa2adc0fc |
View Raw JSON Data
{
"trx_id": "3b0fe50b9e6478c8980ad7725ba21b1fa2adc0fc",
"block": 21795119,
"trx_in_block": 31,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:48",
"op": [
"vote",
{
"voter": "nikolasanti",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:41:45
2018/04/22 16:41:45
| voter | baanakliu |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795118/Trx 00250a1e72fba48cc50bdebedf8c9655f9d03d89 |
View Raw JSON Data
{
"trx_id": "00250a1e72fba48cc50bdebedf8c9655f9d03d89",
"block": 21795118,
"trx_in_block": 17,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:45",
"op": [
"vote",
{
"voter": "baanakliu",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:41:45
2018/04/22 16:41:45
| voter | beloch |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795118/Trx 6d2205d3bfc5dfa85d53807dee6f5ff51c45d962 |
View Raw JSON Data
{
"trx_id": "6d2205d3bfc5dfa85d53807dee6f5ff51c45d962",
"block": 21795118,
"trx_in_block": 6,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:45",
"op": [
"vote",
{
"voter": "beloch",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:41:45
2018/04/22 16:41:45
| voter | tsudev5 |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795118/Trx d91815f84c22deb5b3026b9f42a3b3a697276dbf |
View Raw JSON Data
{
"trx_id": "d91815f84c22deb5b3026b9f42a3b3a697276dbf",
"block": 21795118,
"trx_in_block": 0,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:45",
"op": [
"vote",
{
"voter": "tsudev5",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:41:42
2018/04/22 16:41:42
| voter | zoretko |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795117/Trx e1197bb5a58ed62957705cbaa9f12d8b4ea4c3c1 |
View Raw JSON Data
{
"trx_id": "e1197bb5a58ed62957705cbaa9f12d8b4ea4c3c1",
"block": 21795117,
"trx_in_block": 26,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:42",
"op": [
"vote",
{
"voter": "zoretko",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}2018/04/22 16:41:39
2018/04/22 16:41:39
| voter | larsand |
| author | tmp4321 |
| permlink | yann-24 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21795116/Trx c259aaf28b9923a4961be13b23e92fe8cdd9fc26 |
View Raw JSON Data
{
"trx_id": "c259aaf28b9923a4961be13b23e92fe8cdd9fc26",
"block": 21795116,
"trx_in_block": 75,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-04-22T16:41:39",
"op": [
"vote",
{
"voter": "larsand",
"author": "tmp4321",
"permlink": "yann-24",
"weight": 10000
}
]
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779089514
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779089514
},
"rc_account": {
"account": "tmp4321",
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779089514
},
"max_rc_creation_adjustment": {
"amount": "2020748973",
"precision": 6,
"nai": "@@000000037"
},
"max_rc": "10164408779"
}
}Account Metadata
| POSTING JSON METADATA | |
| None | |
| JSON METADATA | |
| None |
{
"posting_json_metadata": {},
"json_metadata": {}
}Auth Keys
Owner
Single Signature
Public Keys
STM6ddztSHnrXNBQsaroMiiStsv7yn9ax8c6RRwJtiy3B9NijyHSB1/1
Active
Single Signature
Public Keys
STM7nLpGGfSiqhZjsTev6Zqhu6V1BKDf5Qz7WgdNQdWsG45h7a4PL1/1
Posting
Single Signature
Public Keys
STM7iiWNebsCsEcFugUYPM7wLhXLE9Y2auZuqszLand8XBpfvREPy1/1
Memo
STM6UXHvW6ZyyD9VTTRAKEP6V2XH8oL8jfXqdHXRxTMp37JVRFrVz
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM6ddztSHnrXNBQsaroMiiStsv7yn9ax8c6RRwJtiy3B9NijyHSB",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7nLpGGfSiqhZjsTev6Zqhu6V1BKDf5Qz7WgdNQdWsG45h7a4PL",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7iiWNebsCsEcFugUYPM7wLhXLE9Y2auZuqszLand8XBpfvREPy",
1
]
]
},
"memo": "STM6UXHvW6ZyyD9VTTRAKEP6V2XH8oL8jfXqdHXRxTMp37JVRFrVz"
}Witness Votes
0 / 30
No active witness votes.
[]