繁体   English   中英

Django 访问令牌匹配查询不存在

[英]Django Access Token Matching Query Does Not Exist

我有以下代码要测试:

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 if customer has a order that is not delivered
        if Order.objects.filter(customer = customer).exclude(status = Order.DELIVERED):
            return JsonResponse({"status": "fail", "error": "Your Last Order must be completed"})

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

        # Ger Order Details
        order_details = json.load(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.PENDING,
                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"})

我在 Postman 中输入参数,并使用在 django 中显示有效的访问令牌,并且还没有过期。 我正在使用 rest 框架,function 用于 API。

我使用以下 function 创建访问令牌:

def create_user_by_type(backend, user, response, *args, **kwargs):
    request = backend.strategy.request_data()
    if backend.name == 'facebook':
        avatar = 'https://graph.facebook.com/%s/picture?type=large' % response['id']

    if request.get("user_type") == "driver" and not Driver.objects.filter(user_id=user.id):
        Driver.objects.create(user_id=user.id, avatar = avatar)
    elif not Customer.objects.filter(user_id=user.id):
        Customer.objects.create(user_id=user.id, avatar = avatar) 

此外, if request.get("user_type") == "driver" and not Driver.objects.filter(user_id=user.id):之前有一个错误,因为我的格式过时request["user_type"] 不确定这是否是我想要执行的正确语法,但我可以通过 Postman 创建访问令牌。

问题是我使用 Postman 中的参数输入访问令牌和其他信息,而不是它应该在“正文”中并选择了表单数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM