{"id":1537,"date":"2017-09-27T02:21:22","date_gmt":"2017-09-26T18:21:22","guid":{"rendered":"http:\/\/www.yueguangzu.net\/?p=1537"},"modified":"2017-09-29T23:53:38","modified_gmt":"2017-09-29T15:53:38","slug":"ajax%e7%9a%84csrfmemcached%e9%aa%8c%e8%af%81%e7%a0%81","status":"publish","type":"post","link":"http:\/\/www.yueguangzu.net\/?p=1537","title":{"rendered":"ajax\u7684CSRF,memcached,\u9a8c\u8bc1\u7801"},"content":{"rendered":"<h4 class=\"md-end-block md-heading md-focus\"><span class=\"md-expand\">1.\u4f7f\u7528Ajax\u53d1\u9001csrf_token<\/span><\/h4>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u5728\u4f7f\u7528ajax\u63d0\u4ea4\u8868\u5355\u7684\u65f6\u5019,\u662f\u4e0d\u4f1a\u4e3b\u52a8\u5c06csrf_token\u63d0\u4ea4\u7684,django\u4f1a\u8ba4\u4e3a\u662f\u8de8\u57df\u8bf7\u6c42\u800c\u62d2\u7edd.\u6240\u4ee5\u9700\u8981\u624b\u5de5\u83b7\u53d6csrf_token\u7684\u503c,\u5e76\u5c01\u88c5\u5728ajax\u7684beforesend,\u4f5c\u4e3a\u63d0\u4ea4\u6570\u636e\u5305\u7684\u5934\u90e8\u4e00\u5757\u53d1\u9001\u7ed9\u670d\u52a1\u5668.<\/h5>\n<\/li>\n<\/ul>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u4ec5\u5c55\u793aajax\u90e8\u5206\u4ee3\u7801<\/h5>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u524d\u7aef\u70b9\u51fb\u6309\u94ae\u89e6\u53d1event\u4e8b\u4ef6,<span spellcheck=\"false\"><code>event.preventDefault()<\/code><\/span>\u65b9\u6cd5\u963b\u6b62\u4e86\u7cfb\u7edf\u9ed8\u8ba4\u4e8b\u4ef6.<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">csrf_token\u662f\u5c01\u88c5\u5728\u53d1\u9001\u6570\u636e\u5305\u7684\u5934\u90e8,\u8fd9\u90e8\u5206\u5728ajax\u662f\u901a\u8fc7<span spellcheck=\"false\"><code>beforeSend<\/code><\/span>\u5b9e\u73b0,\u901a\u8fc7\u56de\u8c03\u51fd\u6570<span spellcheck=\"false\"><code>function(xhr,settings)<\/code><\/span>\u4f20\u5165\u5bf9\u8c61xhr,\u4ee5\u53ca\u5bf9\u8c61\u7684\u8bbe\u7f6esettings<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u83b7\u53d6csrf_token\u6709\u6807\u7b7e\u83b7\u53d6\u6cd5<span spellcheck=\"false\"><code>$('input[name=\"csrfmiddlewaretoken\"]').val()<\/code><\/span>,\u76f4\u63a5\u53d6input\u6807\u7b7e\u4e2d\u540d\u79f0\u4e3acsrfmiddlewaretoken\u8f93\u5165\u6846\u5185\u5bb9.<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4e5f\u53ef\u4ee5\u4f7f\u7528<span spellcheck=\"false\"><code>getCookie('csrftoken')<\/code><\/span>\u65b9\u6cd5,\u4ece\u4f20\u5165\u7684cookie\u4e2d\u83b7\u53d6csrftoken\u7684\u503c.<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u8bbe\u7f6e\u8bf7\u6c42\u7684\u5934\u6587\u4ef6,\u4f7f\u7528<span spellcheck=\"false\"><code>xhr.setRequestHeader('X-CSRFToken',csrftoken)<\/code><\/span>\u65b9\u6cd5,\u524d\u8005\u662f\u53c2\u6570,\u540e\u9762\u662f\u4e0a\u9762\u83b7\u53d6\u7684csrf_token\u7684\u503c.<\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"javascript\" contenteditable=\"false\"><span class=\"cm-variable\">$<\/span>(<span class=\"cm-string\">'.submit-btn'<\/span>).<span class=\"cm-property\">click<\/span>(<span class=\"cm-keyword\">function<\/span>(<span class=\"cm-def\">event<\/span>) {\r\n                    <span class=\"cm-variable-2\">event<\/span>.<span class=\"cm-property\">preventDefault<\/span>(); <span class=\"cm-error\">#\u963b\u6b62\u7cfb\u7edf\u9ed8\u8ba4\u7684\u4e8b\u4ef6\u65b9\u5f0f<\/span>\r\n                    <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">username<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">$<\/span>(<span class=\"cm-string\">'.username-input'<\/span>).<span class=\"cm-property\">val<\/span>(); <span class=\"cm-error\">#\u70b9\u51fb\u6309\u94ae\u540e\u83b7\u53d6\u7528\u6237\u540d,\u5bc6\u7801\u8f93\u5165\u6846\u91cc\u7684\u503c.<\/span>\r\n                    <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">password<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">$<\/span>(<span class=\"cm-string\">'.password-input'<\/span>).<span class=\"cm-property\">val<\/span>();\r\n                    <span class=\"cm-variable\">$<\/span>.<span class=\"cm-property\">ajax<\/span>({\r\n                        <span class=\"cm-string cm-property\">'url'<\/span>: <span class=\"cm-string\">''<\/span>,  <span class=\"cm-error\">#\u8bf7\u6c42\u7684URL\u5730\u5740<\/span>\r\n                        <span class=\"cm-string\">'method'<\/span>: <span class=\"cm-string\">'POST'<\/span>,  <span class=\"cm-error\">#post\u65b9\u5f0f<\/span>\r\n                        <span class=\"cm-string\">'data'<\/span>: {                   <span class=\"cm-error\">#data\u90e8\u5206\u7684\u5185\u5bb9,\u5b57\u5178\u683c\u5f0f<\/span>\r\n                            <span class=\"cm-string\">'username'<\/span>: <span class=\"cm-variable-2\">username<\/span>,\r\n                            <span class=\"cm-string\">'password'<\/span>: <span class=\"cm-variable-2\">password<\/span>,\r\n                        },\r\n                        <span class=\"cm-string\">'beforeSend'<\/span>: <span class=\"cm-keyword\">function<\/span>(<span class=\"cm-variable\">xhr<\/span>,<span class=\"cm-variable\">settings<\/span>) { \u00a0 <span class=\"cm-error\">#\u8bbe\u7f6e\u8981\u53d1\u9001\u7684\u5934\u5185\u5bb9<\/span>\r\n                            <span class=\"cm-comment\">\/\/\u9996\u5148\u5224\u65ad\u662f\u4e0d\u662fpost\u65b9\u6cd5\u4e14\u6ca1\u6709\u8de8\u57df<\/span>\r\n                            <span class=\"cm-keyword\">if<\/span> (<span class=\"cm-operator\">!<\/span>((<span class=\"cm-string-2\">\/^(GET|HEAD|OPTIONS|TRACE)$\/<\/span>.<span class=\"cm-property\">test<\/span>(<span class=\"cm-variable\">settings<\/span>.<span class=\"cm-property\">method<\/span>))) <span class=\"cm-operator\">&amp;&amp;<\/span> <span class=\"cm-operator\">!<\/span><span class=\"cm-keyword\">this<\/span>.<span class=\"cm-property\">crossDomain<\/span>) { \u00a0 <span class=\"cm-error\">#\u5982\u679c\u662fpost\u65b9\u6cd5,\u4e14\u4e0d\u662f\u8de8\u57df<\/span>\r\n                                <span class=\"cm-comment\">\/\/1.\u83b7\u53d6csrf_token\u7684\u503c<\/span>\r\n                                <span class=\"cm-comment\">\/\/name=\"csrfmiddlewaretoken\" \u7684input\u5143\u7d20\u662f\u6e32\u67d3{%csrf_token%}\u540e\u5f97\u5230\u7684<\/span>\r\n                                <span class=\"cm-comment\">\/\/var csrftoken = $('input[name=\"csrfmiddlewaretoken\"]').val(); #\u901a\u8fc7input[name=\"csrfmiddlewaretoken\"]\u83b7\u53d6<\/span>\r\n                                <span class=\"cm-comment\">\/\/\u4f18\u96c5\u7684\u83b7\u53d6token\u7684\u65b9\u5f0f\u5982\u4e0b\uff1a<\/span>\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">csrftoken<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">getCookie<\/span>(<span class=\"cm-string\">'csrftoken'<\/span>); <span class=\"cm-error\">#\u4ececookie\u4e2d\u83b7\u53d6csrf_token\u503c<\/span>\r\n                                <span class=\"cm-comment\">\/\/2.\u5728header\u5f53\u4e2d\u8bbe\u7f6ecsrf_token\u7684\u503c<\/span>\r\n                                <span class=\"cm-variable\">xhr<\/span>.<span class=\"cm-property\">setRequestHeader<\/span>(<span class=\"cm-string\">'X-CSRFToken'<\/span>,<span class=\"cm-variable-2\">csrftoken<\/span>);  <span class=\"cm-error\">#\u8bbe\u7f6exhr\u5bf9\u8c61\u8bf7\u6c42\u7684headers\u4e2d\u7684CSRFToken\u53c2\u6570\u4e3acsrftoken\u503c<\/span>\r\n                            }\r\n                        },\r\n                        <span class=\"cm-string\">'success'<\/span>: <span class=\"cm-keyword\">function<\/span>(<span class=\"cm-def\">data<\/span>) {  <span class=\"cm-error\">#\u5982\u679c\u8bf7\u6c42\u6210\u529f<\/span>\r\n                            <span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-string\">'success'<\/span>)\r\n                            <span class=\"cm-keyword\">if<\/span>(<span class=\"cm-variable-2\">data<\/span>[<span class=\"cm-string\">'code'<\/span>] <span class=\"cm-operator\">==<\/span> <span class=\"cm-number\">200<\/span>){ \u00a0 <span class=\"cm-error\">#\u72b6\u6001\u7801200<\/span>\r\n                                <span class=\"cm-variable\">window<\/span>.<span class=\"cm-property\">location<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-string\">'\/'<\/span>; <span class=\"cm-error\">#\u8fd4\u56de\u5230\u9996\u9875<\/span>\r\n                            }<span class=\"cm-keyword\">else<\/span>{\r\n                                <span class=\"cm-operator\">&lt;!--<\/span><span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-variable-2\">data<\/span>.<span class=\"cm-property\">box<\/span>)<span class=\"cm-operator\">--&gt;<\/span>\r\n                                <span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-variable-2\">data<\/span>[<span class=\"cm-string\">'message'<\/span>]); <span class=\"cm-error\">#\u5982\u679c\u72b6\u6001\u4e0d\u4e3a200,\u83b7\u53d6\u4fe1\u606f\u548c\u72b6\u6001\u7801<\/span>\r\n                                <span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-variable-2\">data<\/span>[<span class=\"cm-string\">'code'<\/span>]);\r\n\u200b\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">message<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable-2\">data<\/span>[<span class=\"cm-string\">'message'<\/span>];\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">messageJson<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">JSON<\/span>.<span class=\"cm-property\">parse<\/span>(<span class=\"cm-variable-2\">message<\/span>);\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">errorlist<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable-2\">messageJson<\/span>[<span class=\"cm-string\">'password'<\/span>];\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">codename<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable-2\">errorlist<\/span>[<span class=\"cm-number\">0<\/span>];\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">error<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable-2\">codename<\/span>[<span class=\"cm-string\">'message'<\/span>];\r\n                                <span class=\"cm-keyword\">var<\/span> <span class=\"cm-def\">code<\/span><span class=\"cm-operator\">=<\/span> <span class=\"cm-variable-2\">codename<\/span>[<span class=\"cm-string\">'code'<\/span>];\r\n                                <span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-variable-2\">codename<\/span>[<span class=\"cm-string\">'code'<\/span>]);\r\n                                <span class=\"cm-variable\">$<\/span>(<span class=\"cm-string\">'.error-info'<\/span>).<span class=\"cm-property\">html<\/span>(<span class=\"cm-variable-2\">error<\/span>);\r\n                            }\r\n                        },\r\n                        <span class=\"cm-string\">'error'<\/span>:<span class=\"cm-keyword\">function<\/span>() {\r\n                            <span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-string\">'error'<\/span>);\r\n                        },\r\n                        <span class=\"cm-string\">'complete'<\/span>: <span class=\"cm-keyword\">function<\/span>() {\r\n                            <span class=\"cm-variable\">console<\/span>.<span class=\"cm-property\">log<\/span>(<span class=\"cm-string\">'complete'<\/span>);\r\n                        }\r\n                    });\r\n                });\r\n            });<\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">csrf_token\u5728\u6e90\u4ee3\u7801\u4e2d\u7684\u663e\u793a<\/h5>\n<\/blockquote>\n<p><span class=\"md-line md-end-block\"><span class=\"md-image md-img-loaded\" contenteditable=\"false\" data-src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf1-1.png\"><img style=\"box-sizing: border-box; border-width: 0px 4px 0px 2px; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; border-color: initial transparent initial transparent; border-style: initial solid initial solid;\" src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf1-1.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5728\u8bf7\u6c42\u9875\u9762\u8fc7\u7a0b\u4e2d,response\u7684headers\u91cc\u9762\u4e5f\u5305\u542b\u4e86csrf_token<\/h5>\n<\/blockquote>\n<p><span class=\"md-line md-end-block\"><span class=\"md-image md-img-loaded\" contenteditable=\"false\" data-src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf2-1.png\"><img style=\"box-sizing: border-box; border-width: 0px 4px 0px 2px; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; border-color: initial transparent initial transparent; border-style: initial solid initial solid;\" src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf2-1.png\" \/><\/span><\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"md-image md-img-loaded\" contenteditable=\"false\" data-src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf3-1.png\"><img style=\"box-sizing: border-box; border-width: 0px 4px 0px 2px; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; border-color: initial transparent initial transparent; border-style: initial solid initial solid;\" src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf3-1.png\" \/><\/span><\/span><\/p>\n<h4 class=\"md-end-block md-heading\">2.memcached<\/h4>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">memcache\u662f\u4e00\u4e2a\u7f13\u5b58\u6570\u636e\u5e93,\u901a\u5e38\u60c5\u51b5\u4e0b,\u6570\u636e\u5e93\u8bfb\u53d6\u6b21\u6570\u8fdc\u5927\u4e8e\u5199\u5165\u6b21\u6570,\u9891\u7e41\u7684\u6570\u636e\u5e93\u786c\u76d8io\u8bfb\u53d6\u64cd\u4f5c\u4f1a\u9020\u6210\u6027\u80fd\u4e0b\u964d.\u7f13\u5b58\u6570\u636e\u5e93\u662f\u5728\u5185\u5b58\u4e0a\u5de5\u4f5c,\u7528\u4e8e\u52a0\u901f\u6570\u636e\u7684\u8bfb\u5199.<\/h5>\n<\/li>\n<\/ul>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">memcached\u5b89\u88c5\u6b65\u9aa4:<\/h5>\n<\/blockquote>\n<p><span class=\"md-line md-end-block\"><span class=\"md-image md-img-loaded\" contenteditable=\"false\" data-src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf4.png\"><img style=\"box-sizing: border-box; border-width: 0px 4px 0px 2px; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; border-color: initial transparent initial transparent; border-style: initial solid initial solid;\" src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf4.png\" \/><\/span><\/span><\/p>\n<h5 class=\"md-end-block md-heading\">2.1 memcached\u7684\u5b89\u88c5<\/h5>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#1.\u5148\u5b89\u88c5\u4f9d\u8d56\u5305 libevent-2.0-5<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">sudo<\/span> <span class=\"cm-variable\">apt<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">get<\/span> <span class=\"cm-variable\">install<\/span> <span class=\"cm-variable\">libevent<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">2.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">5<\/span>\r\n<span class=\"cm-variable\">Reading<\/span> <span class=\"cm-variable\">package<\/span> <span class=\"cm-variable\">lists<\/span>... <span class=\"cm-property\">Done<\/span>\r\n<span class=\"cm-variable\">Building<\/span> <span class=\"cm-variable\">dependency<\/span> <span class=\"cm-variable\">tree<\/span> \u00a0 \u00a0 \u00a0 \r\n<span class=\"cm-variable\">Reading<\/span> <span class=\"cm-variable\">state<\/span> <span class=\"cm-variable\">information<\/span>... <span class=\"cm-property\">Done<\/span>\r\n<span class=\"cm-variable\">libevent<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">2.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">5<\/span> <span class=\"cm-keyword\">is<\/span> <span class=\"cm-variable\">already<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">newest<\/span> <span class=\"cm-variable\">version<\/span> (<span class=\"cm-number\">2.0.21<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">stable<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">2<\/span><span class=\"cm-variable\">ubuntu0<\/span><span class=\"cm-number\">.16.04.1<\/span>).\r\n<span class=\"cm-property\">The<\/span> <span class=\"cm-variable\">following<\/span> <span class=\"cm-variable\">packages<\/span> <span class=\"cm-variable\">were<\/span> <span class=\"cm-variable\">automatically<\/span> <span class=\"cm-variable\">installed<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">are<\/span> <span class=\"cm-variable\">no<\/span> <span class=\"cm-variable\">longer<\/span> <span class=\"cm-variable\">required<\/span>:\r\n  <span class=\"cm-variable cm-error\">libllvm3<\/span><span class=\"cm-number\">.8<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n<span class=\"cm-variable\">Use<\/span> <span class=\"cm-string\">'sudo apt autoremove'<\/span> <span class=\"cm-variable\">to<\/span> <span class=\"cm-variable\">remove<\/span> <span class=\"cm-variable\">them<\/span>. <span class=\"cm-comment\">#\u8fd9\u91cc\u56e0\u4e3a\u5df2\u7ecf\u5b89\u88c5\u8fc7\u4e86,\u6240\u4ee5\u663e\u793a\u53ef\u4ee5\u4f7f\u7528autoremove\u79fb\u9664<\/span>\r\n<span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">upgraded<\/span>, <span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">newly<\/span> <span class=\"cm-variable\">installed<\/span>, <span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">to<\/span> <span class=\"cm-variable\">remove<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-number\">29<\/span> <span class=\"cm-keyword\">not<\/span> <span class=\"cm-variable\">upgraded<\/span>.<\/pre>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#2.\u5b89\u88c5memcached<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">sudo<\/span> <span class=\"cm-variable\">apt<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">get<\/span> <span class=\"cm-variable\">install<\/span> <span class=\"cm-variable\">memcached<\/span>  \r\n<span class=\"cm-variable\">Reading<\/span> <span class=\"cm-variable\">package<\/span> <span class=\"cm-variable\">lists<\/span>... <span class=\"cm-property\">Done<\/span>\r\n<span class=\"cm-variable\">Building<\/span> <span class=\"cm-variable\">dependency<\/span> <span class=\"cm-variable\">tree<\/span> \u00a0 \u00a0 \u00a0 \r\n<span class=\"cm-variable\">Reading<\/span> <span class=\"cm-variable\">state<\/span> <span class=\"cm-variable\">information<\/span>... <span class=\"cm-property\">Done<\/span>\r\n<span class=\"cm-variable\">memcached<\/span> <span class=\"cm-keyword\">is<\/span> <span class=\"cm-variable\">already<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">newest<\/span> <span class=\"cm-variable\">version<\/span> (<span class=\"cm-number\">1.4.25<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">2<\/span><span class=\"cm-variable\">ubuntu1<\/span><span class=\"cm-number\">.2<\/span>).\r\n<span class=\"cm-property\">The<\/span> <span class=\"cm-variable\">following<\/span> <span class=\"cm-variable\">packages<\/span> <span class=\"cm-variable\">were<\/span> <span class=\"cm-variable\">automatically<\/span> <span class=\"cm-variable\">installed<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">are<\/span> <span class=\"cm-variable\">no<\/span> <span class=\"cm-variable\">longer<\/span> <span class=\"cm-variable\">required<\/span>:\r\n  <span class=\"cm-variable cm-error\">libllvm3<\/span><span class=\"cm-number\">.8<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">headers<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">62<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">75<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">78<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">79<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">81<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">83<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable cm-error\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">87<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">89<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span> <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">91<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n  <span class=\"cm-variable\">linux<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">image<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">extra<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">4.4.0<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">92<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">generic<\/span>\r\n<span class=\"cm-variable\">Use<\/span> <span class=\"cm-string\">'sudo apt autoremove'<\/span> <span class=\"cm-variable\">to<\/span> <span class=\"cm-variable\">remove<\/span> <span class=\"cm-variable\">them<\/span>.\r\n<span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">upgraded<\/span>, <span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">newly<\/span> <span class=\"cm-variable\">installed<\/span>, <span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">to<\/span> <span class=\"cm-variable\">remove<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-number\">29<\/span> <span class=\"cm-keyword\">not<\/span> <span class=\"cm-variable\">upgraded<\/span>.\r\n<span class=\"cm-comment\">#\u5b89\u88c5\u5b8c\u6210\u540e\u4f7f\u7528ls -al \/usr\/bin\/mem*\u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u5b89\u88c5\u4e0a<\/span>\r\n\u200b\r\n<span class=\"cm-property\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">ls<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">al<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">usr<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-builtin\">bin<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">mem<\/span><span class=\"cm-operator\">*<\/span> \r\n<span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">rwxr<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">xr<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">x<\/span> <span class=\"cm-number\">1<\/span> <span class=\"cm-variable\">root<\/span> <span class=\"cm-variable\">root<\/span> <span class=\"cm-number\">140708<\/span> <span class=\"cm-variable\">Nov<\/span>  <span class=\"cm-number\">2<\/span>  <span class=\"cm-number\">2016<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">usr<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-builtin\">bin<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span><\/pre>\n<h5 class=\"md-end-block md-heading\">2.2 memcached\u7684\u542f\u52a8<\/h5>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#\u4f7f\u7528\u547d\u4ee4memcached\u542f\u52a8\u7f13\u5b58\u6570\u636e\u5e93<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">memcached<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">d<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">m<\/span> <span class=\"cm-number\">1024<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">u<\/span> <span class=\"cm-variable\">root<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">l<\/span> <span class=\"cm-number\">127.0.0.1<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-number\">12000<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">c<\/span> <span class=\"cm-number\">256<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">P<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span>.<span class=\"cm-property\">pid<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">ps<\/span> <span class=\"cm-variable\">aux<\/span> <span class=\"cm-operator\">|<\/span> <span class=\"cm-variable\">grep<\/span> <span class=\"cm-variable\">memcached<\/span>\r\n<span class=\"cm-variable\">memcache<\/span>  <span class=\"cm-number\">1146<\/span>  <span class=\"cm-number\">0.0<\/span>  <span class=\"cm-number\">0.1<\/span>  <span class=\"cm-number\">47712<\/span>  <span class=\"cm-number\">2020<\/span> <span class=\"cm-error\">?<\/span> \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">Ssl<\/span>  <span class=\"cm-variable\">Sep24<\/span> \u00a0 <span class=\"cm-number\">0<\/span>:<span class=\"cm-error\">0<\/span><span class=\"cm-number\">5<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">usr<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-builtin\">bin<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">m<\/span> <span class=\"cm-number\">64<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-number\">11211<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">u<\/span> <span class=\"cm-variable\">memcache<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">l<\/span> <span class=\"cm-number\">127.0.0.1<\/span>\r\n<span class=\"cm-variable\">ddc<\/span> \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">5331<\/span>  <span class=\"cm-number\">0.0<\/span>  <span class=\"cm-number\">0.1<\/span>  <span class=\"cm-number\">44232<\/span>  <span class=\"cm-number\">1592<\/span> <span class=\"cm-error\">?<\/span> \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">Ssl<\/span>  <span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span>:<span class=\"cm-number\">52<\/span> \u00a0 <span class=\"cm-number\">0<\/span>:<span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">memcached<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">d<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">m<\/span> <span class=\"cm-number\">1024<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">u<\/span> <span class=\"cm-variable\">root<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">l<\/span> <span class=\"cm-number\">127.0.0.1<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-number\">12000<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">c<\/span> <span class=\"cm-number\">256<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span>.<span class=\"cm-property\">pid<\/span>\r\n<span class=\"cm-variable\">ddc<\/span> \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">5338<\/span>  <span class=\"cm-number\">0.0<\/span>  <span class=\"cm-number\">0.0<\/span> \u00a0 <span class=\"cm-number\">5104<\/span> \u00a0 <span class=\"cm-number\">844<\/span> <span class=\"cm-variable\">pts<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-number\">0<\/span> \u00a0  <span class=\"cm-variable\">S<\/span><span class=\"cm-operator\">+<\/span> \u00a0 <span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span>:<span class=\"cm-number\">53<\/span> \u00a0 <span class=\"cm-number\">0<\/span>:<span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">grep<\/span> <span class=\"cm-operator\">--<\/span><span class=\"cm-variable\">color<\/span>=<span class=\"cm-variable\">auto<\/span> <span class=\"cm-variable\">memcached<\/span><\/pre>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#\u68c0\u67e5\u8fdb\u7a0b\u662f\u5426\u542f\u52a8\u6210\u529f.<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">ps<\/span> <span class=\"cm-variable\">aux<\/span> <span class=\"cm-operator\">|<\/span> <span class=\"cm-variable\">grep<\/span> <span class=\"cm-variable\">memcached<\/span>\r\n<span class=\"cm-variable\">memcache<\/span>  <span class=\"cm-number\">1146<\/span>  <span class=\"cm-number\">0.0<\/span>  <span class=\"cm-number\">0.1<\/span>  <span class=\"cm-number\">47712<\/span>  <span class=\"cm-number\">2020<\/span> <span class=\"cm-error\">?<\/span> \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">Ssl<\/span>  <span class=\"cm-variable\">Sep24<\/span> \u00a0 <span class=\"cm-number\">0<\/span>:<span class=\"cm-error\">0<\/span><span class=\"cm-number\">5<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">usr<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-builtin\">bin<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">m<\/span> <span class=\"cm-number\">64<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-number\">11211<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">u<\/span> <span class=\"cm-variable\">memcache<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">l<\/span> <span class=\"cm-number\">127.0.0.1<\/span>\r\n<span class=\"cm-variable\">ddc<\/span> \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">5331<\/span>  <span class=\"cm-number\">0.0<\/span>  <span class=\"cm-number\">0.1<\/span>  <span class=\"cm-number\">44232<\/span>  <span class=\"cm-number\">1592<\/span> <span class=\"cm-error\">?<\/span> \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">Ssl<\/span>  <span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span>:<span class=\"cm-number\">52<\/span> \u00a0 <span class=\"cm-number\">0<\/span>:<span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">memcached<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">d<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">m<\/span> <span class=\"cm-number\">1024<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">u<\/span> <span class=\"cm-variable\">root<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">l<\/span> <span class=\"cm-number\">127.0.0.1<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-number\">12000<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">c<\/span> <span class=\"cm-number\">256<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">p<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span>.<span class=\"cm-property\">pid<\/span>\r\n<span class=\"cm-variable\">ddc<\/span> \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">5340<\/span>  <span class=\"cm-number\">0.0<\/span>  <span class=\"cm-number\">0.0<\/span> \u00a0 <span class=\"cm-number\">5104<\/span> \u00a0 <span class=\"cm-number\">840<\/span> <span class=\"cm-variable\">pts<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-number\">0<\/span> \u00a0  <span class=\"cm-variable\">S<\/span><span class=\"cm-operator\">+<\/span> \u00a0 <span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span>:<span class=\"cm-number\">53<\/span> \u00a0 <span class=\"cm-number\">0<\/span>:<span class=\"cm-error\">0<\/span><span class=\"cm-number\">0<\/span> <span class=\"cm-variable\">grep<\/span> <span class=\"cm-operator\">--<\/span><span class=\"cm-variable\">color<\/span>=<span class=\"cm-variable\">auto<\/span> <span class=\"cm-variable\">memcached<\/span>\r\n<span class=\"cm-comment\">#\u68c0\u67e5\u662f\u5426\u76d1\u542c\u7aef\u53e3<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">netstat<\/span> <span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">tnlp<\/span>\r\n(<span class=\"cm-variable\">Not<\/span> <span class=\"cm-builtin\">all<\/span> <span class=\"cm-variable\">processes<\/span> <span class=\"cm-variable\">could<\/span> <span class=\"cm-variable\">be<\/span> <span class=\"cm-variable\">identified<\/span>, <span class=\"cm-variable\">non<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">owned<\/span> <span class=\"cm-variable\">process<\/span> <span class=\"cm-variable\">info<\/span>\r\n <span class=\"cm-variable\">will<\/span> <span class=\"cm-keyword\">not<\/span> <span class=\"cm-variable\">be<\/span> <span class=\"cm-variable\">shown<\/span>, <span class=\"cm-variable\">you<\/span> <span class=\"cm-variable\">would<\/span> <span class=\"cm-variable\">have<\/span> <span class=\"cm-variable\">to<\/span> <span class=\"cm-variable\">be<\/span> <span class=\"cm-variable\">root<\/span> <span class=\"cm-variable\">to<\/span> <span class=\"cm-variable\">see<\/span> <span class=\"cm-variable\">it<\/span> <span class=\"cm-builtin\">all<\/span>.)\r\n<span class=\"cm-variable\">Active<\/span> <span class=\"cm-variable\">Internet<\/span> <span class=\"cm-variable\">connections<\/span> (<span class=\"cm-variable\">only<\/span> <span class=\"cm-variable\">servers<\/span>)\r\n<span class=\"cm-variable\">Proto<\/span> <span class=\"cm-variable\">Recv<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">Q<\/span> <span class=\"cm-variable\">Send<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">Q<\/span> <span class=\"cm-variable\">Local<\/span> <span class=\"cm-variable\">Address<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"cm-variable\">Foreign<\/span> <span class=\"cm-variable\">Address<\/span> \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"cm-variable\">State<\/span> \u00a0 \u00a0 \u00a0 <span class=\"cm-variable\">PID<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">Program<\/span> <span class=\"cm-variable\">name<\/span> \u00a0  <span class=\"cm-variable\">tcp<\/span> \u00a0 \u00a0 \u00a0  <span class=\"cm-number\">0<\/span> \u00a0 \u00a0  <span class=\"cm-number\">0<\/span> <span class=\"cm-number\">0.0.0.0<\/span>:<span class=\"cm-number\">12530<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">0.0.0.0<\/span>:<span class=\"cm-operator\">*<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"cm-variable\">LISTEN<\/span> \u00a0 \u00a0  <span class=\"cm-number\">5466<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span> \u00a0 \u00a0  <span class=\"cm-variable\">tcp<\/span> \u00a0 \u00a0 \u00a0  <span class=\"cm-number\">0<\/span> \u00a0 \u00a0  <span class=\"cm-number\">0<\/span> <span class=\"cm-number\">127.0.0.1<\/span>:<span class=\"cm-number\">12000<\/span> \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">0.0.0.0<\/span>:<span class=\"cm-operator\">*<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"cm-variable\">LISTEN<\/span> \u00a0 \u00a0  <span class=\"cm-number\">5353<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span> \u00a0 \u00a0  <span class=\"cm-variable\">tcp6<\/span> \u00a0 \u00a0 \u00a0 <span class=\"cm-number\">0<\/span> \u00a0 \u00a0  <span class=\"cm-number\">0<\/span> :::<span class=\"cm-number\">12530<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  :::<span class=\"cm-operator\">*<\/span> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">LISTEN<\/span> \u00a0 \u00a0  <span class=\"cm-number\">5466<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">memcached<\/span> \u00a0  \r\n<span class=\"cm-comment\">#\u670d\u52a1\u6210\u529f\u542f\u52a8.<\/span><\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5b89\u88c5python-memcached<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">sudo<\/span> <span class=\"cm-variable\">pip<\/span> <span class=\"cm-variable\">install<\/span> <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span>\r\n<span class=\"cm-variable\">The<\/span> <span class=\"cm-variable\">directory<\/span> <span class=\"cm-string\">'\/home\/ddc\/.cache\/pip\/http'<\/span> <span class=\"cm-keyword\">or<\/span> <span class=\"cm-variable\">its<\/span> <span class=\"cm-variable\">parent<\/span> <span class=\"cm-variable\">directory<\/span> <span class=\"cm-keyword\">is<\/span> <span class=\"cm-keyword\">not<\/span> <span class=\"cm-variable\">owned<\/span> <span class=\"cm-variable\">by<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">current<\/span> <span class=\"cm-variable\">user<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">cache<\/span> <span class=\"cm-variable\">has<\/span> <span class=\"cm-variable\">been<\/span> <span class=\"cm-variable\">disabled<\/span>. <span class=\"cm-property\">Please<\/span> <span class=\"cm-variable\">check<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">permissions<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">owner<\/span> <span class=\"cm-variable\">of<\/span> <span class=\"cm-variable\">that<\/span> <span class=\"cm-variable\">directory<\/span>. <span class=\"cm-property\">If<\/span> <span class=\"cm-variable\">executing<\/span> <span class=\"cm-variable\">pip<\/span> <span class=\"cm-keyword\">with<\/span> <span class=\"cm-variable\">sudo<\/span>, <span class=\"cm-variable\">you<\/span> <span class=\"cm-variable\">may<\/span> <span class=\"cm-variable\">want<\/span> <span class=\"cm-variable\">sudo<\/span><span class=\"cm-string\">'s -H flag.<\/span>\r\n<span class=\"cm-variable\">The<\/span> <span class=\"cm-variable\">directory<\/span> <span class=\"cm-string\">'\/home\/ddc\/.cache\/pip'<\/span> <span class=\"cm-keyword\">or<\/span> <span class=\"cm-variable\">its<\/span> <span class=\"cm-variable\">parent<\/span> <span class=\"cm-variable\">directory<\/span> <span class=\"cm-keyword\">is<\/span> <span class=\"cm-keyword\">not<\/span> <span class=\"cm-variable\">owned<\/span> <span class=\"cm-variable\">by<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">current<\/span> <span class=\"cm-variable\">user<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">caching<\/span> <span class=\"cm-variable\">wheels<\/span> <span class=\"cm-variable\">has<\/span> <span class=\"cm-variable\">been<\/span> <span class=\"cm-variable\">disabled<\/span>. <span class=\"cm-property\">check<\/span> <span class=\"cm-variable\">the<\/span> <span class=\"cm-variable\">permissions<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">owner<\/span> <span class=\"cm-variable\">of<\/span> <span class=\"cm-variable\">that<\/span> <span class=\"cm-variable\">directory<\/span>. <span class=\"cm-property\">If<\/span> <span class=\"cm-variable\">executing<\/span> <span class=\"cm-variable\">pip<\/span> <span class=\"cm-keyword\">with<\/span> <span class=\"cm-variable\">sudo<\/span>, <span class=\"cm-variable\">you<\/span> <span class=\"cm-variable\">may<\/span> <span class=\"cm-variable\">want<\/span> <span class=\"cm-variable\">sudo<\/span><span class=\"cm-string\">'s -H flag.<\/span>\r\n<span class=\"cm-variable\">Collecting<\/span> <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span>\r\n  <span class=\"cm-variable\">Downloading<\/span> <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">1.58<\/span>.<span class=\"cm-property\">tar<\/span>.<span class=\"cm-property\">gz<\/span>\r\n<span class=\"cm-variable\">Requirement<\/span> <span class=\"cm-variable\">already<\/span> <span class=\"cm-variable\">satisfied<\/span>: <span class=\"cm-variable\">six<\/span><span class=\"cm-operator\">&gt;<\/span>=<span class=\"cm-number\">1.4.0<\/span> <span class=\"cm-keyword\">in<\/span> <span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">usr<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">lib<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">python3<\/span><span class=\"cm-operator\">\/<\/span><span class=\"cm-variable\">dist<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">packages<\/span> (<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span>)\r\n<span class=\"cm-variable\">Installing<\/span> <span class=\"cm-variable\">collected<\/span> <span class=\"cm-variable\">packages<\/span>: <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span>\r\n  <span class=\"cm-variable cm-error\">Running<\/span> <span class=\"cm-variable\">setup<\/span>.<span class=\"cm-property\">py<\/span> <span class=\"cm-variable\">install<\/span> <span class=\"cm-keyword\">for<\/span> <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span> ... <span class=\"cm-property\">done<\/span>\r\n<span class=\"cm-variable\">Successfully<\/span> <span class=\"cm-variable\">installed<\/span> <span class=\"cm-variable\">python<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-variable\">memcached<\/span><span class=\"cm-operator\">-<\/span><span class=\"cm-number\">1.58<\/span><\/pre>\n<h5 class=\"md-end-block md-heading\">2.3 python-memcached\u7528\u6cd5<\/h5>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#\u8fdb\u5165python<\/span>\r\n<span class=\"cm-variable\">ddc<\/span><span class=\"cm-meta\">@SERVER<\/span>:<span class=\"cm-operator\">~<\/span><span class=\"cm-error\">$<\/span> <span class=\"cm-variable\">python<\/span> \r\n<span class=\"cm-variable\">Python<\/span> <span class=\"cm-number\">2.7.12<\/span> (<span class=\"cm-variable\">default<\/span>, <span class=\"cm-variable\">Nov<\/span> <span class=\"cm-number\">19<\/span> <span class=\"cm-number\">2016<\/span>, <span class=\"cm-error\">0<\/span><span class=\"cm-number\">6<\/span>:<span class=\"cm-number\">48<\/span>:<span class=\"cm-number\">10<\/span>) \r\n[<span class=\"cm-variable\">GCC<\/span> <span class=\"cm-number\">5.4.0<\/span> <span class=\"cm-number\">20160609<\/span>] <span class=\"cm-variable\">on<\/span> <span class=\"cm-variable\">linux2<\/span>\r\n<span class=\"cm-variable\">Type<\/span> <span class=\"cm-string\">\"help\"<\/span>, <span class=\"cm-string\">\"copyright\"<\/span>, <span class=\"cm-string\">\"credits\"<\/span> <span class=\"cm-keyword\">or<\/span> <span class=\"cm-string\">\"license\"<\/span> <span class=\"cm-keyword\">for<\/span> <span class=\"cm-variable\">more<\/span> <span class=\"cm-variable\">information<\/span>.\r\n<span class=\"cm-operator\">&gt;&gt;&gt;<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">os<\/span> <span class=\"cm-comment\">#\u5bfc\u5165os\u6a21\u5757<\/span>\r\n<span class=\"cm-operator\">&gt;&gt;&gt;<\/span> <span class=\"cm-variable\">os<\/span>.<span class=\"cm-property\">system<\/span>(<span class=\"cm-string\">'\/usr\/bin\/memcached -p 12530 -m 64 -c 2048 -t 8 -d -u nobody'<\/span>) <span class=\"cm-comment\">#\u542f\u52a8memcached<\/span>\r\n<span class=\"cm-number\">0<\/span>\r\n<span class=\"cm-comment\">#-u \u6307\u5b9a\u7528\u6237\uff0c\u7136\u540e\u7f13\u5b58\u7684\u7a7a\u95f4\u4e3a64M\uff08-m), \u76d1\u542c(-l)\u670d\u52a1\u566810.1.41.113\u768411212\u53f7\u7aef\u53e3(-p)<\/span>\r\n<span class=\"cm-operator\">&gt;&gt;&gt;<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">memcache<\/span> <span class=\"cm-comment\">#\u5bfc\u5165memcached<\/span>\r\n<span class=\"cm-operator\">&gt;&gt;&gt;<\/span> <span class=\"cm-variable\">mc<\/span>=<span class=\"cm-variable\">memcache<\/span>.<span class=\"cm-property\">Client<\/span>([<span class=\"cm-string\">'127.0.0.1:12530'<\/span>],<span class=\"cm-variable\">debug<\/span>=<span class=\"cm-number\">0<\/span>) <span class=\"cm-comment\">#\u8fde\u63a5memcached\u5ba2\u6237\u7aef,\u4e0d\u4f7f\u7528\u8c03\u8bd5\u6a21\u5f0f<\/span>\r\n<span class=\"cm-operator\">&gt;&gt;&gt;<\/span> <span class=\"cm-variable\">mc<\/span>.<span class=\"cm-property\">set<\/span>(<span class=\"cm-string\">'\u957f\u6c99\u5357'<\/span>,<span class=\"cm-string\">'CSZ'<\/span>) <span class=\"cm-comment\">#\u5c06key,value\u5b58\u5165,\u6210\u529f\u8fd4\u56deTrue<\/span>\r\n<span class=\"cm-builtin\">True<\/span>\r\n<span class=\"cm-operator\">&gt;&gt;&gt;<\/span> <span class=\"cm-variable\">mc<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'\u957f\u6c99\u5357'<\/span>) <span class=\"cm-comment\">#\u83b7\u53d6key\u4e3a\u957f\u6c99\u5357\u7684value<\/span>\r\n<span class=\"cm-string\">'CSZ'<\/span>\r\n<span class=\"cm-comment\">#2\u3001\u6307\u5b9a\u7aef\u53e3<\/span>\r\n<span class=\"cm-variable\">mc<\/span>=<span class=\"cm-variable\">memcache<\/span>.<span class=\"cm-property\">Client<\/span>([<span class=\"cm-string\">'127.0.0.1:11211'<\/span>],<span class=\"cm-variable\">debug<\/span>=<span class=\"cm-number\">0<\/span>) <span class=\"cm-comment\">#\u6ce8\u610f\uff1a-p\u7aef\u53e3\u53f7\u8981\u548cClient\u4e2d\u7aef\u53e3\u4e00\u81f4<\/span><\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u4e3b\u8981\u7528\u6cd5<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-builtin\">set<\/span>(<span class=\"cm-variable\">key<\/span>,<span class=\"cm-variable\">val<\/span>,<span class=\"cm-variable\">time<\/span>=<span class=\"cm-number\">0<\/span>,<span class=\"cm-variable\">min_compress_len<\/span>=<span class=\"cm-number\">0<\/span>)\r\n<span class=\"cm-comment\">#\u65e0\u6761\u4ef6\u952e\u503c\u5bf9\u7684\u8bbe\u7f6e\uff0c\u5176\u4e2d\u7684time\u7528\u4e8e\u8bbe\u7f6e\u8d85\u65f6\uff0c\u5355\u4f4d\u662f\u79d2\uff0c\u800cmin_compress_len\u5219\u7528\u4e8e\u8bbe\u7f6ezlib\u538b\u7f29(\u6ce8:zlib\u662f\u63d0\u4f9b\u6570\u636e\u538b\u7f29\u7528\u7684\u51fd\u5f0f\u5e93)<\/span>\r\n<span class=\"cm-variable\">set_multi<\/span>(<span class=\"cm-variable\">mapping<\/span>,<span class=\"cm-variable\">time<\/span>=<span class=\"cm-number\">0<\/span>,<span class=\"cm-variable\">key_prefix<\/span>=<span class=\"cm-string\">''<\/span>,<span class=\"cm-variable\">min_compress_len<\/span>=<span class=\"cm-number\">0<\/span>)\r\n<span class=\"cm-variable\">add<\/span>(<span class=\"cm-variable\">key<\/span>,<span class=\"cm-variable\">val<\/span>,<span class=\"cm-variable\">time<\/span>=<span class=\"cm-number\">0<\/span>,<span class=\"cm-variable\">min_compress_len<\/span>=<span class=\"cm-number\">0<\/span>)\r\n<span class=\"cm-comment\">#\u6dfb\u52a0\u4e00\u4e2a\u952e\u503c\u5bf9\uff0c\u5185\u90e8\u8c03\u7528_set()\u65b9\u6cd5<\/span>\r\n<span class=\"cm-variable\">replace<\/span>(<span class=\"cm-variable\">key<\/span>,<span class=\"cm-variable\">val<\/span>,<span class=\"cm-variable\">time<\/span>=<span class=\"cm-number\">0<\/span>,<span class=\"cm-variable\">min_compress_len<\/span>=<span class=\"cm-number\">0<\/span>)\r\n<span class=\"cm-comment\">#\u66ff\u6362value\uff0c\u5185\u90e8\u8c03\u7528_set()\u65b9\u6cd5<\/span>\r\n<span class=\"cm-variable\">get<\/span>(<span class=\"cm-variable\">key<\/span>)\r\n<span class=\"cm-comment\">#\u6839\u636ekey\u53bb\u83b7\u53d6value\uff0c\u51fa\u9519\u8fd4\u56deNone<\/span>\r\n<span class=\"cm-variable\">get_multi<\/span>(<span class=\"cm-variable\">keys<\/span>,<span class=\"cm-variable\">key_prefix<\/span>=<span class=\"cm-string\">''<\/span>)\r\n<span class=\"cm-comment\">#\u83b7\u53d6\u591a\u4e2akey\u7684\u503c\uff0c\u8fd4\u56de\u7684\u662f\u5b57\u5178\u3002keys\u4e3akey\u7684\u5217\u8868<\/span>\r\n<span class=\"cm-variable\">delete<\/span>(<span class=\"cm-variable\">key<\/span>,<span class=\"cm-variable\">time<\/span>=<span class=\"cm-number\">0<\/span>)\r\n<span class=\"cm-comment\">#\u5220\u9664\u67d0\u4e2akey\u3002time\u7684\u5355\u4f4d\u4e3a\u79d2\uff0c\u7528\u4e8e\u786e\u4fdd\u5728\u7279\u5b9a\u65f6\u95f4\u5185\u7684set\u548cupdate\u64cd\u4f5c\u4f1a\u5931\u8d25\u3002\u5982\u679c\u8fd4\u56de\u975e0\u5219\u4ee3\u8868\u6210\u529f<\/span>\r\n<span class=\"cm-variable\">incr<\/span>(<span class=\"cm-variable\">key<\/span>,<span class=\"cm-variable\">delta<\/span>=<span class=\"cm-number\">1<\/span>)<span class=\"cm-error\">\u81ea\u589e\u53d8\u91cf\u52a0\u4e0a<\/span><span class=\"cm-variable\">delta<\/span><span class=\"cm-error\">\uff0c\u9ed8\u8ba4\u52a0<\/span><span class=\"cm-number\">1<\/span><span class=\"cm-error\">\uff0c<\/span>\r\n<span class=\"cm-variable\">decr<\/span>(<span class=\"cm-variable\">key<\/span>,<span class=\"cm-variable\">delta<\/span>=<span class=\"cm-number\">1<\/span>)<span class=\"cm-error\">\u81ea\u51cf\u53d8\u91cf\u51cf\u53bb<\/span><span class=\"cm-variable\">delta<\/span><span class=\"cm-error\">\uff0c\u9ed8\u8ba4\u51cf<\/span><span class=\"cm-number\">1<\/span><\/pre>\n<h4 class=\"md-end-block md-heading\">3.django\u4e2d\u914d\u7f6ememcached<\/h4>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5728django\u4e2d\u8981\u4f7f\u7528memcached\u975e\u5e38\u7b80\u5355,\u53ea\u9700\u8981\u5728settings\u91cc\u9762\u589e\u52a0\u4e00\u6bb5\u5982\u4e0b\u4ee3\u7801\u5373\u53ef.<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-variable\">CACHES<\/span>={\r\n \u00a0  <span class=\"cm-string\">'default'<\/span>:{\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-string\">'BACKEND'<\/span>:<span class=\"cm-string\">'django.core.cache.backends.memcached.MemcachedCache'<\/span>,\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-string\">'LOCATION'<\/span>:[\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-string\">'127.0.0.1:11211'<\/span>,\r\n \u00a0 \u00a0 \u00a0  ],\r\n \u00a0  }\r\n}<\/pre>\n<h4 class=\"md-end-block md-heading\">4.\u9a8c\u8bc1\u7801\u7684\u751f\u6210<\/h4>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u901a\u8fc7\u5bf9\u767b\u9646\u754c\u9762\u7684\u5206\u6790,\u53ef\u4ee5\u770b\u5230,\u9a8c\u8bc1\u7801\u5176\u5b9e\u662fimg\u6807\u7b7e\u8bf7\u6c42<span class=\"\"><a spellcheck=\"false\" href=\"http:\/\/127.0.0.1:9021\/comm\/captcha\/\">\/comm\/captcha\/<\/a><\/span>\u5f97\u5230\u7684\u4e00\u5f20\u663e\u793a\u7684\u56fe\u7247.<\/h5>\n<\/blockquote>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u9a8c\u8bc1\u7801\u7684\u5b9e\u73b0\u662f\u4f7f\u7528\u4e86python\u7684\u5185\u7f6e\u5e93,\u5b58\u653e\u5728utils.captcha\u76ee\u5f55\u4e0bcaptcha.py<\/h5>\n<\/li>\n<\/ul>\n<p><span class=\"md-line md-end-block\"><span class=\"md-image md-img-loaded\" contenteditable=\"false\" data-src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf6.png\"><img style=\"box-sizing: border-box; border-width: 0px 4px 0px 2px; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; border-color: initial transparent initial transparent; border-style: initial solid initial solid;\" src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf6.png\" \/><\/span><\/span><\/p>\n<p><span class=\"md-line md-end-block\">\u76ee\u5f55\u7ed3\u6784<\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"md-image md-img-loaded\" contenteditable=\"false\" data-src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf7.png\"><img style=\"box-sizing: border-box; border-width: 0px 4px 0px 2px; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; border-color: initial transparent initial transparent; border-style: initial solid initial solid;\" src=\"http:\/\/www.yueguangzu.net\/wp-content\/uploads\/2017\/09\/namecsrf7.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5176\u4e2d\u7684ttf\u5c31\u662f\u5b57\u4f53\u6587\u4ef6\u5e93,\u4e5f\u53ef\u4ee5\u5728c:\/windows\/fonts\/\u76ee\u5f55\u62f7\u8d1d\u8fdb\u6765.<\/h5>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">@classmethod\u4f7f\u7528\u4e86\u7c7b\u65b9\u6cd5,\u5c06\u4e00\u4e9b\u53d8\u91cf\u8fdb\u884c\u4e86\u516c\u7528<\/h5>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u9a8c\u8bc1\u7801\u751f\u6210\u4e3b\u8981\u770b<span spellcheck=\"false\"><code>gene_code<\/code><\/span>\u65b9\u6cd5,\u9996\u5148\u83b7\u53d6cls.size\u7684\u5bbd\u9ad8\u5ea6<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>Image.new('RGBA',(width,height),cls.bgcolor)<\/code><\/span> \u751f\u6210\u56fe\u7247\u5bf9\u8c61image<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>ImageFont.truetype(cls.font_path,cls.fontsize)<\/code><\/span>\u83b7\u53d6\u751f\u6210\u9a8c\u8bc1\u7801\u7684\u5b57\u4f53<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>ImageDraw.Draw(image)<\/code><\/span>\u521b\u5efa\u753b\u7b14\u5bf9\u8c61draw<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>cls.__gene_text()<\/code><\/span>\u751f\u6210\u5b57\u4f53\u7684\u5b57\u7b26\u4e32text<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4ecetext\u4e2d<span spellcheck=\"false\"><code>font_width, font_height = font.getsize(text)<\/code><\/span>\u83b7\u5f97\u5b57\u4f53\u7684\u5b9e\u9645\u957f\u5bbd\u9ad8.<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>draw.text(((width - font_width) \/ 2, (height - font_height) \/ 8),text,font= font,fill=cls.fontcolor)<\/code><\/span>\u628a\u5b57\u7b26\u586b\u5145\u5230\u56fe\u7247\u4e2d.\u8fd9\u91cc\u4f7f\u7528\u753b\u5e03\u7684\u5bbd\u5ea6&#8211;\u5b57\u4f53\u7684\u5bbd\u5e26,\u5f97\u5230\u7684\u8ddd\u79bb\u9664\u4ee52,\u662f\u4e3a\u4e86\u8ba9\u5b57\u4f53\u5c45\u4e2d\u597d\u770b,\u4e0d\u77e5\u4e49\u6ea2\u51fa.<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4e5f\u53ef\u4ee5\u4f7f\u7528<span spellcheck=\"false\"><code>cls.__gene_line(draw,width,height)<\/code><\/span>\u548c<span spellcheck=\"false\"><code>cls.__gene_points(draw,10,width,height)<\/code><\/span>\u8fd9\u4e24\u79cd\u79c1\u6709\u65b9\u6cd5\u4ea7\u751f\u5e72\u6270\u7ebf\u548c\u5e72\u6270\u70b9.<\/h5>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u968f\u540e\u5c06\u751f\u6210\u7684\u9a8c\u8bc1\u7801,\u8f6c\u6362\u4e3a\u5c0f\u5199\u5b58\u653e\u7f13\u5b58\u6570\u636e\u5e93,\u5b58\u653e\u65f6\u95f4120\u79d2.<span spellcheck=\"false\"><code>cache.set(text.lower(),text.lower(),120)<\/code><\/span><\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#captcha.py<\/span>\r\n<span class=\"cm-comment\"># -*- coding: utf-8 -*-<\/span>\r\n<span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">random<\/span>\r\n<span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">string<\/span>\r\n<span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">sys<\/span>\r\n<span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">math<\/span>\r\n<span class=\"cm-comment\"># pip install Pillow<\/span>\r\n<span class=\"cm-comment\"># Image:\u662f\u4e00\u4e2a\u753b\u677f(context),ImageDraw:\u662f\u4e00\u4e2a\u753b\u7b14, ImageFont:\u753b\u7b14\u7684\u5b57\u4f53<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">PIL<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">Image<\/span>,<span class=\"cm-variable\">ImageDraw<\/span>,<span class=\"cm-variable\">ImageFont<\/span>,<span class=\"cm-variable\">ImageFilter<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span>.<span class=\"cm-property\">conf<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">settings<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span>.<span class=\"cm-property\">core<\/span>.<span class=\"cm-property\">cache<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">cache<\/span>\r\n\u200b\r\n<span class=\"cm-comment\"># Captcha\u9a8c\u8bc1\u7801<\/span>\r\n\u200b\r\n<span class=\"cm-keyword\">class<\/span> <span class=\"cm-def\">Captcha<\/span>(<span class=\"cm-builtin\">object<\/span>):\r\n \u00a0  <span class=\"cm-comment\"># \u628a\u4e00\u4e9b\u5e38\u91cf\u62bd\u53d6\u6210\u7c7b\u5c5e\u6027<\/span>\r\n \u00a0  <span class=\"cm-comment\">#\u5b57\u4f53\u7684\u4f4d\u7f6e<\/span>\r\n<span class=\"cm-comment\">#font_path = 'verdana.ttf'<\/span>\r\n \u00a0  <span class=\"cm-variable\">font_path<\/span> = <span class=\"cm-string\">'utils\/captcha\/verdana.ttf'<\/span>\r\n \u00a0  <span class=\"cm-comment\">#\u751f\u6210\u51e0\u4f4d\u6570\u7684\u9a8c\u8bc1\u7801<\/span>\r\n \u00a0  <span class=\"cm-variable\">number<\/span> = <span class=\"cm-number\">4<\/span>\r\n \u00a0  <span class=\"cm-comment\">#\u751f\u6210\u9a8c\u8bc1\u7801\u56fe\u7247\u7684\u5bbd\u5ea6\u548c\u9ad8\u5ea6<\/span>\r\n \u00a0  <span class=\"cm-variable\">size<\/span> = (<span class=\"cm-number\">100<\/span>,<span class=\"cm-number\">30<\/span>)\r\n \u00a0  <span class=\"cm-comment\">#\u80cc\u666f\u989c\u8272\uff0c\u9ed8\u8ba4\u4e3a\u767d\u8272 RGB(Re,Green,Blue)<\/span>\r\n \u00a0  <span class=\"cm-variable\">bgcolor<\/span> = (<span class=\"cm-number\">255<\/span>,<span class=\"cm-number\">255<\/span>,<span class=\"cm-number\">255<\/span>)\r\n \u00a0  <span class=\"cm-comment\">#\u5b57\u4f53\u989c\u8272\uff0c\u9ed8\u8ba4\u4e3a\u84dd\u8272<\/span>\r\n \u00a0  <span class=\"cm-variable\">fontcolor<\/span> = (<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">100<\/span>),<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">100<\/span>),<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">100<\/span>))\r\n \u00a0  <span class=\"cm-comment\"># \u9a8c\u8bc1\u7801\u5b57\u4f53\u5927\u5c0f<\/span>\r\n \u00a0  <span class=\"cm-variable\">fontsize<\/span> = <span class=\"cm-number\">25<\/span>\r\n \u00a0  <span class=\"cm-comment\">#\u5e72\u6270\u7ebf\u989c\u8272\u3002\u9ed8\u8ba4\u4e3a\u7ea2\u8272<\/span>\r\n \u00a0  <span class=\"cm-variable\">linecolor<\/span> = (<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">255<\/span>),<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">255<\/span>),<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">255<\/span>))\r\n \u00a0  <span class=\"cm-comment\"># \u662f\u5426\u8981\u52a0\u5165\u5e72\u6270\u7ebf<\/span>\r\n \u00a0  <span class=\"cm-variable\">draw_line<\/span> = <span class=\"cm-builtin\">True<\/span>\r\n \u00a0  <span class=\"cm-comment\"># \u662f\u5426\u7ed8\u5236\u5e72\u6270\u70b9<\/span>\r\n \u00a0  <span class=\"cm-variable\">draw_point<\/span> = <span class=\"cm-builtin\">True<\/span>\r\n \u00a0  <span class=\"cm-comment\"># \u52a0\u5165\u5e72\u6270\u7ebf\u7684\u6761\u6570<\/span>\r\n \u00a0  <span class=\"cm-variable\">line_number<\/span> = <span class=\"cm-number\">2<\/span>\r\n\u200b\r\n\u200b\r\n \u00a0  <span class=\"cm-comment\">#\u7528\u6765\u968f\u673a\u751f\u6210\u4e00\u4e2a\u5b57\u7b26\u4e32(\u5305\u62ec\u82f1\u6587\u548c\u6570\u5b57)<\/span>\r\n \u00a0  <span class=\"cm-comment\"># \u5b9a\u4e49\u6210\u7c7b\u65b9\u6cd5,\u7136\u540e\u662f\u79c1\u6709\u7684,\u5bf9\u8c61\u5728\u5916\u9762\u4e0d\u80fd\u76f4\u63a5\u8c03\u7528<\/span>\r\n \u00a0  <span class=\"cm-meta\">@classmethod<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">__gene_text<\/span>(<span class=\"cm-variable-2\">cls<\/span>):\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">source<\/span> = <span class=\"cm-builtin\">list<\/span>(<span class=\"cm-variable\">string<\/span>.<span class=\"cm-property\">letters<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">for<\/span> <span class=\"cm-variable\">index<\/span> <span class=\"cm-keyword\">in<\/span> <span class=\"cm-builtin\">range<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-number\">10<\/span>):\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">source<\/span>.<span class=\"cm-property\">append<\/span>(<span class=\"cm-builtin\">str<\/span>(<span class=\"cm-variable\">index<\/span>))\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-string\">''<\/span>.<span class=\"cm-property\">join<\/span>(<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">sample<\/span>(<span class=\"cm-variable\">source<\/span>,<span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">number<\/span>))<span class=\"cm-comment\">#number\u662f\u751f\u6210\u9a8c\u8bc1\u7801\u7684\u4f4d\u6570<\/span>\r\n\u200b\r\n \u00a0  <span class=\"cm-comment\">#\u7528\u6765\u7ed8\u5236\u5e72\u6270\u7ebf<\/span>\r\n \u00a0  <span class=\"cm-meta\">@classmethod<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">__gene_line<\/span>(<span class=\"cm-variable-2\">cls<\/span>,<span class=\"cm-variable\">draw<\/span>,<span class=\"cm-variable\">width<\/span>,<span class=\"cm-variable\">height<\/span>):\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">begin<\/span> = (<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>, <span class=\"cm-variable\">width<\/span>), <span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>, <span class=\"cm-variable\">height<\/span>))\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">end<\/span> = (<span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>, <span class=\"cm-variable\">width<\/span>), <span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>, <span class=\"cm-variable\">height<\/span>))\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">draw<\/span>.<span class=\"cm-property\">line<\/span>([<span class=\"cm-variable\">begin<\/span>, <span class=\"cm-variable\">end<\/span>], <span class=\"cm-variable\">fill<\/span> = <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">linecolor<\/span>)\r\n\u200b\r\n \u00a0  <span class=\"cm-comment\"># \u7528\u6765\u7ed8\u5236\u5e72\u6270\u70b9<\/span>\r\n \u00a0  <span class=\"cm-meta\">@classmethod<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">__gene_points<\/span>(<span class=\"cm-variable-2\">cls<\/span>,<span class=\"cm-variable\">draw<\/span>,<span class=\"cm-variable\">point_chance<\/span>,<span class=\"cm-variable\">width<\/span>,<span class=\"cm-variable\">height<\/span>):\r\n \u00a0 \u00a0  <span class=\"cm-variable cm-error\">chance<\/span> = <span class=\"cm-builtin\">min<\/span>(<span class=\"cm-number\">100<\/span>, <span class=\"cm-builtin\">max<\/span>(<span class=\"cm-number\">0<\/span>, <span class=\"cm-builtin\">int<\/span>(<span class=\"cm-variable\">point_chance<\/span>))) <span class=\"cm-comment\"># \u5927\u5c0f\u9650\u5236\u5728[0, 100]<\/span>\r\n \u00a0 \u00a0  <span class=\"cm-keyword\">for<\/span> <span class=\"cm-variable\">w<\/span> <span class=\"cm-keyword\">in<\/span> <span class=\"cm-builtin\">xrange<\/span>(<span class=\"cm-variable\">width<\/span>):\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">for<\/span> <span class=\"cm-variable\">h<\/span> <span class=\"cm-keyword\">in<\/span> <span class=\"cm-builtin\">xrange<\/span>(<span class=\"cm-variable\">height<\/span>):\r\n \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable cm-error\">tmp<\/span> = <span class=\"cm-variable\">random<\/span>.<span class=\"cm-property\">randint<\/span>(<span class=\"cm-number\">0<\/span>, <span class=\"cm-number\">100<\/span>)\r\n \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">tmp<\/span> <span class=\"cm-operator\">&gt;<\/span> <span class=\"cm-number\">100<\/span> <span class=\"cm-operator\">-<\/span> <span class=\"cm-variable\">chance<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">draw<\/span>.<span class=\"cm-property\">point<\/span>((<span class=\"cm-variable\">w<\/span>, <span class=\"cm-variable\">h<\/span>), <span class=\"cm-variable\">fill<\/span>=(<span class=\"cm-number\">0<\/span>, <span class=\"cm-number\">0<\/span>, <span class=\"cm-number\">0<\/span>))\r\n\u200b\r\n \u00a0  <span class=\"cm-comment\">#\u751f\u6210\u9a8c\u8bc1\u7801<\/span>\r\n \u00a0  <span class=\"cm-meta\">@classmethod<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">gene_code<\/span>(<span class=\"cm-variable-2\">cls<\/span>): <span class=\"cm-comment\">#\u5bf9\u8c61\u7684\u51fd\u6570\u65b9\u6cd5\u7528self,\u7c7b\u7684\u65b9\u6cd5\u7528cls<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">width<\/span>,<span class=\"cm-variable\">height<\/span> = <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">size<\/span> <span class=\"cm-comment\">#\u5bbd\u548c\u9ad8<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">image<\/span> = <span class=\"cm-variable\">Image<\/span>.<span class=\"cm-property\">new<\/span>(<span class=\"cm-string\">'RGBA'<\/span>,(<span class=\"cm-variable\">width<\/span>,<span class=\"cm-variable\">height<\/span>),<span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">bgcolor<\/span>) <span class=\"cm-comment\">#\u521b\u5efa\u56fe\u7247<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">font<\/span> = <span class=\"cm-variable\">ImageFont<\/span>.<span class=\"cm-property\">truetype<\/span>(<span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">font_path<\/span>,<span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">fontsize<\/span>) <span class=\"cm-comment\">#\u9a8c\u8bc1\u7801\u7684\u5b57\u4f53<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">draw<\/span> = <span class=\"cm-variable\">ImageDraw<\/span>.<span class=\"cm-property\">Draw<\/span>(<span class=\"cm-variable\">image<\/span>)  <span class=\"cm-comment\">#\u521b\u5efa\u753b\u7b14<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">text<\/span> = <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">__gene_text<\/span>() <span class=\"cm-comment\">#\u751f\u6210\u5b57\u7b26\u4e32<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">'text='<\/span>,<span class=\"cm-variable\">text<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">font_width<\/span>, <span class=\"cm-variable\">font_height<\/span> = <span class=\"cm-variable\">font<\/span>.<span class=\"cm-property\">getsize<\/span>(<span class=\"cm-variable\">text<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">draw<\/span>.<span class=\"cm-property\">text<\/span>(((<span class=\"cm-variable\">width<\/span> <span class=\"cm-operator\">-<\/span> <span class=\"cm-variable\">font_width<\/span>) <span class=\"cm-operator\">\/<\/span> <span class=\"cm-number\">2<\/span>, (<span class=\"cm-variable\">height<\/span> <span class=\"cm-operator\">-<\/span> <span class=\"cm-variable\">font_height<\/span>) <span class=\"cm-operator\">\/<\/span> <span class=\"cm-number\">8<\/span>),<span class=\"cm-variable\">text<\/span>,<span class=\"cm-variable\">font<\/span>= <span class=\"cm-variable\">font<\/span>,<span class=\"cm-variable\">fill<\/span>=<span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">fontcolor<\/span>) <span class=\"cm-comment\">#\u586b\u5145\u5b57\u7b26\u4e32<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\"># \u5982\u679c\u9700\u8981\u7ed8\u5236\u5e72\u6270\u7ebf<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">draw_line<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\"># \u904d\u5386line_number\u6b21,\u5c31\u662f\u753bline_number\u6839\u7ebf\u6761<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">for<\/span> <span class=\"cm-variable\">x<\/span> <span class=\"cm-keyword\">in<\/span> <span class=\"cm-builtin\">xrange<\/span>(<span class=\"cm-number\">0<\/span>,<span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">line_number<\/span>):\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">__gene_line<\/span>(<span class=\"cm-variable\">draw<\/span>,<span class=\"cm-variable\">width<\/span>,<span class=\"cm-variable\">height<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\"># \u5982\u679c\u9700\u8981\u7ed8\u5236\u566a\u70b9<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">draw_point<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable-2\">cls<\/span>.<span class=\"cm-property\">__gene_points<\/span>(<span class=\"cm-variable\">draw<\/span>,<span class=\"cm-number\">10<\/span>,<span class=\"cm-variable\">width<\/span>,<span class=\"cm-variable\">height<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\"># \u4fdd\u5b58\u5230\u7f13\u5b58\u4e2d\uff0c\u8fc7\u671f\u65f6\u95f4\u4e3a2\u5206\u949f<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">'text.lower()='<\/span>, <span class=\"cm-variable\">text<\/span>.<span class=\"cm-property\">lower<\/span>()\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">cache<\/span>.<span class=\"cm-property\">set<\/span>(<span class=\"cm-variable\">text<\/span>.<span class=\"cm-property\">lower<\/span>(),<span class=\"cm-variable\">text<\/span>.<span class=\"cm-property\">lower<\/span>(),<span class=\"cm-number\">120<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\">#\u4fdd\u5b58\u56fe\u7247\u5230\u7f13\u5b58\u6570\u636e\u5e93\uff0c\u5e76\u8bbe\u7f6e\u6709\u6548\u671f,\u6709\u6548\u671f\u5355\u4f4d\u662f\u79d2<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\">#set(key,value,time)<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\">#cache.set(text,text,120)<\/span>\r\n<span class=\"cm-comment\">#cache.set(text,text,120)<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> (<span class=\"cm-variable\">text<\/span>,<span class=\"cm-variable\">image<\/span>)\r\n\u200b\r\n \u00a0  <span class=\"cm-meta\">@classmethod<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">check_captcha<\/span>(<span class=\"cm-variable-2\">cls<\/span>,<span class=\"cm-variable\">captcha<\/span>):\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">captcha_cache<\/span> = <span class=\"cm-variable\">cache<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-variable\">captcha<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">'captcha_cache='<\/span>,<span class=\"cm-variable\">captcha_cache<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">'captcha='<\/span>, <span class=\"cm-variable\">captcha<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">captcha_cache<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">captcha_cache<\/span> == <span class=\"cm-variable\">captcha<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\"># \u5220\u9664\u7f13\u5b58<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">cache<\/span>.<span class=\"cm-property\">delete<\/span>(<span class=\"cm-variable\">captcha<\/span>)\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">u'captcha\u4e0e\u7f13\u5b58\u4e00\u81f4'<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-builtin\">True<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">else<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-builtin\">False<\/span>\r\n<\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5f53\u7528\u6237\u8fdb\u5165\u767b\u9646\u754c\u9762\u540e,img\u6807\u7b7e\u4f1a\u81ea\u52a8get\u7684 \/comm\/captcha\/\u8def\u7531<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"javascript\" contenteditable=\"false\"><span class=\"cm-operator\">&lt;<\/span><span class=\"cm-variable\">span<\/span> <span class=\"cm-keyword\">class<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">\"input-group-addon\"<\/span><span class=\"cm-operator\">&gt;<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-operator\">&lt;<\/span><span class=\"cm-variable\">img<\/span> <span class=\"cm-variable\">src<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">\"\/comm\/captcha\/\"<\/span> <span class=\"cm-variable\">alt<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">\"\u70b9\u51fb\u5237\u65b0\u9a8c\u8bc1\u7801\"<\/span> <span class=\"cm-keyword\">class<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">\"captcha-img\"<\/span><span class=\"cm-operator\">&gt;<\/span>\r\n<span class=\"cm-operator\">&lt;<\/span><span class=\"cm-string-2\">\/span&gt;<\/span><\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u6620\u5c04\u5230\u8def\u7531<span spellcheck=\"false\"><code>common_captcha<\/code><\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"javascript\" contenteditable=\"false\"><span class=\"cm-variable\">urlpatterns<\/span> <span class=\"cm-operator\">=<\/span> [\r\n \u00a0  <span class=\"cm-variable\">url<\/span>(<span class=\"cm-variable\">r<\/span><span class=\"cm-string\">'^captcha\/'<\/span>,<span class=\"cm-variable\">views<\/span>.<span class=\"cm-variable\">captcha<\/span>,<span class=\"cm-variable\">name<\/span><span class=\"cm-operator\">=<\/span><span class=\"cm-string\">'common_captcha'<\/span>),\r\n]<\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5bf9\u5e94\u7684\u89c6\u56fe\u51fd\u6570<span spellcheck=\"false\"><code>captcha<\/code><\/span><\/h5>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u9996\u5148\u751f\u6210text\u548cimage,\u8c03\u7528Captcaha\u7684\u6a21\u5757<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u901a\u8fc7StringIO()\u65b9\u6cd5\u751f\u6210\u7ba1\u9053out<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u628a\u56fe\u50cf\u4fe1\u606fsave\u5230\u7ba1\u9053\u91cc<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>out.seek(0)<\/code><\/span><\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">cStringIO<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">StringIO<\/span>\r\n<span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">captcha<\/span>(<span class=\"cm-variable\">request<\/span>):\r\n    <span class=\"cm-comment\">#\u751f\u6210\u9a8c\u8bc1\u7801\u5e76\u53d1\u9001\u5230\u6d4f\u89c8\u5668<\/span>\r\n    <span class=\"cm-comment\">#1,\u751f\u6210\u9a8c\u8bc1\u7801\u6587\u672c\u548c\u56fe\u7247<\/span>\r\n    <span class=\"cm-variable\">text<\/span>,<span class=\"cm-variable\">image<\/span> = <span class=\"cm-variable\">Captcha<\/span>.<span class=\"cm-property\">gene_code<\/span>()\r\n    <span class=\"cm-comment\"># image.save('text.png','png') # I\/0<\/span>\r\n\u200b\r\n    <span class=\"cm-comment\">#2,\u901a\u8fc7StringIO(\u7c7b\u4f3cramdisk)\u53d1\u9001\u5230\u524d\u7aef<\/span>\r\n    <span class=\"cm-comment\">#\u9700\u8981\u901a\u8fc7StringIO\u8fd9\u4e2a\u7c7b\u6765\u628a\u56fe\u7247\u5f53\u6210\u6d41\u7684\u5f62\u5f0f\u8fd4\u56de\u7ed9\u5ba2\u6237\u7aef<\/span>\r\n    <span class=\"cm-variable\">out<\/span> = <span class=\"cm-variable\">StringIO<\/span>() <span class=\"cm-comment\">#\u83b7\u53d6\"\u7ba1\u9053\"<\/span>\r\n    <span class=\"cm-variable\">image<\/span>.<span class=\"cm-property\">save<\/span>(<span class=\"cm-variable\">out<\/span>,<span class=\"cm-string\">'png'<\/span>) <span class=\"cm-comment\">#\u628a\u56fe\u7247\u4fdd\u5b58\u5230\u7ba1\u9053\u4e2d<\/span>\r\n    <span class=\"cm-variable\">out<\/span>.<span class=\"cm-property\">seek<\/span>(<span class=\"cm-number\">0<\/span>) <span class=\"cm-comment\">#\u79fb\u52a8\u6587\u4ef6\u6307\u9488\u5230\\\u7b2c0\u4e2a\u4f4d\u7f6e<\/span>\r\n    <span class=\"cm-variable\">response<\/span> = <span class=\"cm-variable\">HttpResponse<\/span>(<span class=\"cm-variable\">content_type<\/span>=<span class=\"cm-string\">'image\/png'<\/span>)\r\n    <span class=\"cm-variable\">response<\/span>.<span class=\"cm-property\">write<\/span>(<span class=\"cm-variable\">out<\/span>.<span class=\"cm-property\">read<\/span>())\r\n    <span class=\"cm-comment\"># \u628a\u9a8c\u8bc1\u7801\u6570\u636e\u5199\u5165\u5230\u7f13\u5b58\u4e2d,\u8fc7\u671f\u65f6\u95f4\u662f2\u5206\u949f<\/span>\r\n    <span class=\"cm-comment\"># key = text.lower()<\/span>\r\n    <span class=\"cm-comment\"># value = key<\/span>\r\n    <span class=\"cm-comment\"># cache.set(key,value,120)<\/span>\r\n    <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">response<\/span><\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u63d0\u4ea4\u56de\u6765\u7684\u68c0\u67e5\u903b\u8f91<\/h5>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u4ececachea\u603b\u83b7\u53d6cachede\u5e26captcha\u90e8\u5206\u5185\u5bb9\u4e86<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u6bd4\u8f83\u7f13\u5b58\u4e2d\u7684\u6570\u503c\u662f\u5426\u76f8\u7b49<\/h5>\n<\/li>\n<li>\n<h5 class=\"md-end-block md-heading\">\u5982\u679c\u76f8\u7b49\u7684\u8bdd,\u7686\u53ef\u4ee5\u5220\u9664\u7f13\u5b58\u4e2d\u7684\u6570\u636e\u5e76\u8fd4\u56detrue\u7ed9\u524d\u53f0.<\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"> \u00a0  <span class=\"cm-meta\">@classmethod<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">check_captcha<\/span>(<span class=\"cm-variable-2\">cls<\/span>,<span class=\"cm-variable\">captcha<\/span>):\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">captcha_cache<\/span> = <span class=\"cm-variable\">cache<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-variable\">captcha<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">'captcha_cache='<\/span>,<span class=\"cm-variable\">captcha_cache<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">'captcha='<\/span>, <span class=\"cm-variable\">captcha<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">captcha_cache<\/span> <span class=\"cm-keyword\">and<\/span> <span class=\"cm-variable\">captcha_cache<\/span> == <span class=\"cm-variable\">captcha<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\"># \u5220\u9664\u7f13\u5b58<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">cache<\/span>.<span class=\"cm-property\">delete<\/span>(<span class=\"cm-variable\">captcha<\/span>)\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-string\">u'captcha\u4e0e\u7f13\u5b58\u4e00\u81f4'<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-builtin\">True<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">else<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-builtin\">False<\/span><\/pre>\n<h2 class=\"md-end-block md-heading\">\u603b\u7ed3<\/h2>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">jQuery\u53d1\u9001csrf_token\u662f\u8fdb\u884c\u8868\u5355\u8de8\u57df\u5b89\u5168\u8bf7\u6c42\u7684\u91cd\u8981\u4fdd\u969c\u73af\u8282.\u800cmemcached\u7f13\u5b58\u7684\u51fa\u73b0,\u51cf\u8f7b\u4e86\u6570\u636e\u5e93\u9891\u7e41\u7684io\u8bfb\u5199.Python\u63d0\u4f9b\u4e86\u4e00\u79cd\u751f\u6210\u9a8c\u8bc1\u7801\u7684\u65b9\u5f0f,\u5efa\u8bae\u4f7f\u7528.<\/span><\/h5>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>1.\u4f7f\u7528Ajax\u53d1\u9001csrf_token \u5728\u4f7f\u7528ajax\u63d0\u4ea4\u8868\u5355\u7684\u65f6\u5019,\u662f\u4e0d\u4f1a\u4e3b\u52a8\u5c06csrf_token\u63d0\u4ea4\u7684,django\u4f1a\u8ba4\u4e3a\u662f\u8de8\u57df\u8bf7\u6c42\u800c\u62d2\u7edd.\u6240\u4ee5\u9700\u8981\u624b\u5de5\u83b7\u53d6csrf_token\u7684\u503c,\u5e76\u5c01\u88c5\u5728ajax\u7684beforesend,\u4f5c\u4e3a\u63d0\u4ea4\u6570 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[54],"tags":[81,84,85,75],"_links":{"self":[{"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts\/1537"}],"collection":[{"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1537"}],"version-history":[{"count":3,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts\/1537\/revisions"}],"predecessor-version":[{"id":1570,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts\/1537\/revisions\/1570"}],"wp:attachment":[{"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1537"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}