Django REST framework JWT

<html lang="en" >
<body>
    </div>

                <div class="page-wrapper" tabindex="-1" role="main">
                    <div class="page-inner">
                    
                    
                        <section class="normal" id="section-">
                        
                            <h1 id="django-rest-framework-jwt">Django REST framework JWT</h1>
    <p><strong>&#x6211;&#x4EEC;&#x5728;&#x9A8C;&#x8BC1;&#x5B8C;&#x7528;&#x6237;&#x7684;&#x8EAB;&#x4EFD;&#x540E;&#xFF08;&#x68C0;&#x9A8C;&#x7528;&#x6237;&#x540D;&#x548C;&#x5BC6;&#x7801;&#xFF09;&#xFF0C;&#x9700;&#x8981;&#x5411;&#x7528;&#x6237;&#x7B7E;&#x53D1;JWT&#xFF0C;&#x5728;&#x9700;&#x8981;&#x7528;&#x5230;&#x7528;&#x6237;&#x8EAB;&#x4EFD;&#x4FE1;&#x606F;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD8;&#x9700;&#x6838;&#x9A8C;&#x7528;&#x6237;&#x7684;JWT&#x3002;</strong></p>
    <p><strong>&#x5173;&#x4E8E;&#x7B7E;&#x53D1;&#x548C;&#x6838;&#x9A8C;JWT&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;Django REST framework JWT&#x6269;&#x5C55;&#x6765;&#x5B8C;&#x6210;&#x3002;</strong></p>
    <p><a href="http://getblimp.github.io/django-rest-framework-jwt/" target="_blank">&#x6587;&#x6863;&#x7F51;&#x7AD9;http://getblimp.github.io/django-rest-framework-jwt/</a></p>
    <h2 id="&#x5B89;&#x88C5;&#x914D;&#x7F6E;">&#x5B89;&#x88C5;&#x914D;&#x7F6E;</h2>
    <p>&#x5B89;&#x88C5;</p>
    <pre><code class="lang-shell">pip install djangorestframework-jwt
    </code></pre>
    <p>&#x914D;&#x7F6E;</p>
    <pre><code class="lang-python">REST_FRAMEWORK = {
        <span class="hljs-string">&apos;DEFAULT_AUTHENTICATION_CLASSES&apos;</span>: (
            <span class="hljs-string">&apos;rest_framework_jwt.authentication.JSONWebTokenAuthentication&apos;</span>,
            <span class="hljs-string">&apos;rest_framework.authentication.SessionAuthentication&apos;</span>,
            <span class="hljs-string">&apos;rest_framework.authentication.BasicAuthentication&apos;</span>,
        ),
    }

    JWT_AUTH = {
        <span class="hljs-string">&apos;JWT_EXPIRATION_DELTA&apos;</span>: datetime.timedelta(days=<span class="hljs-number">1</span>),
    }
    </code></pre>
    <ul>
    <li>JWT_EXPIRATION_DELTA  &#x6307;&#x660E;token&#x7684;&#x6709;&#x6548;&#x671F;</li>
    </ul>
    <h2 id="&#x4F7F;&#x7528;">&#x4F7F;&#x7528;</h2>
    <p>Django REST framework JWT &#x6269;&#x5C55;&#x7684;&#x8BF4;&#x660E;&#x6587;&#x6863;&#x4E2D;&#x63D0;&#x4F9B;&#x4E86;&#x624B;&#x52A8;&#x7B7E;&#x53D1;JWT&#x7684;&#x65B9;&#x6CD5;</p>
    <pre><code class="lang-python"><span class="hljs-keyword">from</span> rest_framework_jwt.settings <span class="hljs-keyword">import</span> api_settings

    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

    payload = jwt_payload_handler(user)
    token = jwt_encode_handler(payload)
    </code></pre>
    <p>&#x5728;&#x6CE8;&#x518C;&#x6210;&#x529F;&#x540E;&#xFF0C;&#x8FDE;&#x540C;&#x8FD4;&#x56DE;token&#xFF0C;&#x9700;&#x8981;&#x5728;&#x6CE8;&#x518C;&#x89C6;&#x56FE;&#x4E2D;&#x521B;&#x5EFA;token&#x3002;</p>
    <p>&#x4FEE;&#x6539;CreateUserSerializer&#x5E8F;&#x5217;&#x5316;&#x5668;&#xFF0C;&#x5728;create&#x65B9;&#x6CD5;&#x4E2D;&#x589E;&#x52A0;&#x624B;&#x52A8;&#x521B;&#x5EFA;token&#x7684;&#x65B9;&#x6CD5;</p>
    <pre><code class="lang-python">from rest_framework_jwt.settings import api_settings

    class CreateUserSerializer(serializers.ModelSerializer):
        &quot;&quot;&quot;
        &#x521B;&#x5EFA;&#x7528;&#x6237;&#x5E8F;&#x5217;&#x5316;&#x5668;
        &quot;&quot;&quot;
        ...
        token = serializers.CharField(label=&apos;&#x767B;&#x5F55;&#x72B6;&#x6001;token&apos;, read_only=True)  # &#x589E;&#x52A0;token&#x5B57;&#x6BB5;

        class Meta&#xFF1A;
            ...
            fields = (&apos;id&apos;, &apos;username&apos;, &apos;password&apos;, &apos;password2&apos;, &apos;sms_code&apos;, &apos;mobile&apos;, &apos;allow&apos;, &apos;token&apos;)  # &#x589E;&#x52A0;token
            ...

        def create(self, validated_data):
            &quot;&quot;&quot;
            &#x521B;&#x5EFA;&#x7528;&#x6237;
            &quot;&quot;&quot;
            # &#x79FB;&#x9664;&#x6570;&#x636E;&#x5E93;&#x6A21;&#x578B;&#x7C7B;&#x4E2D;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x5C5E;&#x6027;
            del validated_data[&apos;password2&apos;]
            del validated_data[&apos;sms_code&apos;]
            del validated_data[&apos;allow&apos;]
            user = super().create(validated_data)

            # &#x8C03;&#x7528;django&#x7684;&#x8BA4;&#x8BC1;&#x7CFB;&#x7EDF;&#x52A0;&#x5BC6;&#x5BC6;&#x7801;
            user.set_password(validated_data[&apos;password&apos;])
            user.save()

            # &#x8865;&#x5145;&#x751F;&#x6210;&#x8BB0;&#x5F55;&#x767B;&#x5F55;&#x72B6;&#x6001;&#x7684;token
            jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
            jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
            payload = jwt_payload_handler(user)
            token = jwt_encode_handler(payload)
            user.token = token

            return user
    </code></pre>
    <h4 id="&#x524D;&#x7AEF;&#x4FDD;&#x5B58;token">&#x524D;&#x7AEF;&#x4FDD;&#x5B58;token</h4>
    <p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5C06;JWT&#x4FDD;&#x5B58;&#x5728;cookie&#x4E2D;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x4FDD;&#x5B58;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x7684;&#x672C;&#x5730;&#x5B58;&#x50A8;&#x91CC;&#xFF0C;&#x6211;&#x4EEC;&#x4FDD;&#x5B58;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x672C;&#x5730;&#x5B58;&#x50A8;&#x4E2D;</p>
    <p>&#x6D4F;&#x89C8;&#x5668;&#x7684;&#x672C;&#x5730;&#x5B58;&#x50A8;&#x63D0;&#x4F9B;&#x4E86;sessionStorage &#x548C; localStorage &#x4E24;&#x79CD;&#xFF1A;</p>
    <ul>
    <li><strong>sessionStorage</strong>  &#x6D4F;&#x89C8;&#x5668;&#x5173;&#x95ED;&#x5373;&#x5931;&#x6548;</li>
    <li><strong>localStorage</strong>  &#x957F;&#x671F;&#x6709;&#x6548;</li>
    </ul>
    <p>&#x4F7F;&#x7528;&#x65B9;&#x6CD5;</p>
    <pre><code class="lang-js">sessionStorage.&#x53D8;&#x91CF;&#x540D; = &#x53D8;&#x91CF;&#x503C;   <span class="hljs-comment">// &#x4FDD;&#x5B58;&#x6570;&#x636E;</span>
    sessionStorage.&#x53D8;&#x91CF;&#x540D;  <span class="hljs-comment">// &#x8BFB;&#x53D6;&#x6570;&#x636E;</span>
    sessionStorage.clear()  <span class="hljs-comment">// &#x6E05;&#x9664;&#x6240;&#x6709;sessionStorage&#x4FDD;&#x5B58;&#x7684;&#x6570;&#x636E;</span>

    localStorage.&#x53D8;&#x91CF;&#x540D; = &#x53D8;&#x91CF;&#x503C;   <span class="hljs-comment">// &#x4FDD;&#x5B58;&#x6570;&#x636E;</span>
    localStorage.&#x53D8;&#x91CF;&#x540D;  <span class="hljs-comment">// &#x8BFB;&#x53D6;&#x6570;&#x636E;</span>
    localStorage.clear()  <span class="hljs-comment">// &#x6E05;&#x9664;&#x6240;&#x6709;localStorage&#x4FDD;&#x5B58;&#x7684;&#x6570;&#x636E;</span>
    </code></pre>
    <p>&#x5728;&#x524D;&#x7AEF;js/register.js&#x6587;&#x4EF6;&#x4E2D;&#x589E;&#x52A0;&#x4FDD;&#x5B58;token</p>
    <pre><code class="lang-js"><span class="hljs-keyword">var</span> vm = <span class="hljs-keyword">new</span> Vue({
        ...
        methods: {
            ...
            on_submit: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
                axios.post(...)
                    .then(response =&gt; {
                        <span class="hljs-comment">// &#x8BB0;&#x5F55;&#x7528;&#x6237;&#x7684;&#x767B;&#x5F55;&#x72B6;&#x6001;</span>
                        sessionStorage.clear();
                        localStorage.clear();
                        localStorage.token = response.data.token;
                        localStorage.username = response.data.username;
                        localStorage.user_id = response.data.id;
                        location.href = <span class="hljs-string">&apos;/index.html&apos;</span>;
                    })
                    .catch(...)
            }
        }
    })
    </code></pre>
                        
                        </section>
                    
                    
                    </div>
                </div>
            </div>

            
            <a href="../C02-Users/JWT.html" class="navigation navigation-prev " aria-label="Previous page: JWT"><i class="fa fa-angle-left"></i></a>
            
            
            <a href="../C02-Users/Login.html" class="navigation navigation-next " aria-label="Next page: 登录"><i class="fa fa-angle-right"></i></a>
            
        </div>
    </div>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值