{"id":1385,"date":"2017-09-09T12:16:55","date_gmt":"2017-09-09T04:16:55","guid":{"rendered":"http:\/\/www.yueguangzu.net\/?p=1385"},"modified":"2017-09-09T12:45:32","modified_gmt":"2017-09-09T04:45:32","slug":"django%e7%b3%bb%e5%88%97django%e8%a1%a8%e5%8d%95%e6%b3%a8%e5%86%8c%e9%aa%8c%e8%af%81%e9%94%99%e8%af%af%e4%bf%a1%e6%81%af%e5%92%8c%e8%87%aa%e5%ae%9a%e4%b9%89%e9%aa%8c%e8%af%81","status":"publish","type":"post","link":"http:\/\/www.yueguangzu.net\/?p=1385","title":{"rendered":"[Django\u7cfb\u5217]11.Django\u8868\u5355\u6ce8\u518c\u9a8c\u8bc1,\u9519\u8bef\u4fe1\u606f\u548c\u81ea\u5b9a\u4e49\u9a8c\u8bc1"},"content":{"rendered":"<h5 class=\"md-end-block md-heading md-focus\"><span class=\"md-expand\">Django\u63d0\u4f9b\u4e86\u4e00\u79cd\u52a8\u6001\u8fc7\u7a0b,\u5148\u4ece\u6a21\u677f\u91cc\u9762\u5bf9\u53d8\u91cf\u8d4b\u503c,\u7136\u540e\u6e32\u67d3\u6210\u4e3ahtml\u6807\u7b7e,\u4e0b\u9762\u5c06\u901a\u8fc7\u4f8b\u5b50\u8fdb\u884c\u6f14\u793a.<\/span><\/h5>\n<h5 class=\"md-end-block md-heading\">1.\u5c06\u6a21\u677f\u7684\u6807\u7b7e\u66ff\u6362\u6210django\u7684form\u8868\u5355<\/h5>\n<blockquote>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li class=\"\">\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u53ea\u6e32\u67d3html\u4e2dform\u4fbf\u7b7e\u5176\u4e2d\u5143\u7d20\u7684\u4e00\u90e8\u5206,\u4e0d\u6e32\u67d3\u63d0\u4ea4\u7b49\u6807\u7b7e.<\/span><\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"html\" contenteditable=\"false\">#login.html\r\n<span class=\"cm-meta\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">html<\/span> <span class=\"cm-attribute\">lang<\/span>=<span class=\"cm-string\">\"en\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">head<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">meta<\/span> <span class=\"cm-attribute\">charset<\/span>=<span class=\"cm-string\">\"UTF-8\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">title<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\u767b\u5f55\u9875\u9762<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">title<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">head<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">body<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">center<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">form<\/span> <span class=\"cm-attribute\">method<\/span>=<span class=\"cm-string\">\"post\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  {% csrf_token %}\r\n{# \u00a0  \u7528\u6237\u540d:<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">input<\/span> <span class=\"cm-attribute\">type<\/span>=<span class=\"cm-string\">\"text\"<\/span> <span class=\"cm-attribute\">name<\/span>=<span class=\"cm-string\">\"username\"<\/span> <span class=\"cm-attribute\">placeholder<\/span>=<span class=\"cm-string\">\"\u8bf7\u8f93\u5165\u7528\u6237\u540d\"<\/span><span class=\"cm-tag cm-bracket\">\/&gt;&lt;\/<\/span><span class=\"cm-tag cm-error\">br<\/span><span class=\"cm-tag cm-bracket cm-error\">&gt;<\/span> #} \u00a0 \u00a0  #\u6ce8\u91ca\u539f\u6765\u7684\u4ee3\u7801\r\n{# \u00a0  \u5bc6\u7801:  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">input<\/span> <span class=\"cm-attribute\">type<\/span>=<span class=\"cm-string\">\"password\"<\/span> <span class=\"cm-attribute\">name<\/span>=<span class=\"cm-string\">\"password\"<\/span> <span class=\"cm-attribute\">placeholder<\/span>=<span class=\"cm-string\">\"\u8bf7\u8f93\u5165\u5bc6\u7801\"<\/span><span class=\"cm-tag cm-bracket\">\/&gt;&lt;\/<\/span><span class=\"cm-tag cm-error\">br<\/span><span class=\"cm-tag cm-bracket cm-error\">&gt;<\/span> #}     #\u6ce8\u91ca\u539f\u6765\u7684\u4ee3\u7801\r\n\u200b\r\n \u00a0  {{ form_t }} \u00a0 \u00a0  #\u66ff\u6362django\u7684form\u8868\u5355\r\n\u200b\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">input<\/span> <span class=\"cm-attribute\">type<\/span>=<span class=\"cm-string\">\"submit\"<\/span> <span class=\"cm-attribute\">value<\/span>=<span class=\"cm-string\">\"\u63d0\u4ea4\"<\/span><span class=\"cm-tag cm-bracket\">\/&gt;<\/span>\r\n\u200b\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag cm-error\">form<\/span><span class=\"cm-tag cm-bracket cm-error\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag cm-error\">center<\/span><span class=\"cm-tag cm-bracket cm-error\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag cm-error\">body<\/span><span class=\"cm-tag cm-bracket cm-error\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag cm-error\">html<\/span><span class=\"cm-tag cm-bracket cm-error\">&gt;<\/span><\/pre>\n<h4 class=\"md-end-block md-heading\">2.\u4f7f\u7528django\u5185\u7f6e\u6a21\u5757\u521b\u5efaforms\u6a21\u578b<\/h4>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u8ddf\u6570\u636e\u5e93models\u4e00\u6837,\u9700\u8981\u4ecedjango\u5bfc\u5165\u6a21\u5757<span spellcheck=\"false\"><code>forms<\/code><\/span>,\u5e76\u7ee7\u627f<span spellcheck=\"false\"><code>forms.Form<\/code><\/span>\u6a21\u5757<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#day14\/douban\/forms.py<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">forms<\/span>\r\n\u200b\r\n<span class=\"cm-keyword\">class<\/span> <span class=\"cm-def\">LoginForm<\/span>(<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">Form<\/span>):\r\n \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>()\r\n \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>()<\/pre>\n<h4 class=\"md-end-block md-heading\">3.\u6dfb\u52a0login\u65b9\u6cd5\u5230views.py<\/h4>\n<blockquote>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li>\n<h5 class=\"md-end-block md-heading\">\u6ce8\u610f\u5bfc\u5165LoginForm<\/h5>\n<\/li>\n<li class=\"\">\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528<span spellcheck=\"false\"><code>form_v=LoginForm()<\/code><\/span><span class=\"\">\u5b9e\u4f8b\u5316\u8868\u5355\u7684\u5bf9\u8c61,\u5e76\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u53c2\u6570\u4f20\u5165html\u6a21\u677f<\/span><\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\"># -*- coding: utf-8 -*-<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">__future__<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">unicode_literals<\/span>\r\n\u200b\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span>.<span class=\"cm-property\">shortcuts<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">render<\/span>,<span class=\"cm-variable\">HttpResponse<\/span>,<span class=\"cm-variable\">HttpResponseRedirect<\/span>,<span class=\"cm-variable\">reverse<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">models<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">UserModel<\/span>\r\n<span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">uuid<\/span>\r\n<span class=\"cm-keyword\">from<\/span> .<span class=\"cm-property\">forms<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">LoginForm<\/span> \u00a0 <span class=\"cm-comment\">#\u8981\u4f7f\u7528\u8868\u5355\u6a21\u578b\u9700\u8981\u4e8b\u5148\u5bfc\u5165<\/span>\r\n<span class=\"cm-comment\"># Create your views here.<\/span>\r\n<span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">index<\/span>(<span class=\"cm-variable\">request<\/span>):\r\n \u00a0  <span class=\"cm-variable\">mysessionid<\/span>=<span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">COOKIES<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'mysessionid'<\/span>)\r\n \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">session<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-variable\">mysessionid<\/span>)\r\n \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">username<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">HttpResponse<\/span>(<span class=\"cm-string\">\"\u6b22\u8fce\u6765\u5230%s\u7684\u535a\u5ba2!\"<\/span><span class=\"cm-operator\">%<\/span><span class=\"cm-variable\">username<\/span>)\r\n \u00a0  <span class=\"cm-keyword\">else<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">HttpResponseRedirect<\/span>(<span class=\"cm-variable\">reverse<\/span>(<span class=\"cm-string\">'login_page'<\/span>))\r\n\u200b\r\n<span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">login<\/span>(<span class=\"cm-variable\">request<\/span>):\r\n \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">method<\/span>==<span class=\"cm-string\">\"GET\"<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">form_v<\/span>=<span class=\"cm-variable\">LoginForm<\/span>() \u00a0 <span class=\"cm-comment\">#\u8fd9\u91cc\u76f4\u63a5\u4f7f\u7528LoginForm\u6a21\u578b\u8868\u5355<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">render<\/span>(<span class=\"cm-variable\">request<\/span>,<span class=\"cm-string\">'login.html'<\/span>,{<span class=\"cm-string\">'form_t'<\/span>:<span class=\"cm-variable\">form_v<\/span>})  <span class=\"cm-comment\">#\u901a\u8fc7\u4e0a\u4e0b\u6587\u4f20\u53d8\u91cf\u7ed9html\u6a21\u677f\u6807\u7b7e\u7684\u53d8\u91cfform_t<\/span>\r\n \u00a0  <span class=\"cm-keyword\">else<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">POST<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'username'<\/span>,<span class=\"cm-builtin\">None<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">POST<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'password'<\/span>,<span class=\"cm-builtin\">None<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">userModel<\/span>=<span class=\"cm-variable\">UserModel<\/span>.<span class=\"cm-property\">objects<\/span>.<span class=\"cm-property\">filter<\/span>(<span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">username<\/span>,<span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">password<\/span>).<span class=\"cm-property\">first<\/span>()\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">userModel<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">response<\/span>=<span class=\"cm-variable\">HttpResponseRedirect<\/span>(<span class=\"cm-variable\">reverse<\/span>(<span class=\"cm-string\">'index_page'<\/span>))\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">mysessionid<\/span>=<span class=\"cm-builtin\">str<\/span>(<span class=\"cm-variable\">uuid<\/span>.<span class=\"cm-property\">uuid4<\/span>())\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">response<\/span>.<span class=\"cm-property\">set_cookie<\/span>(<span class=\"cm-string\">'mysessionid'<\/span>,<span class=\"cm-variable\">mysessionid<\/span>)\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">session<\/span>[<span class=\"cm-variable\">mysessionid<\/span>]=<span class=\"cm-variable\">userModel<\/span>.<span class=\"cm-property\">username<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">response<\/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-variable\">HttpResponse<\/span>(<span class=\"cm-string\">\"\u7528\u6237\u540d\u548c\u5bc6\u7801\u9519\u8bef\"<\/span>)<\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u914d\u7f6e\u5b8c\u6210\u540e,\u4f7f\u7528get\u8bf7\u6c42form\u6a21\u578b\u6e32\u67d3\u51fa\u6765\u7684\u6548\u679c<\/span><\/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\/namef1.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\/namef1.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u53ef\u4ee5\u4fee\u6539\u6a21\u677f\u6807\u7b7e<\/span><span spellcheck=\"false\"><code>{{ form_t.as_p }}<\/code><\/span>\u6216\u8005<span spellcheck=\"false\"><code>{{ form_t.as_ul }}<\/code><\/span><span class=\"\"> \u53ef\u4ee5\u53d8\u6210\u7eb5\u5411\u6392\u5217<\/span><\/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\/namef2.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\/namef2.png\" \/><\/span><\/span><\/p>\n<h4 class=\"md-end-block md-heading\"><span class=\"\">4.\u4f7f\u7528form\u6a21\u578b\u7684\u63a7\u4ef6<\/span><span class=\"\" spellcheck=\"false\"><code>widget<\/code><\/span><\/h4>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u6ce8\u610f\u5230form\u76f4\u63a5\u6e32\u67d3\u51fa\u6765\u7684\u8868\u5355,\u5bc6\u7801\u662f\u53ef\u89c1\u7684,\u4e0d\u7b26\u5408\u65e5\u5e38\u8981\u6c42<\/span><\/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\/namef3.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\/namef3.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u4e8e\u662f\u5c31\u9700\u8981\u4f7f\u7528\u5230form\u6a21\u578b\u7684\u63a7\u4ef6<span spellcheck=\"false\"><code>widget<\/code><\/span>,\u5bc6\u7801\u90e8\u5206\u53ea\u9700\u8981\u4f7f\u7528<span spellcheck=\"false\"><code>widget=forms.PasswordInput<\/code><\/span><span class=\"\">\u8fd9\u4e2a\u63a7\u4ef6\u5373\u53ef,PasswordInput\u5b9e\u8d28\u4e0a\u662f\u4e00\u4e2aclass\u5bf9\u8c61,\u5b9e\u73b0\u539f\u7406\u662f\u5c06input_type\u53d8\u6210password\u6807\u7b7e.<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">forms<\/span>\r\n<span class=\"cm-keyword\">class<\/span> <span class=\"cm-def\">LoginForm<\/span>(<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">Form<\/span>):\r\n \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>()\r\n \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>)<\/pre>\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\/namef4.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\/namef4.png\" \/><\/span><\/span><\/p>\n<p class=\"\"><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\/namef5.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\/namef5.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u5982\u679c\u9700\u8981\u4f7f\u7528\u8f93\u5165\u6846\u7684\u63d0\u793a,\u53ef\u4ee5\u4fee\u6539<span spellcheck=\"false\"><code>PasswordInput<\/code><\/span>\u91cc\u9762\u4f20\u53c2<span spellcheck=\"false\"><code>attrs<\/code><\/span><span class=\"\">\u5b57\u5178,\u8be5\u64cd\u4f5c\u4f1a\u5f71\u54cd\u670d\u52a1\u5668\u6027\u80fd<\/span><\/h5>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u7528\u6237\u540d'<\/span>}))\r\n<span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))<\/pre>\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\/namef6.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\/namef6.png\" \/><\/span><\/span><\/p>\n<h4 class=\"md-end-block md-heading\">5.\u5199\u4e00\u4e2a\u6ce8\u518c\u9875\u9762register.html<\/h4>\n<blockquote>\n<h4 class=\"md-end-block md-heading\">\u7528\u53d8\u91cf<span spellcheck=\"false\"><code>{{ form_t.as_p }}<\/code><\/span>\u63a5\u6536\u8868\u5355<\/h4>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"html\" contenteditable=\"false\"><span class=\"cm-meta\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">html<\/span> <span class=\"cm-attribute\">lang<\/span>=<span class=\"cm-string\">\"en\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">head<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">meta<\/span> <span class=\"cm-attribute\">charset<\/span>=<span class=\"cm-string\">\"UTF-8\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">title<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\u6ce8\u518c\u9875\u9762<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">title<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">head<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">body<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">form<\/span> <span class=\"cm-attribute\">method<\/span>=<span class=\"cm-string\">\"post\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  {% csrf_token %}\r\n \u00a0  {{ form_t.as_p }}\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">input<\/span> <span class=\"cm-attribute\">type<\/span>=<span class=\"cm-string\">\"submit\"<\/span> <span class=\"cm-attribute\">value<\/span>=<span class=\"cm-string\">\"\u6ce8\u518c\"<\/span><span class=\"cm-tag cm-bracket\">\/&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">form<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">body<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">html<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span><\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u589e\u52a0\u4e00\u4e2aform\u6a21\u578b\u5bf9\u8c61,\u589e\u52a0<span spellcheck=\"false\"><code>RegisterForm<\/code><\/span><span class=\"\">,\u5b9e\u73b0\u767b\u9646\u8868\u5355\u7684username,password,password_repeat,email\u7684\u5b57\u6bb5\u63a5\u6536<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#-*- coding:utf-8 -*-<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">forms<\/span>\r\n<span class=\"cm-keyword\">class<\/span> <span class=\"cm-def\">LoginForm<\/span>(<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">Form<\/span>):\r\n \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>()\r\n \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))\r\n\u200b\r\n<span class=\"cm-keyword\">class<\/span> <span class=\"cm-def\">RegisterForm<\/span>(<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">Form<\/span>):\r\n \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>()\r\n \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))\r\n \u00a0  <span class=\"cm-variable\">password_repeat<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))\r\n \u00a0  <span class=\"cm-variable\">email<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">EmailField<\/span>()<\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u589e\u52a0\u4e00\u4e2a\u6ce8\u518c\u64cd\u4f5c\u7684\u89c6\u56fe\u51fd\u6570register<\/h5>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li class=\"\">\n<h5 class=\"md-end-block md-heading\"><span spellcheck=\"false\"><code>form_v=RegisterForm(request.POST)<\/code><\/span><span class=\"\">\u662f\u5c06request.POST\u8fd9\u4e2a\u5b57\u5178\u5bf9\u8c61,\u6574\u4f53\u4f20\u7ed9RegisterForm\u8fdb\u884c\u5bf9\u5e94\u53d8\u91cf\u4f20\u503c<\/span><\/h5>\n<\/li>\n<\/ul>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\"># -*- coding: utf-8 -*-<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">__future__<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">unicode_literals<\/span>\r\n\u200b\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">django<\/span>.<span class=\"cm-property\">shortcuts<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">render<\/span>,<span class=\"cm-variable\">HttpResponse<\/span>,<span class=\"cm-variable\">HttpResponseRedirect<\/span>,<span class=\"cm-variable\">reverse<\/span>\r\n<span class=\"cm-keyword\">from<\/span> <span class=\"cm-variable\">models<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">UserModel<\/span>\r\n<span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">uuid<\/span>\r\n<span class=\"cm-keyword\">from<\/span> .<span class=\"cm-property\">forms<\/span> <span class=\"cm-keyword\">import<\/span> <span class=\"cm-variable\">LoginForm<\/span>,<span class=\"cm-variable\">RegisterForm<\/span>\r\n\u200b\r\n<span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">register<\/span>(<span class=\"cm-variable\">request<\/span>):\r\n \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">method<\/span>==<span class=\"cm-string\">\"GET\"<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">form_v<\/span>=<span class=\"cm-variable\">RegisterForm<\/span>()\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">render<\/span>(<span class=\"cm-variable\">request<\/span>,<span class=\"cm-string\">'register.html'<\/span>,{<span class=\"cm-string\">'form_t'<\/span>:<span class=\"cm-variable\">form_v<\/span>})\r\n \u00a0  <span class=\"cm-keyword\">else<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">form_v<\/span>=<span class=\"cm-variable\">RegisterForm<\/span>(<span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">POST<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">form_v<\/span>.<span class=\"cm-property\">is_valid<\/span>():\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-variable\">form_v<\/span>.<span class=\"cm-property\">is_valid<\/span>()\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">HttpResponse<\/span>(<span class=\"cm-string\">u'\u6ce8\u518c\u6210\u529f'<\/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-variable\">HttpResponse<\/span>(<span class=\"cm-string\">u'\u6ce8\u518c\u5931\u8d25'<\/span>)<\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u589e\u52a0\u4e00\u6761\u8def\u7531\u6307\u5411\u6ce8\u518c\u9875\u9762register\u7684\u89c6\u56fe\u51fd\u6570.<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-variable\">url<\/span>(<span class=\"cm-string\">r'^register\/$'<\/span>,<span class=\"cm-variable\">views<\/span>.<span class=\"cm-property\">register<\/span>,<span class=\"cm-variable\">name<\/span>=<span class=\"cm-string\">'register_page'<\/span>),<\/pre>\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\/namef7.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\/namef7.png\" \/><\/span><\/span><\/p>\n<h4 class=\"md-end-block md-heading\">6.django\u8868\u5355\u9519\u8bef\u4fe1\u606f\u7684\u63d0\u793a<\/h4>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u4f7f\u7528\u6210\u5458\u65b9\u6cd5<span spellcheck=\"false\"><code>form.errors<\/code><\/span> ,\u5f53\u51fa\u73b0\u9519\u8bef\u65f6,\u663e\u793a\u5230\u524d\u53f0,<\/h5>\n<h5 class=\"md-end-block md-heading\">\u4fee\u6539\u5bf9\u5e94\u6a21\u5757register.html,forms.py\u90e8\u5206\u5185\u5bb9<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"html\" contenteditable=\"false\">#register.html\r\n<span class=\"cm-meta\">&lt;!DOCTYPE html&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">html<\/span> <span class=\"cm-attribute\">lang<\/span>=<span class=\"cm-string\">\"en\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">head<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">meta<\/span> <span class=\"cm-attribute\">charset<\/span>=<span class=\"cm-string\">\"UTF-8\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">title<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\u6ce8\u518c\u9875\u9762<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">title<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">head<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">body<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">form<\/span> <span class=\"cm-attribute\">method<\/span>=<span class=\"cm-string\">\"post\"<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n \u00a0  {% csrf_token %}\r\n \u00a0  {{ form_t.as_p }}\r\n \u00a0  <span class=\"cm-tag cm-bracket\">&lt;<\/span><span class=\"cm-tag\">input<\/span> <span class=\"cm-attribute\">type<\/span>=<span class=\"cm-string\">\"submit\"<\/span> <span class=\"cm-attribute\">value<\/span>=<span class=\"cm-string\">\"\u6ce8\u518c\"<\/span><span class=\"cm-tag cm-bracket\">\/&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">form<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n\u200b\r\n{{ errors }} \u00a0  {#  \u589e\u52a0\u6807\u7b7eerrors\u7528\u4ee5\u663e\u793a\u9519\u8bef\u4fe1\u606f  #}\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">body<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span>\r\n<span class=\"cm-tag cm-bracket\">&lt;\/<\/span><span class=\"cm-tag\">html<\/span><span class=\"cm-tag cm-bracket\">&gt;<\/span><\/pre>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u589e\u52a0\u4e00\u4e2aerrors\u7684\u4e0a\u4e0b\u4f20\u53c2<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#forms.py<\/span>\r\n<span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">register<\/span>(<span class=\"cm-variable\">request<\/span>):\r\n \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">method<\/span>==<span class=\"cm-string\">\"GET\"<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">form_v<\/span>=<span class=\"cm-variable\">RegisterForm<\/span>()\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">render<\/span>(<span class=\"cm-variable\">request<\/span>,<span class=\"cm-string\">'register.html'<\/span>,{<span class=\"cm-string\">'form_t'<\/span>:<span class=\"cm-variable\">form_v<\/span>})\r\n \u00a0  <span class=\"cm-keyword\">else<\/span>:\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">form_v<\/span>=<span class=\"cm-variable\">RegisterForm<\/span>(<span class=\"cm-variable\">request<\/span>.<span class=\"cm-property\">POST<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">form_v<\/span>.<span class=\"cm-property\">is_valid<\/span>():\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">print<\/span> <span class=\"cm-variable\">form_v<\/span>.<span class=\"cm-property\">is_valid<\/span>()\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">HttpResponse<\/span>(<span class=\"cm-string\">u'\u6ce8\u518c\u6210\u529f'<\/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-variable\">render<\/span>(<span class=\"cm-variable\">request<\/span>,<span class=\"cm-string\">'register.html'<\/span>,{<span class=\"cm-string\">'form_t'<\/span>:<span class=\"cm-variable\">form_v<\/span>,<span class=\"cm-string\">'errors'<\/span>:<span class=\"cm-variable\">form_v<\/span>.<span class=\"cm-property\">errors<\/span>}) <span class=\"cm-comment\">#\u4f7f\u7528errors\u6807\u7b7e\u6e32\u67d3\u5230\u524d\u53f0<\/span><\/pre>\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\/namef8.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\/namef8.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u81ea\u5b9a\u4e49\u9519\u8bef\u4fe1\u606f,\u5728foms\u91cc\u9762\u4f7f\u7528\u53c2\u6570<\/span><span class=\"\" spellcheck=\"false\"><code>error_messages={\u5173\u952e\u5b57\u53c2\u6570\u540d\u5b57:\u9519\u8bef\u63d0\u793a}<\/code><\/span> \u5b9e\u73b0<\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#\u4f8b\u5982\u9700\u8981\u5bc6\u7801\u6700\u5c0f\u957f\u5ea6\u4e3a6<\/span>\r\n<span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">max_length<\/span>=<span class=\"cm-number\">8<\/span>,<span class=\"cm-variable\">min_length<\/span>=<span class=\"cm-number\">6<\/span>,\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">error_messages<\/span>={<span class=\"cm-string\">'min_length'<\/span>:<span class=\"cm-string\">u'\u5bc6\u7801\u6700\u5c0f\u957f\u5ea6\u4e3a6'<\/span>},\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))<\/pre>\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\/namef9.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\/namef9.png\" \/><\/span><\/span><\/p>\n<h4 class=\"md-end-block md-heading\"><span class=\"\">7.\u4f7f\u7528django\u7684form\u6821\u9a8c<\/span><\/h4>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u91cd\u5199form\u6a21\u578bclean\u65b9\u6cd5,\u5b9e\u73b0\u6700\u5c0f\u5bc6\u7801\u7684\u6821\u9a8c,\u4f7f\u7528<\/span><span spellcheck=\"false\"><code>forms.ValidationError<\/code><\/span><span class=\"\"> \u65b9\u6cd5\u4ea7\u751f\u5f02\u5e38<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-keyword\">class<\/span> <span class=\"cm-def\">RegisterForm<\/span>(<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">Form<\/span>):\r\n \u00a0  <span class=\"cm-variable\">username<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">max_length<\/span>=<span class=\"cm-number\">8<\/span>,)\r\n \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">max_length<\/span>=<span class=\"cm-number\">8<\/span>,<span class=\"cm-comment\">#min_length=6,<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-comment\">#error_messages={'max_length':u'\u5bc6\u7801\u6700\u5c0f\u957f\u5ea6\u4e3a6'},<\/span>\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))\r\n \u00a0  <span class=\"cm-variable\">password_repeat<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">CharField<\/span>(<span class=\"cm-variable\">widget<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">PasswordInput<\/span>(<span class=\"cm-variable\">attrs<\/span>={<span class=\"cm-string\">'placeholder'<\/span>:<span class=\"cm-string\">u'\u8bf7\u8f93\u5165\u5bc6\u7801'<\/span>}))\r\n \u00a0  <span class=\"cm-variable\">email<\/span>=<span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">EmailField<\/span>()\r\n\u200b\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">clean_password<\/span>(<span class=\"cm-variable-2\">self<\/span>): \u00a0 \u00a0  <span class=\"cm-comment\">#\u589e\u52a0\u65b9\u6cd5clean_password<\/span>\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable-2\">self<\/span>.<span class=\"cm-property\">cleaned_data<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'password'<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-builtin\">len<\/span>(<span class=\"cm-variable\">password<\/span>)<span class=\"cm-operator\">&lt;<\/span><span class=\"cm-number\">6<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">raise<\/span> <span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">ValidationError<\/span>(<span class=\"cm-string\">u'\u5bc6\u7801\u957f\u5ea6\u5e94\u5927\u4e8e6\u4f4d'<\/span>) <span class=\"cm-comment\">#\u4f7f\u7528forms.ValidationError \u65b9\u6cd5\u4ea7\u751f\u5f02\u5e38,\u53c2\u6570\u4e3a\u5f02\u5e38\u7684\u663e\u793a\u5185\u5bb9<\/span><\/pre>\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\/namef10.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\/namef10.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u5982\u679c\u9700\u8981\u8fdb\u884c2\u6b21\u5bc6\u7801\u6821\u9a8c,\u53ef\u4ee5\u8fd9\u4e48\u5199<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-comment\">#forms.py<\/span>\r\n \u00a0  <span class=\"cm-keyword\">def<\/span> <span class=\"cm-def\">clean<\/span>(<span class=\"cm-variable-2\">self<\/span>):\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">password<\/span>=<span class=\"cm-variable-2\">self<\/span>.<span class=\"cm-property\">cleaned_data<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'password'<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-variable\">password_repeat<\/span>=<span class=\"cm-variable-2\">self<\/span>.<span class=\"cm-property\">cleaned_data<\/span>.<span class=\"cm-property\">get<\/span>(<span class=\"cm-string\">'password_repeat'<\/span>)\r\n \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">if<\/span> <span class=\"cm-variable\">password<\/span> <span class=\"cm-operator\">!<\/span>= <span class=\"cm-variable\">password_repeat<\/span>:\r\n \u00a0 \u00a0 \u00a0 \u00a0 \u00a0  <span class=\"cm-keyword\">raise<\/span> <span class=\"cm-variable\">forms<\/span>.<span class=\"cm-property\">ValidationError<\/span>(<span class=\"cm-string\">u'\u4e24\u6b21\u8f93\u5165\u5bc6\u7801\u4e0d\u6b63\u786e'<\/span>)<\/pre>\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\/namef11.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\/namef11.png\" \/><\/span><\/span><\/p>\n<blockquote>\n<h5 class=\"md-end-block md-heading\">\u4f46\u662f\u4e0a\u8ff0\u63d0\u793a\u663e\u793a\u7684\u4f4d\u7f6e,\u4e0d\u80fd\u53cd\u6620\u51fa\u662f\u54ea\u4e00\u4e2a\u5b57\u6bb5\u7684\u9519\u8bef\u4fe1\u606f,\u6240\u4ee5\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528<span class=\"\" spellcheck=\"false\"><code>self.add_error()<\/code><\/span><span class=\"\"> \u65b9\u6cd5\u6765\u8bb2\u9519\u8bef\u4fe1\u606f\u7684\u7cbe\u786e\u5b9a\u4f4d\u63d0\u793a<\/span><\/h5>\n<\/blockquote>\n<pre class=\"md-fences md-end-block\" lang=\"python\" contenteditable=\"false\"><span class=\"cm-variable-2\">self<\/span>.<span class=\"cm-property\">add_error<\/span>(<span class=\"cm-string\">'password_repeat'<\/span>,<span class=\"cm-string\">u'\u4e24\u6b21\u5bc6\u7801\u4e0d\u76f8\u7b49'<\/span>)<\/pre>\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\/namef12.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\/namef12.png\" \/><\/span><\/span><\/p>\n<h2 class=\"md-end-block md-heading\"><span class=\"\">\u603b\u7ed3<\/span><\/h2>\n<blockquote>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">Django\u63d0\u4f9b\u4e86\u6e32\u67d3\u7684\u65b9\u6cd5,\u662f\u4e00\u79cd\u52a8\u6001\u8fc7\u7a0b,\u6027\u80fd\u4f1a\u4f4e\u4e00\u4e9b,\u5982\u679c\u8ffd\u6c42\u9ad8\u6027\u80fd\u7684\u8bdd,\u6700\u597d\u4f7f\u7528\u524d\u7aef\u65b9\u6cd5\u5b9e\u73b0,\u4e0d\u8981\u592a\u4f9d\u8d56\u540e\u7aef,\u56e0\u4e3a\u6bcf\u6b21\u90fd\u9700\u8981\u4ece\u6a21\u677f\u91cc\u9762\u5bf9\u53d8\u91cf\u8d4b\u503c,\u7136\u540e\u6e32\u67d3\u6210\u4e3ahtml\u6807\u7b7e,\u5f53\u91cf\u5927\u7684\u65f6\u5019,\u5bf9\u670d\u52a1\u5668\u662f\u4e00\u79cd\u8d1f\u62c5.<\/span><\/h5>\n<h5 class=\"md-end-block md-heading\"><span class=\"\">\u5728\u4f7f\u7528Django\u7684\u9519\u8bef\u63d0\u793a\u65f6,\u53ef\u4ee5\u4f7f\u7528\u5b9a\u4e49\u7684\u5b57\u6bb5\u53c2\u6570\u5b9a\u4e49,\u4e5f\u53ef\u4ee5\u91cd\u65b0\u5b9a\u4e49\u65b9\u6cd5\u5b9e\u73b0.\u4e14\u5b9e\u73b0\u7684\u529f\u80fd\u4e5f\u6bd4\u8f83\u5f3a\u5927.\u4f46\u4ece\u6027\u80fd\u6700\u4f73\u7684\u89d2\u5ea6\u6765\u770b,\u4e0d\u5efa\u8bae\u8fc7\u591a\u4f7f\u7528\u540e\u53f0\u7684\u8fd9\u4e9b\u529f\u80fd,\u8fd9\u90e8\u5206\u6821\u9a8c\u5b8c\u5168\u53ef\u4ee5\u7531\u524d\u53f0\u5b9e\u73b0.<\/span><\/h5>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Django\u63d0\u4f9b\u4e86\u4e00\u79cd\u52a8\u6001\u8fc7\u7a0b,\u5148\u4ece\u6a21\u677f\u91cc\u9762\u5bf9\u53d8\u91cf\u8d4b\u503c,\u7136\u540e\u6e32\u67d3\u6210\u4e3ahtml\u6807\u7b7e,\u4e0b\u9762\u5c06\u901a\u8fc7\u4f8b\u5b50\u8fdb\u884c\u6f14\u793a. 1.\u5c06\u6a21\u677f\u7684\u6807\u7b7e\u66ff\u6362\u6210django\u7684form\u8868\u5355 \u53ea\u6e32\u67d3html\u4e2dform\u4fbf\u7b7e\u5176\u4e2d\u5143\u7d20\u7684\u4e00\u90e8\u5206,\u4e0d\u6e32\u67d3\u63d0\u4ea4\u7b49\u6807\u7b7e. #login.h [&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":[],"_links":{"self":[{"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts\/1385"}],"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=1385"}],"version-history":[{"count":4,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts\/1385\/revisions"}],"predecessor-version":[{"id":1433,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=\/wp\/v2\/posts\/1385\/revisions\/1433"}],"wp:attachment":[{"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1385"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yueguangzu.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}