ジャンゴレストフレームワークの紹介


名前に値するウェブ開発者は、REST APIを作成することができなければなりません.
第1部では、Python言語とDjango RESTフレームワークを使用して最初のAPIを構築するために知っているすべてのことを理解するのに役立ちます.
第2部ではAPIを確保します.結局のところ、すべてのアクション(削除)は、承認することができます.残りのフレームワーク認証、トークン、パーミッションをAPIに追加します.
何かを見逃すことができないために、以下をクリックしてください/さえずりの上で私に従ってください

次のステップは何ですか.
次のステップはAPIを確保することです.
今まで、私たちのURLを知っている人は、読み取り、作成、更新、および削除する要求を私たちのAPIに送信することができます.良い!
したがって、目標は、作成、更新、および削除を許可することです
認証されたユーザだけのポストで、彼ら自身のポストを更新して、削除するのを許すだけです
リクエストユーザのアイデンティティが何であるかを決定するために、私たちはまた、API

RESTフレームワークにおける認証作業
RESTフレームワークで認証を管理する方法はいくつかあります.
この記事では、よく使われるものを示します.トークン認証

トークン認証とは
トークン認証は、ユーザーが自分のIDを確認することができます.トークンの寿命の間、ユーザーはそれからトークンが発行されたAPIにアクセスします.そして、彼らが同じAPIに戻るたびに資格証明書を再入力しなければならないよりはむしろ.
Authトークンは、スタンプ付きのチケットのように働きます.トークンが有効なままである限り、ユーザーはアクセスを保持します.
トークンベースの認証は、従来のパスワードベースまたはサーバーベースの認証技術とは異なります.トークンは、セキュリティの2番目の層を提供し、管理者は、各アクションとトランザクションを詳細に制御している.
要するに、ログイン要求(Ex : API/ログイン)をするとき、我々のAPIはあなたにトークンを与えます.
次に、このトークンを使用してAPIによって保護された特定のアクションへのアクセスを可能にします.

トークンの使い方
トークンを使用するには、リクエストヘッダーに「承認」キーを追加する必要があります.
'Authorization' : 'Token 622af924b5e828dd35dd6'
ここでは、post - no 3を削除するjavascript fetch ()の例を示します.
const token = 'YOUR_TOKEN_HERE';
const response = await fetch('api/posts/3', {
    method: 'DELETE',
    headers: {
      Authorization: `Token ${token}`
    },
  });

RESTフレームワークでトークンベースAuthを実装する
このパターンをAPIに実装するには2つのことが必要です.
まず、ログインAPIエンドポイントを作成する必要があります.そのログインはユーザーを認証して、トークンを返します.
第二に、認証されたユーザだけが自分の投稿でそれらのアクションを実行できるように、アップデートと削除APIエンドポイントを変更する必要があります.これは、RESTフレームワークの認可とパーミッションクラスで実装されます

ログイン終了点を作成する
残りのフレームワークが既に私たちのために作成されたログインビューを持っているので、その部分はかなり簡単になります.
「フォルダ」アプリケーションフォルダで、「開く」ビューを開きます.pyこのコードを追加する
from rest_framework.authtoken.views import ObtainAuthToken 
from rest_framework.settings import api_settings

class UserLoginApiView(ObtainAuthToken):
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
簡単にするため、ログインビューに関連するコードのみを表示します.
このUserLoginPaViewは、ログインビューを作成するすべてのコードと、ユーザーを認証し、トークンを返すすべてのメソッドを含むObtainAutoTokenから継承します.
次に、このログインビューを指すURLを作成する必要があります
オープンポストアプリケーションのURL.PyとこのURLパスを追加します.
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import PostViewSet, UserLoginApiView

router = DefaultRouter()
router.register('posts', PostViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path('login/', UserLoginApiView.as_view()),
]
最後に、REST Framework Authライブラリを使用するには、「RESTORNフレームワーク」への参照を追加する必要があります.プロジェクトの設定に' authtoken '.Pyファイル.
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'posts',
    'rest_framework.authtoken',
]
' migrate '端末コマンドを再実行する
python manage.py migrate
このアクションは、AuthToken関数をサポートするデータベーステーブルを作成します
すべてのコードが正しい場合は、サーバーを起動し、API/ログインをご覧ください
python manage.py runserver

あなたのスーパーユーザー資格を使用することができます(我々は、一部のログイン)をログインします.
必要に応じて管理パネルでユーザーを追加することもできます.
ログインしたら、APIはトークンを返します


