Django RESTフレームワークの概要:例を使用した開発
公開: 2020-10-05Django 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卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、トップ企業との仕事の支援。