質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.07%

Django: Facebookで発行したアクセストークンをPostmanでテストしたら「AccessToken matching query does not exist」と返ってきてしまう

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 903

takumiURIRIN

score 10

前提・実現したいこと

Python(Django)でUBER EATs風のアプリを作っています。

注文を追加するAPIをPostmanでテストした際に「AccessToken matching query does not exist.」というエラーが発生してしまっています。

アクセストークンはFacebookで発行したものです。 
https://developers.facebook.com/tools/accesstoken

発生している問題・エラーメッセージ

DoesNotExist at /api/customer/order/add/
AccessToken matching query does not exist.
Request Method:    POST
Request URL:    http://localhost:8000/api/customer/order/add/?access_token=kNhEuvGmjPbXw1jaN3GIwWKrLyRuTv&restaurant_id=1&address=17%20BKK1&order_details=[%7B%22meal_id%22:%201,%20%22quantity%22:%202%7D]
Django Version:    1.11.4
Exception Type:    DoesNotExist
Exception Value:    
AccessToken matching query does not exist.
Exception Location:    /Users/admin/Desktop/myvirtualenv/foodtasker/lib/python3.6/site-packages/django/db/models/query.py in get, line 380
Python Executable:    /Users/admin/Desktop/myvirtualenv/foodtasker/bin/python
Python Version:    3.6.0
Python Path:    
['/Users/admin/Desktop/foodtasker',
 '/Users/admin/.pyenv/versions/3.6.0/lib/python36.zip',
 '/Users/admin/.pyenv/versions/3.6.0/lib/python3.6',
 '/Users/admin/.pyenv/versions/3.6.0/lib/python3.6/lib-dynload',
 '/Users/admin/Desktop/myvirtualenv/foodtasker/lib/python3.6/site-packages']
Server time:    Wed, 16 Aug 2017 12:53:34 +0000

該当のソースコード

@csrf_exempt
def customer_add_order(request):
    """
        params:
            access_token
            restaurant_id
            address
            order_details (json format), example:
                [{"meal_id": 1, "quantity": 2},{"meal_id": 2, "quantity": 3}]
            stripe_token

        return:
            {"status": "success"}
    """

    if request.method == "POST":
        # Get token
        access_token = AccessToken.objects.get(token = request.POST.get("access_token"),
            expires__gt = timezone.now())

        # Get profile
        customer = access_token.user.customer

        # Check whether customer has any order that is not delivered
        if Order.objects.filter(customer = customer).exclude(status = Order.DELIVERED):
            return JsonResponse({"status": "failed", "error": "Your last order must be completed."})

        # Check Address
        if not request.POST["address"]:
            return JsonResponse({"status": "failed", "error": "Address is required."})

        # Get Order Details
        order_details = json.loads(request.POST["order_details"])

        order_total = 0
        for meal in order_details:
            order_total += Meal.objects.get(id = meal["meal_id"]).price * meal["quantity"]

        if len(order_details) > 0:
            # Step 1 - Create an Order
            order = Order.objects.create(
                customer = customer,
                restaurant_id = request.POST["restaurant_id"],
                total = order_total,
                status = Order.COOKING,
                address = request.POST["address"]
            )

            # Step 2 - Create Order details
            for meal in order_details:
                OrderDetails.objects.create(
                    order = order,
                    meal_id = meal["meal_id"],
                    quantity = meal["quantity"],
                    sub_total = Meal.objects.get(id = meal["meal_id"]).price * meal["quantity"]
                )

            return JsonResponse({"status": "success"})

補足情報

python-3.6.0

dj-database-url==0.4.2
Django==1.11.4
gunicorn==19.7.1
olefile==0.44
Pillow==4.2.1
pytz==2017.2
whitenoise==3.3.0
psycopg2==2.6.2
django-rest-framework-social-oauth2==1.0.8
django-bootstrap3==9.0.0
djangorestframework==3.4.3

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

私も同じ勉強をしていて、同じ場所ではまりました。
Postmanでパラメタを設定する際に、
Authorization Headers Body raw binary
となっている部分の、Bodyを選択し、
その中でform-dataを選択してパラメタを指定するとうまくいくと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.07%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Pythonに関する質問
  • Django: Facebookで発行したアクセストークンをPostmanでテストしたら「AccessToken matching query does not exist」と返ってきてしまう