{"id":6276,"date":"2022-04-06T13:53:56","date_gmt":"2022-04-06T05:53:56","guid":{"rendered":"https:\/\/egonlin.com\/?p=6276"},"modified":"2022-04-16T19:57:01","modified_gmt":"2022-04-16T11:57:01","slug":"%e7%ac%ac%e5%9b%9b%e8%8a%82%ef%bc%9a-%e7%99%bb%e9%99%86%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=6276","title":{"rendered":"\u7b2c\u56db\u8282\uff1a \u767b\u9646\u529f\u80fd"},"content":{"rendered":"<h1>\u767b\u9646\u529f\u80fd<\/h1>\n<p><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u767b\u5f55\u529f\u80fd1.jpg'><img class=\"lazyload lazyload-style-2\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  data-original=\"https:\/\/egonlin.com\/wp-content\/uploads\/2022\/04\/\u767b\u5f55\u529f\u80fd1.jpg\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" \/><\/div><\/p>\n<p>\u672c\u529f\u80fd\u9700\u6c42\uff1a<\/p>\n<p>-\u4f7f\u7528Ajax\u63d0\u4ea4\u6570\u636e\u4fe1\u606f<\/p>\n<p>-\u6e32\u67d3\u7528\u6237\u540d\u5bc6\u7801\u4e0d\u7b26\u5408\u8981\u6c42\u7684\u9519\u8bef\u4fe1\u606f<\/p>\n<p>-\u767b\u9646\u540e\u53ef\u4ee5\u5b9e\u73b0\u767b\u51fa\u5f53\u524d\u8d26\u53f7<\/p>\n<p>\u62d3\u5c55\u9700\u6c42:<\/p>\n<p>-\u767b\u9646\u65f6\u5224\u65ad\u7528\u6237\u662f\u5426\u88ab\u51bb\u7ed3<\/p>\n<p>-\u767b\u9646\u65f6\u4f7f\u7528\u767b\u9646\u8868\u5355\u8fdb\u884c\u9a8c\u8bc1<\/p>\n<h2>\u4e00\u3001\u6dfb\u52a0\u8def\u7531<\/h2>\n<blockquote>\n<p>\u5728urls.py\u4e2d\u6dfb\u52a0<\/p>\n<\/blockquote>\n<h3>1\u3001\u767b\u9646\u8def\u7531<\/h3>\n<pre><code class=\"language-python\">    path(&#039;login\/&#039;, views.login, name=&#039;login&#039;),<\/code><\/pre>\n<h3>2\u3001\u751f\u6210\u968f\u673a\u9a8c\u8bc1\u7801\u8def\u7531<\/h3>\n<pre><code class=\"language-python\">    path(&#039;get_valid_code\/&#039;, views.get_valid_code, name=&#039;get_valid&#039;),<\/code><\/pre>\n<h3>3\u3001\u767b\u51fa\u5f53\u524d\u7528\u6237\u8def\u7531<\/h3>\n<pre><code class=\"language-bash\">    path(&#039;logout\/&#039;, views.logout, name=&#039;logout&#039;), <\/code><\/pre>\n<h2>\u4e8c\u3001\u6dfb\u52a0\u89c6\u56fe\u51fd\u6570<\/h2>\n<p>\u5728views.py\u4e2d<\/p>\n<h3>1\u3001\u5148\u5bfc\u5165\u4e00\u4e9b\u9700\u8981\u7684\u6a21\u5757<\/h3>\n<pre><code class=\"language-python\">from django.contrib import auth\nfrom django.contrib.auth import authenticate<\/code><\/pre>\n<h3>2\u3001\u7136\u540e\u6dfb\u52a0\u89c6\u56fe\u51fd\u6570login<\/h3>\n<pre><code class=\"language-python\">def login(request):\n    if request.method == &#039;POST&#039;:\n        res = {&#039;code&#039;: 100}\n        username = request.POST.get(&#039;username&#039;)\n        password = request.POST.get(&#039;password&#039;)\n        valid_code = request.POST.get(&#039;valid_code&#039;)\n        if request.session.get(&#039;valid_code&#039;).upper() == valid_code.upper() or valid_code == &#039;123&#039;:\n            user = auth.authenticate(username=username, password=password)\n            freezed = models.UserInfo.objects.filter(username=username, is_active=0).first()\n            res[&#039;url&#039;] = &#039;\/index\/&#039;\n            if freezed:\n                res[&#039;code&#039;] = 105\n                res[&#039;msg&#039;] = &#039;\u8d26\u6237\u88ab\u51bb\u7ed3&#039;\n            if user:\n                auth.login(request, user)\n                res[&#039;msg&#039;] = &#039;\u767b\u5f55\u6210\u529f&#039;\n            else:\n                res[&#039;code&#039;] = 101\n                res[&#039;msg&#039;] = &#039;\u7528\u6237\u540d\u5bc6\u7801\u9519\u8bef&#039;\n        else:\n            res[&#039;code&#039;] = 102\n            res[&#039;msg&#039;] = &#039;\u9a8c\u8bc1\u7801\u9519\u8bef&#039;\n        return JsonResponse(res)\n    elif request.method == &#039;GET&#039;:\n        form = x_forms.FormLogin()\n        return render(request, &#039;Login.html&#039;, {&#039;form&#039;: form})\n    else:\n        return HttpResponse(&#039;\u975e\u6cd5\u8bf7\u6c42\uff01&#039;)<\/code><\/pre>\n<blockquote>\n<p>\u5176\u4e2d\u6d89\u53ca\u5230\u4e00\u4e2a\u624b\u52a8\u6dfb\u52a0\u767b\u5f55\u9a8c\u8bc1\u7801\u7684\u64cd\u4f5c<\/p>\n<p>\u6dfb\u52a0\u89c6\u56fe\u51fd\u6570get_rgb(\u968f\u673a\u51fd\u6570,\u5229\u7528RGB\u5f62\u6210\u968f\u673a\u989c\u8272)<\/p>\n<p>\u548cget_valid_code(\u83b7\u53d6\u968f\u673a\u9a8c\u8bc1\u7801)<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">def get_rgb():\n    return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)\ndef get_valid_code(request):\n    img = Image.new(&#039;RGB&#039;, (200, 38), get_rgb())\n    img_draw = ImageDraw.Draw(img)\n    img_font = ImageFont.truetype(&#039;.\/static\/font\/FZFenSTXJW.TTF&#039;, 25)\n    valid_code = &#039;&#039;\n    for i in range(5):\n        low_char = chr(random.randint(97, 122))\n        num_char = random.randint(0, 9)\n        upper_char = chr(random.randint(65, 90))\n        res = random.choice([low_char, num_char, upper_char])\n        valid_code += str(res)\n        img_draw.text((i * 40 + 10, 5), str(res), get_rgb(), img_font)\n    request.session[&#039;valid_code&#039;] = valid_code\n    print(valid_code)\n\n    f = BytesIO()\n    img.save(f, &#039;png&#039;)\n    data = f.getvalue()\n    return HttpResponse(data) <\/code><\/pre>\n<blockquote>\n<p>(\u62d3\u5c55)\u6211\u4eec\u53ef\u4ee5\u5728x_forms,py\u7684\u6587\u4ef6\u4e2d\u52a0\u5165\u4e00\u4e2a\u8868\u793a\u767b\u9646\u4fe1\u606f\u6821\u9a8c\u7684\u7c7b\uff08FormLogin\uff09\uff0c\u7528\u6765\u6821\u9a8c\u767b\u9646\u65f6\u4ece\u524d\u7aef\u8fd4\u56de\u7684\u5b57\u7b26\u4e32\u662f\u5426\u7b26\u5408\u8981\u6c42<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">class FormLogin(forms.Form):\n    username = forms.CharField(\n        required=True,\n        label=&#039;&lt;i class=&quot;fa fa-user width-30&quot; aria-hidden=&quot;true&quot;&gt;&lt;\/i&gt;&#039;,\n        error_messages={\n            &#039;required&#039;: &#039;\u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a&#039;\n        },\n        widget=widgets.TextInput(attrs={&#039;class&#039;: &#039;form-control&#039;, &#039;placeholder&#039;: &#039;\u8bf7\u8f93\u5165\u8d26\u53f7&#039;}),\n    )\n    password = forms.CharField(\n        required=True,\n        label=&#039;&lt;i class=&quot;fa fa-lock width-30&quot; aria-hidden=&quot;true&quot;&gt;&lt;\/i&gt;&#039;,\n        error_messages={\n            &#039;required&#039;: &#039;\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a&#039;\n        },\n        widget=widgets.PasswordInput(attrs={&#039;class&#039;: &#039;form-control&#039;, &#039;placeholder&#039;: &#039;\u8bf7\u8f93\u5165\u5bc6\u7801&#039;}),\n    )<\/code><\/pre>\n<h3>3\u3001\u6dfb\u52a0\u767b\u51fa\u89c6\u56fe\u51fd\u6570(logout)<\/h3>\n<pre><code class=\"language-python\">def logout(request):\n    auth.logout(request)\n    return redirect(reverse(&#039;login&#039;))<\/code><\/pre>\n<blockquote>\n<p>(\u62d3\u5c55): \u9a8c\u8bc1\u7801\u6697\u95e8<\/p>\n<p>\u8fd9\u91cc\u7684\u4ee3\u7801\u4e2d<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">if request.session.get(&#039;valid_code&#039;).upper() == valid_code.upper() or valid_code == &#039;123&#039;:<\/code><\/pre>\n<blockquote>\n<p>\u6700\u540e\u7684123\u8bbe\u7f6e\u4e3a\u65b9\u4fbf\u5f00\u53d1\u8005\u81ea\u5df1\u8c03\u8bd5\u7a0b\u5e8f\u65f6\u4f7f\u7528,\u65e0\u8bba\u751f\u6210\u7684\u968f\u673a\u9a8c\u8bc1\u7801\u662f\u4ec0\u4e48,\u8f93\u5165\u9a8c\u8bc1\u7801123\u90fd\u53ef\u767b\u9646,\u6b63\u5f0f\u4e0a\u7ebf\u7684\u8bdd\u5e94\u8be5\u53bb\u9664\u8fd9\u4e2a\u6697\u95e8<\/p>\n<\/blockquote>\n<h2>\u4e09\u3001\u767b\u5f55\u529f\u80fd\u6d89\u53ca\u7684\u6a21\u578b\u5c42\u64cd\u4f5c<\/h2>\n<blockquote>\n<p>\u5224\u65ad\u7528\u6237\u767b\u5f55\u65f6\u4f7f\u7528\u6269\u5199\u7684UserInfo\u8868\u4e2d\u81ea\u5e26\u8ba4\u8bc1auth\u6a21\u5757<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">user = authenticate(username=username, password=password)<\/code><\/pre>\n<blockquote>\n<p>(\u62d3\u5c55)\u6b64\u5904\u7ee7\u627f\u7684\u539f\u59cbUser\u8868\u4e2d\u6709\u4e2ais_active\u5b57\u6bb5,\u53ef\u4ee5\u7528\u6765\u5224\u65ad\u7528\u6237\u662f\u5426\u88ab\u51bb\u7ed3<\/p>\n<\/blockquote>\n<pre><code class=\"language-python\">freezed = models.UserInfo.objects.filter(username=username, is_active=0).first()<\/code><\/pre>\n<h2>\u56db\u3001\u767b\u5f55\u529f\u80fd\u524d\u7aef\u6a21\u677f<\/h2>\n<h3>1\u3001\u5728templates\u4e2d\u7684login.html\u4e2d<\/h3>\n<pre><code class=\"language-python\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;zh-CN&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;title&gt;\u767b\u9646\u754c\u9762&lt;\/title&gt;\n    {% include &#039;template_static\/css_base.html&#039; %}\n    &lt;style&gt;\n        ul {\n            list-style: none\n        }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;div class=&quot;container-fluid&quot;&gt;\n    &lt;div class=&quot;mt-5 mb-5&quot;&gt;&lt;br&gt;&lt;\/div&gt;\n    &lt;div class=&quot;row mt-5 mb-5&quot;&gt;\n        &lt;div class=&quot;col-md-6 offset-md-3 card bg-white shadow-sm mr-3 my-img&quot;&gt;\n            &lt;div class=&quot;row&quot;&gt;\n                &lt;div class=&quot;col-md-8 card-body p-5 bg-white-7&quot;&gt;\n                    &lt;div class=&quot;mt-5 mb-5&quot;&gt;&lt;br&gt;&lt;\/div&gt;\n                    &lt;h1 class=&quot;text-center mt-5 swiper-cube-shadow&quot;&gt;\u6b22\u8fce\u56de\u6765&lt;\/h1&gt;\n                    &lt;form action=&quot;&quot; method=&quot;post&quot; class=&quot;mx-5 my-3&quot;&gt;\n                        {% csrf_token %}\n                        {% for foo in form %}\n                            &lt;div class=&quot;input-group mt-2&quot;&gt;\n                                &lt;div class=&quot;height-40 width-b100&quot;&gt;\n                                    &lt;div class=&quot;input-group-prepend&quot;&gt;\n                                        &lt;div class=&quot;input-group-text&quot;&gt;\n                                            &lt;label for=&quot;{{ foo.auto_id }}&quot; class=&quot;mb-0&quot;&gt;{{ foo.label|safe }}&lt;\/label&gt;\n                                        &lt;\/div&gt;\n                                        {{ foo }}\n                                    &lt;\/div&gt;\n                                &lt;\/div&gt;\n                            &lt;\/div&gt;\n                        {% endfor %}\n                        &lt;div class=&quot;input-group mt-2&quot;&gt;\n                            &lt;div class=&quot;input-group-prepend&quot;&gt;\n                                &lt;div class=&quot;input-group-text radius-5&quot;&gt;\n                                    &lt;i class=&quot;fa fa-hand-o-right width-30&quot; aria-hidden=&quot;true&quot;&gt;&lt;\/i&gt;\n                                &lt;\/div&gt;\n                            &lt;\/div&gt;\n                            &lt;input type=&quot;text&quot; class=&quot;form-control radius-5&quot; id=&quot;valid_code&quot; name=&quot;password&quot;\n                                   placeholder=&quot;\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801&quot;&gt;\n                            &lt;img src=&quot;\/get_valid_code\/&quot; height=&quot;38&quot; width=&quot;200&quot; id=&quot;valid_code_img&quot;\n                                 class=&quot;ml-1 radius-5 pointer&quot; title=&quot;\u70b9\u51fb\u5237\u65b0\u9a8c\u8bc1\u7801&quot;&gt;\n                        &lt;\/div&gt;\n                        &lt;input type=&quot;button&quot; class=&quot;btn btn-outline-primary btn-block mt-3 mb-5&quot; value=&quot;\u767b\u5f55&quot; id=&quot;btn-login&quot;&gt;\n                    &lt;\/form&gt;\n                    &lt;div class=&quot;mt-5 mb-3&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;\/div&gt;\n                &lt;\/div&gt;\n                &lt;div class=&quot;col-md-4 bg-black-4&quot;&gt;\n                    &lt;div class=&quot;h-100 pt-5 text-center&quot;&gt;\n                        &lt;h2 class=&quot;text-white ml-3 mt-5&quot;&gt;\u8fd8\u672a\u6ce8\u518c\uff1f&lt;\/h2&gt;\n                        &lt;p class=&quot;text-white mb-5&quot;&gt;\u7acb\u5373\u6ce8\u518c\uff0c\u89c2\u770b\u66f4\u591a\u5185\u5bb9\uff01&lt;\/p&gt;\n                        &lt;div class=&quot;mt-5 mb-5&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;\/div&gt;\n                        &lt;a href=&quot;{% url &#039;register&#039; %}&quot; class=&quot;btn btn-outline-light&quot;&gt;\u53bb\u6ce8\u518c&lt;\/a&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;alert alert-warning ml-5 col-md-2 shadow-sm invisible max-height-240&quot; id=&quot;tips&quot;&gt;\n            &lt;h4 class=&quot;alert-heading&quot;&gt;\u6e29\u99a8\u63d0\u793a\uff1a&lt;\/h4&gt;\n            &lt;hr&gt;\n            &lt;div class=&quot;d-none font-weight-bold m-3&quot; id=&quot;tips1&quot;&gt;&lt;\/div&gt;\n            &lt;div class=&quot;d-none font-weight-bold m-3&quot; id=&quot;tips2&quot;&gt;&lt;\/div&gt;\n            &lt;div class=&quot;d-none font-weight-bold m-3&quot; id=&quot;tips3&quot;&gt;&lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n&lt;script&gt;\n    $(&#039;#valid_code_img&#039;).click(function () {\n        var url = $(&quot;#valid_code_img&quot;)[0].src\n        $(&quot;#valid_code_img&quot;)[0].src = url + &#039;?&#039;\n    })\n    $(&#039;#btn-login&#039;).click(function () {\n        $(&#039;input&#039;).addClass(&#039;is-valid&#039;)\n        if ($(&#039;#id_username&#039;).val().length === 0) {\n            $(&#039;#id_username&#039;).removeClass(&#039;is-valid&#039;).addClass(&#039;is-invalid&#039;)\n            $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n            $(&quot;#tips1&quot;).text(&#039;\u8bf7\u8f93\u5165\u7528\u6237\u540d&#039;).removeClass(&#039;d-none&#039;)\n            setTimeout(function () {\n                $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                $(&#039;#id_username&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n            }, 1500)\n        }\n        $(&#039;#id_password&#039;).addClass(&#039;is-valid&#039;)\n        if ($(&#039;#id_password&#039;).val().length === 0) {\n            $(&#039;#id_password&#039;).removeClass(&#039;is-valid&#039;).addClass(&#039;is-invalid&#039;)\n            $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n            $(&quot;#tips2&quot;).text(&#039;\u8bf7\u8f93\u5165\u5bc6\u7801&#039;).removeClass(&#039;d-none&#039;)\n            setTimeout(function () {\n                $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                $(&#039;#id_password&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n            }, 1500)\n        }\n        $.ajax({\n            url: &#039;\/login\/&#039;,\n            method: &#039;post&#039;,\n            data: {\n                &#039;username&#039;: $(&#039;#id_username&#039;).val(),\n                &#039;password&#039;: $(&#039;#id_password&#039;).val(),\n                &#039;valid_code&#039;: $(&#039;#valid_code&#039;).val(),\n                &#039;csrfmiddlewaretoken&#039;: $(&#039;[name=&quot;csrfmiddlewaretoken&quot;]&#039;).val()\n            },\n            success: function (data) {\n                console.log(data.url)\n                if (data.code === 100) {\n                    swal({\n                        title: data.msg,\n                        text: &#039;\u6b63\u5728\u4e3a\u60a8\u8df3\u8f6c\u9875\u9762&#039;,\n                        type: &quot;success&quot;,\n                        timer: 1500,\n                        showConfirmButton: false,\n                    })\n                    setTimeout(function () {\n                        location.href = data.url\n                    }, 1500)\n                } else if (data.code === 101) {\n                    $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n                    $(&quot;#tips1&quot;).text(data.msg).removeClass(&#039;d-none&#039;)\n                    $(&#039;#id_username&#039;).removeClass(&#039;is-valid&#039;).addClass(&#039;is-invalid&#039;)\n                    $(&#039;#id_password&#039;).removeClass(&#039;is-valid&#039;).addClass(&#039;is-invalid&#039;)\n                    setTimeout(function () {\n                        $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                        $(&#039;#id_username&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n                        $(&#039;#id_password&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n                    }, 1500)\n                } else if (data.code === 102) {\n                    $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n                    $(&quot;#tips3&quot;).text(data.msg).removeClass(&#039;d-none&#039;)\n                    $(&#039;#valid_code&#039;).addClass(&#039;is-invalid&#039;)\n                    setTimeout(function () {\n                        $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                        $(&#039;#valid_code&#039;).removeClass(&#039;is-invalid&#039;).removeClass(&#039;is-valid&#039;).val(&#039;&#039;)\n                    }, 1500)\n                }\n            }\n        })\n    })\n    $(&#039;#id_username&#039;).blur(function () {\n        $(&#039;#id_username&#039;).addClass(&#039;is-valid&#039;)\n        if ($(&#039;#id_username&#039;).val().length === 0) {\n            $(&#039;#id_username&#039;).removeClass(&#039;is-valid&#039;).addClass(&#039;is-invalid&#039;)\n            $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n            $(&quot;#tips1&quot;).text(&#039;\u8bf7\u8f93\u5165\u7528\u6237\u540d&#039;).removeClass(&#039;d-none&#039;)\n            setTimeout(function () {\n                $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                $(&#039;#id_username&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n            }, 1500)\n        }\n    })\n    $(&#039;#id_password&#039;).blur(function () {\n        $(&#039;#id_password&#039;).addClass(&#039;is-valid&#039;)\n        if ($(&#039;#id_password&#039;).val().length === 0) {\n            $(&#039;#id_password&#039;).removeClass(&#039;is-valid&#039;).addClass(&#039;is-invalid&#039;)\n            $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n            $(&quot;#tips2&quot;).text(&#039;\u8bf7\u8f93\u5165\u5bc6\u7801&#039;).removeClass(&#039;d-none&#039;)\n            setTimeout(function () {\n                $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                $(&#039;#id_password&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n            }, 1500)\n        }\n    })\n    $(&#039;#valid_code&#039;).blur(function () {\n        if ($(&#039;#valid_code&#039;).val().length === 0) {\n            $(&#039;#valid_code&#039;).addClass(&#039;is-invalid&#039;)\n            $(&#039;#tips&#039;).removeClass(&#039;invisible&#039;)\n            $(&quot;#tips3&quot;).text(&#039;\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801&#039;).removeClass(&#039;d-none&#039;)\n            setTimeout(function () {\n                $(&#039;#tips&#039;).addClass(&#039;invisible&#039;)\n                $(&#039;#valid_code&#039;).removeClass(&#039;is-invalid&#039;).val(&#039;&#039;)\n            }, 1500)\n        }\n    })\n\n&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u767b\u9646\u529f\u80fd \u672c\u529f\u80fd\u9700\u6c42\uff1a -\u4f7f\u7528Ajax\u63d0\u4ea4\u6570\u636e\u4fe1\u606f -\u6e32\u67d3\u7528\u6237\u540d\u5bc6\u7801\u4e0d\u7b26\u5408\u8981\u6c42\u7684\u9519\u8bef\u4fe1\u606f -\u767b\u9646\u540e\u53ef\u4ee5\u5b9e\u73b0\u767b\u51fa [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":6808,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,406],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/6276"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6276"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/6276\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/media\/6808"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}