Django RESTフレームワークの概要:例を使用した開発

公開: 2020-10-05

Django RESTフレームワークは、ユーザーがRESTfulAPIの開発を開始するために必要となる可能性のある標準のPythonパッケージとして広く配布されています。 洗練され、パワフルで、驚くほど使いやすく、魅力的で閲覧可能なAPIバージョンを提供します。 Django RESTフレームワークは、JSONオブジェクトを返すオプションを提供します。 このフレームワークは、モデルの強力なシリアル化を提供し、完全なRESTビューアーで基本的な関数ベースのビューを使用してデータを表示します。 以下DjangoRESTフレームワークについて詳しく知ってください

目次

Django RESTフレームワークとは何ですか?

Django REST Frameworkは、開発者がWebAPIを簡単に構築できるようにする柔軟で堅牢なツールキットです。 また、APIのクラスベースの一般化されたビューとシリアライザーも提供します。 ソースコードであるため、DRFと略されます。これは、Webアプリケーションプログラミングインターフェイスを開発するためのPythonライブラリを表します。 この記事のように、ステップバイステップの手順で開発APIについて話します。

ただし、ガイドを開始する前に、フレームワークがさらに重要である理由を理解することが重要です。 利用可能なフレームワークの多くにより、開発者はブロックアプリケーション用のAPIを簡単に構築できますが、DjangoRESTフレームワークが推奨されます。 このフレームワークは、さまざまな方法で使用するのに便利であり、以下の利点を提供します-

  • それはウェブブラウザに有能なアプリケーションプログラミングインターフェースを提供し、それは開発者にとって大きな勝利です
  • OAuth1、OAuth2などのパッケージを含む認証ポリシーがあります
  • その中のシリアル化プロセッサは、ORMおよび非ORMデータソースをサポートします
  • このフレームワークには広範なドキュメントがあり、優れたコミュニティサポートを提供します
  • これは、Mozilla、Heroku、RedHatなどの優れたプラットフォームで利用および信頼されています。

読む: Djangoアプリケーション:あなたが知る必要があるすべて

DjangoRESTフレームワーク開発を設定する

手始めに、オペレーティングシステムのPython依存関係をインストールする必要があります。 Windowsプラットフォームを使用している場合は、仮想ボックスまたは手動コマンドを使用して、Linuxプラットフォームをセカンダリオペレーティングシステムとして簡単にインストールできます。 フレームワークを進めるために、効果的で便利なPython管理ツールを使用できます。

ほとんどのツールは頼りになるヘルパーです。 これにより、開発者はPythonのバージョンをすばやく変更し、プロジェクト固有のバージョンを設定し、仮想環境を管理し、システムに複数のバージョンをインストールできます。 LinuxまたはMacオペレーティングシステムを使用している場合は、簡単にインストールできます。

Django RESTフレームワークの助けを借りて非RESTfulアプリケーションをRESTfulアプリケーションに変換できます。 これには、以下の手順が含まれます-

DRFセットアップ

DRFセットアップの場合、インストールする必要があります-

シェル

$ pip install djangorestframework

$pipフリーズ>requirements.txt

設定の更新:py:

Python

INSTALLED_APPS =(

'django.contrib.admin'、

'django.contrib.auth'、

'django.contrib.contenttypes'、

'django.contrib.sessions'、

'django.contrib.messages'、

'django.contrib.staticfiles'、

'トーク'、

'rest_framework'

)。

RESTful構造

RESTful API開発では、エンドポイントは、GET、PUT、POST、DELETEなどのメソッドを使用して、アプリケーションからの構造とユーザーアクセスを表します。 これらのエンドポイントは、要素とコレクションを中心に論理的に編成されており、どちらもリソースとしてカウントされます。 リソースが1つしかない場合は、対応するリンクが要素とコレクションのURLとして使用されます。

得る

役職

置く

消去

/ posts /

すべての投稿を表示

新しい投稿を追加

すべての投稿を更新する

すべての投稿を削除する

/ posts / <id>

<id>を表示

該当なし

<id>を更新します

IDを削除

シリアライザーとビュー

Django RESTフレームワークの主要な構成要素はシリアライザーであり、Djangoモデルに基づくさまざまなデータレコードの表現を詳しく説明するために使用されます。 シリアライザーは、フレームワークからモデルの動作を継承できる標準のPythonクラスです。

シリアライザークラス内には、同じフレームワークのパッケージのデータ型を利用する個別のフィールドセットがあります。 彼らはまた、フレームワークとクラスの類似点にも気づきました。 シリアライザークラス自体は考えず、RESTサービスロジックの大部分を管理するビューと統合されています。 さらに、シリアライザークラスを使用してデータを変換します。 たとえば、通常のDjangoビューメソッドは-

Coffeehouse.stores.modelsからインポートストア

coffeehouse.stores.serializersからStoreSerializerをインポートします

rest_framework.decoratorsからapi_viewをインポートします

rest_framework.responseからインポート応答

@api_view(['GET'、'POST'、'DELETE'])

def rest_store(request):

if request.method =='GET':

Stores = Store.objects.all()

serializer = StoreSerializer(stores、many = True)

Response(serializer.data)を返します

elif request.method =='POST':

…HTTPPOST操作の#logic

elif request.method =='DELETE':

…HTTPDELETE操作の#logic

クラスベースのビュー

クラスベースのビューの助けを借りて、 DjangoRESTフレームワークはユーザーの最高で複雑な機能へのアクセスを提供します。 クラスベースのビューは、真の本格的なPythonクラスの機能を提供し、オブジェクト指向プログラミングの原則を利用してDjangoビューを簡単に操作できるようにすることで、再利用性を高め、実装時間を短縮します。