APIエンドポイントの更新と削除の許可とパーミッションを追加する
ここでは目的はAPIへのアクセスを制限することです.特に、更新と削除のアクション.認証されたユーザだけがこれらのアクションを実行できるようになります.
しかし、認証されたユーザがポストの作者であるかどうかチェックする必要もあります.のみ自分の投稿の著者は、更新を行うと削除要求を行うことができます.

許可クラス
RESTフレームワークには、パーミッションを管理するクラスがあります.我々は、1つを作成し、アクセス許可クラスをAPIビューに関連付けます
ポストアプリケーションフォルダーの下に新しいファイルを作成し、そのパーミッション名を指定します.Pyそのファイルの中に次のコードを追加します.
from rest_framework import permissions

class UpdateOwnProfile(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True

        return obj.user.id == request.user.id
実行するアクションが"safe "( request . method Permissions . safeRoundメソッド)と見なされた場合、それを実行できます( trueを返します).
一方、アクションが安全でない(作成、更新、削除動作)しない場合、認証されたユーザと投稿の作者が同じであることを確認します.

APIへのバインド許可
我々の許可オブジェクトが作成されたので、我々はそれを我々のAPIに縛ることができます.
「フォルダ」アプリケーションフォルダで、「開く」ビューを開きます.Pyと追加します.
from rest_framework import viewsets
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticatedOrReadOnly

from .models import Post
from .serializers import PostSerializer
from .permissions import UpdateOwnProfile

class PostViewSet(viewsets.ModelViewSet):
    serializer_class = PostSerializer
    authentication_classes = (TokenAuthentication,)
    permission_classes = (
        UpdateOwnProfile,
        IsAuthenticatedOrReadOnly,
    )
    queryset = Post.objects.all()
ここで2つ追加します.まずはAuthatetificationRankクラスをTokenAutitificationに設定し、PermissionShellクラスをカスタムアクセス許可クラスに設定します.IsAuthenticedReadOnlyは、認証されたユーザーが任意のリクエストを実行できるようにします.リクエストメソッドがget(read post)の“safe”メソッドのいずれかであるなら、権限を与えられていないユーザの要求は許可されます.

APIのテスト
私たちのAPIは現在、それを試してみる時間です安全です.
今回は、ブラウザでAPIをテストすることはできません.なぜなら、Authには、リクエストでトークンを送る方法が必要です.
APIテストアプリケーションを使用します.Postmanは、最も使用されるアプリの一つですが、今日私はVSCode拡張コールサンダークライアントを使用します.それは簡単にインストールして使用する郵便配達人のライトバージョンです

インストールクライアント
VSCodeから、拡張に移動し、検索し、サンダークライアントアプリケーションをインストールします.

一度インストールすると、アプリを開き、[新規リクエスト]ボタンをクリックし、テストするためのAPI URLを入力します


ログインとトークン例
ログインするには、API/ログインに資格情報を投稿要求を行う必要があります.最初に、「新規リクエスト」ボタンをクリックし、リクエストタイプのドロップダウンからPOSTを選択し、リクエストURLを入力します.
{
    "username": "ericthecoder",
    "password": "yourpassword"
}
「送信」をクリックし、右側の応答セクションは受信したトークンを表示します


新しい投稿を作成
トークンを持っているので、許可を必要とするアクションを行うことができます.それで、新しいポストをつくりましょう.
「新規リクエスト」をクリックし、ドロップダウンから投稿を選択し、CREATE POST URLを入力します.「body」タブをクリックし、「Create Post JSONコンテンツ」を入力します.
{
    "title": "My First Blog Title",
    "body": "My first Blog body Content",
    "user": 1
}
をクリックし、APIは401不正なメッセージを返します.私たちがリクエストでトークンを送らなかったので、それは普通です.

そのためには、ヘッダータブをクリックし、認証キーとトークンを追加します

をクリックして'送信'と今すぐポストを作成する


すべてのAPI終了点をテストする
今すぐにトークンを使用すると、すべてのAPIエンドポイントをテストすることができます.
POST api/login/ (login with credentials)

GET api/posts (Read all post)
POST api/posts/ (Create a new post)

GET api/posts/1/ (Read a specific Post)
PUT api/posts/1/ (Update a specific Post)
PATCH api/posts/1/ (Partial Update a specific Post)
DELETE api/posts/1/ (Delete a specific Post)

パート2の終わり
今日はこれで終わりです.これで、安全なAPIを、次の部分では、我々は検索、ページ化と画像のアップロードを議論します.
何かを見逃すことは、以下をクリックしてください.