Как обрабатывать конкретные цены моделей в Django с Stripe - PullRequest
0 голосов
/ 05 января 2019

Итак, вот мой код в первую очередь. Я новичок в Django и пытаюсь создать сайт электронной коммерции. Это работает так, что администратор создает продукты, а пользователи заходят на сайт и покупают их. Сайт использует Stripe для обработки платежей.

views.py:

    from django.shortcuts import render
    from django.views import generic
    from django.core.paginator import Paginator
    from django.conf import settings
    import stripe
    import decimal

    stripe.api_key = settings.STRIPE_SECRET_KEY

    from .models import Product
    # Create your views here.
    class ProductListView(generic.ListView):
        model = Product
        paginate_by = 3
        def get_context_data(self, **kwargs): # new
            context = super().get_context_data(**kwargs)
            context['key'] = settings.STRIPE_PUBLISHABLE_KEY
            return context

    def charge(request):
        if request.method == 'POST':
            charge = stripe.Charge.create(
                amount=round(decimal.Decimal(request.POST['price'])),
                currency='usd',
                description='A Django charge',
                source=request.POST['stripeToken']
            )
        return render(request, 'store/charge.html')


product_list.html:

{% extends 'home/base_generic.html' %}
{% load static %}
{% load cool_paginate %}
{% block add %}
  <link rel="stylesheet" href="{% static 'store/css/products.css'%}">
{% endblock %}
{% block title %} <title> Store </title> {% endblock %}
{% block content %}
<div class="row">
{% for product in product_list %}
<div class="col-sm-4">
  <div class="card" id="django-card" style="width: 300px; height: 350px;">
    <img class="card-img-top" src="{{ product.image.url }}" height=150px width=150px>
    <div class="card-body">
      <h5 class="card-title">{{ product.name }}</h5>
      <p class="card-text">
        {{ product.description }} And only {{ product.price }}!
      </p>
      <form action="{% url 'charge' %}" method="post">
        {% csrf_token %}
        <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
          data-key="{{ key }}"
          data-description="A Django Charge"
          data-amount= "{{ product.price_in_cents }}"
          data-locale="auto">
        </script>
        <input type="hidden" name="price" value="{{ product.price_in_cents }}">
      </form>
    </div>
  </div>
</div>
{% endfor %}
<div class="container-fluid">
  <div style="margin-top: 50px;"> {% cool_paginate page_obj=product %}</div>
</div>
</div>
{% endblock %}

Итак, мой вопрос: когда пользователь выбирает продукт для покупки, как мне узнать, как использовать эту цену продукта? Я делал это, используя скрытое поле значения html во входных данных. Но это не может быть безопасно. Спасибо всем, кто нашел время, чтобы ответить.

1 Ответ

0 голосов
/ 06 января 2019

Хорошо, после нескольких изнурительных часов работы я решил это. Я решил сохранить форму скрытого поля, но вместо того, чтобы использовать цену, я использовал ее для возврата первичного ключа продукта. Который я использовал во взгляде, чтобы захватить цену и сделать обвинения.

...