Djangoクラスベースのビューは、Djangoビューを構築するための強力なアプローチを強調しており、APIの構築に使用されるメソッドの代替手段でもあります。 クラスベースのビューを開発するには、他のクラスの1つから継承できるクラスを作成することが重要です。 例えば:

#views.py

Django.views.genericからインポートTemplateView

クラスAboutIndex(TemplateView):

template_name ='index.html'

def get_context_data(self、** kwargs):

#** kwargsには、キーワードコンテキスト初期化値(存在する場合)が含まれます

#ベース実装を呼び出してコンテキストを取得する

context = super(AboutIndex、self).get_context_data(** kwargs)

#テンプレートに渡すコンテキストデータを追加する

context ['aboutdata']='カスタムデータ'

コンテキストを返す

#urls.py

からcoffeehouse.about.viewsインポートAboutIndex

django.urlsインポートパスから

urlpatterns = [

path('about / index /'、AboutIndex.as_view()、{'onsale':True})、

チェックアウト:初心者向けのDjangoインタビューの質問と回答トップ12

ビューを更新

RESTfulアプリケーション構造に合わせるには、現在のビューをリファクタリングすることが重要です。 これらのビューをコメントアウトして、次のように追加できます-

Python

django.shortcutsからインポートレンダリング

django.httpからインポートHttpResponse

rest_framework.decoratorsからapi_viewをインポートします

rest_framework.responseからインポート応答

talk.modelsからインポート投稿

talk.serializersからPostSerializerをインポートします

talk.formsからPostFormをインポートします

def home(request):

tmpl_vars = {'form':PostForm()}

戻り値render(request、'talk / index.html'、tmpl_vars)

@api_view(['GET'])

def post_collection(request):

if request.method =='GET':

投稿=Post.objects.all()

serializer = PostSerializer(posts、many = True)

Response(serializer.data)を返します

@api_view(['GET'])

def post_element(request、pk):

試す:

post = Post.objects.get(pk = pk)

Post.DoesNotExistを除く:

HttpResponse(status = 404)を返します

if request.method =='GET':

シリアライザー=PostSerializer(post)

Response(serializer.data)を返します

説明

  • 上記の手順では、@api_viewデコレータが対応するHTTPリクエストを分析します。これはview関数に渡されます。
  • これで、ビューは要素用の場合は単一の投稿を使用するか、コレクション用の場合はデータ全体を取得します
  • 最後に、データはJSONにシリアル化され、それに応じて返されます

WebBrowsableAPIまたは更新されたURL

Python用に更新されたURLは次のとおりです。

#トークURL

django.conf.urlsからインポートパターン、URL

urlpatterns = pattern(

'talk.views'、

url(r'^ $'、'home')、

#api

url(r'^ api / v1 / posts / $'、'post_collection')、

url(r'^ api / v1 / posts /(?P <pk> [0-9] +)$'、'post_element')

)。

RESTfulAPI統合のためのリファクタリング

これには、次のような主要なHTTPメソッドが含まれます。

得る

最初のページの読み込みでは、投稿を表示することが重要です。そのためには、次のリクエストを追加できます。

load_posts()

//ページの読み込み時にすべての投稿を読み込みます

関数load_posts(){

$ .ajax({

url:“ api / v1 / posts /”、//エンドポイント

タイプ:“ GET”、//httpメソッド

//成功した応答を処理します

成功:function(json){

for(var i = 0; i <json.length; i ++){

console.log(json [i])

$(“#talk”)。prepend(“ <li id ='post-“ + json [i] .id +”'> <strong>” + json [i] .text +” </ strong> – <em>“ + json [i] .author +” </ em> – <span>“ + json [i] .created +

“ </ span> – <a id='delete-post-“ + json [i] .id +”'> delete me </a> </ li>”);

}

}、

//失敗した応答を処理します

エラー:function(xhr、errmsg、err){

$('#results')。html(“ <​​div class ='alert-box alert radius' data-alert>おっと!エラーが発生しました:“ + errmsg +

” <a href='#' class='close'>&times; </a> </ div>”); //エラーをdomに追加します

console.log(xhr.status +“:” + xhr.responseText); //エラーに関するもう少し情報をコンソールに提供します

}

});

};

役職

POSTリクエストは同様の方法で管理され、ビューを更新することでこれをテストできます。 views.pyでpost_collection()関数を更新できます。

@api_view(['GET'、'POST'])

def post_collection(request):

if request.method =='GET':

投稿=Post.objects.all()

serializer = PostSerializer(posts、many = True)

Response(serializer.data)を返します

elif request.method =='POST':

data = {'text':request.DATA.get('the_post')、'author':request.user.pk}

シリアライザー=PostSerializer(data = data)

serializer.is_valid()の場合:

serializer.save()

Response(serializer.data、status = status.HTTP_201_CREATED)を返します

Response(serializer.errors、status = status.HTTP_400_BAD_REQUEST)を返します

また読む:インドのDjango開発者給与

結論

実際のDjangoRESTフレームワークのREST部分は非常に単純であり、要求を処理するためにpost要素関数を更新するだけです。 それでもクエリがある場合は、即興用のDjangoRESTフレームワークとリソースがいくつかあります。

Djangoやその他のフルスタック開発者の言語とツールについて詳しく知りたい場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のPGディプロマをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニングを提供します。 9以上のプロジェクトと割り当て、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。

未来のキャリアに備える

フルスタックソフトウェア開発におけるアップグレードおよびIIIT-BANGALOREのPGディプロマ
今すぐ登録