2017-05-13 2 views
0

django restフレームワークのクラスベースのビューでは、デフォルトでgetやpostなどの関数があります。私たち自身の機能を追加しますか?可能であれば、それをURLでどのように参照するのか。django rest frameworkのクラスベースのビューに新しい関数を追加することは可能ですか?

私の必要な機能

def get_user_by_name(request, name, format=None): 
    jobseekers = JobSeeker.objects.filter(name=name) 
    serializer = JobseekerSerializer(jobseekers, many=True) 
    return Response(serializer.data) 

def get_user_by_email(request, email, format=None): 
    jobseekers = JobSeeker.objects.filter(email=email) 
    serializer = JobseekerSerializer(jobseekers, many=True) 
    return Response(serializer.data) 

def get_user_by_school(request, school, format=None): 
    schools = SchoolDetails.objects.filter(school=school) 
    jobseekers = JobSeeker.objects.filter(email=email) 
    serializer = JobseekerSerializer(jobseekers, many=True) 
    return Response(serializer.data) 

def get_user_by_email(request, email, format=None): 
    jobseekers = JobSeeker.objects.filter(email=email) 
    serializer = JobseekerSerializer(jobseekers, many=True) 
    return Response(serializer.data) 
+0

あなたはいつもあなたが話している機能はどのような継承 – latsha

+0

で任意の関数をオーバーライドすることができますか?あなたはget、put、post、patchなどを持っています。すべての標準タイプを処理します。 –

+0

@TimmSimpkins。 get_search_by_nameのような関数を追加したい場合は、指定された名前のレコードを検索し、結果を送信しますか? –

答えて

1

はあなたのビューでtype変数を渡し、および利用可能なHTTPメソッドを使用します。あなたがデータを収集しているように見えるので、通常はGETメソッドが使用されますが、あなたが望むどんなメソッドでも真実に使用できます。 GETメソッドを使用すると、変数をURLに配置することもできます(必要な場合)。

タイプ変数をリクエストに入れたら、ifステートメントを使用して、その処理方法を判断できます。

リクエストの種類ごとに異なるビューを作成することもできますが、それは過度のものである可能性があります。

これは、GETメソッドの使用を想定した例である:

class foo(APIView): 
    # This uses the GET method. POST, PUT, PATCH etc. would use 
    # def post(...), def put(...)... 
    def get(self, request, format=None): 
     # Check what type of request is being made and return the proper response. 
     if request.POST['type'] == 'get_user_by_name': 
      jobseekers = JobSeeker.objects.filter(name=request.POST['name']) 
      serializer = JobseekerSerializer(jobseekers, many=True) 
      return Response(serializer.data) 
     elif request.POST['type'] == 'get_user_by_email': 
      jobseekers = JobSeeker.objects.filter(email=email) 
      serializer = JobseekerSerializer(jobseekers, many=True) 
      return Response(serializer.data) 
     elif ... 
+0

私は何かをするためにこのコードを吟味しませんでした。私は単にあなたのものをコピーして貼り付けました。 –

関連する問題