Lập trình Web: Python: Django: Xây dựng cửa hàng trực tuyến với Oscar-Paypal, phần 5

13. Tạo migration và di chuyển dữ liệu

python manage.py makemigrations paypal
python manage.py migrate

14. Tùy biến khuôn mẫu

Bạn tạo các thư mục:

mkdir -p templates/basket/partials/
mkdir templates/checkout/

Sau đó tạo các tệp khuôn mẫu với nội dung tương ứng như sau:

templates/basket/partials/basket_content.html

{% extends 'oscar/basket/partials/basket_content.html' %}
{% load i18n %}

{% block formactions %}
<div class="form-actions">
    {% if anon_checkout_allowed or request.user.is_authenticated %}
        {% if basket.total_excl_tax > 0 %}
            <a href="{% url 'paypal-redirect' %}">
                <img src="https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif" align="left" style="margin-right:7px;">
            </a>
        {% endif %}
    {% endif %}
    <a href="{% url 'checkout:index' %}" class="pull-right btn btn-large btn-primary">{% trans "Proceed to checkout" %}</a>
</div>
{% endblock formactions %}

templates/checkout/payment_details.html

{% extends 'oscar/checkout/payment_details.html' %}
{% load i18n %}

{% block payment_details %}
    <div class="well">
        <div class="sub-header">
            <h3>{% trans "PayPal Express" %}</h3>
        </div>
        <p>{% trans "Click on the below icon to use Express Checkout but where the shipping address and method is already chosen on the merchant site." %}</p>
        <div style="overflow:auto"><a href="{% url 'paypal-direct-payment' %}" title="{% trans "Pay with PayPal" %}"><img src="https://www.paypal.com/en_US/i/logo/PayPal_mark_37x23.gif" align="left" style="margin-right:7px;"></a>
        </div>
    </div>

    <div class="well">
        <div class="sub-header">
            <h3>{% trans "PayPal PayFlow Pro" %}</h3>
        </div>
        <form method="post" action="{% url 'checkout:preview' %}" class="form-stacked">
            {% csrf_token %}
            <h4>{% trans "Bankcard" %}</h4>
            {% include "partials/form_fields.html" with form=bankcard_form %}
            <h4>{% trans "Billing address" %}</h4>
            {% include "partials/form_fields.html" with form=billing_address_form %}
            <div class="form-actions">
                <button type="submit" class="btn btn-large btn-primary">{% trans "Continue" %}</button>
            </div>
        </form>
    </div>

{% endblock %}

templates/checkout/preview.html

{% extends 'oscar/checkout/preview.html' %}
{% load currency_filters %}
{% load i18n %}

{% block payment_method %}
    <div class="span6">
    <div class="sub-header">
        <h2>{% trans "Payment" %}</h2>
    </div>
    <div class="well well-success">
        <p>{% blocktrans with amount=order_total.incl_tax|currency %}<strong>{{ amount }} will be debited from your bankcard.{% endblocktrans %}</p>
        <div class="alert-actions">
            <a href="{% url 'checkout:payment-details' %}" class="btn">{% trans "Change payment details" %}</a>
        </div>
    </div>
</div>
{% endblock %}

{% block hiddenforms %}
    {{ bankcard_form.as_p }}
    {{ billing_address_form.as_p }}
{% endblock %}

15. Cập nhật URLconf

Chúng ta đã xây dựng chương trình thanh toán cụ thể. Nó hoạt động trên mẫu URL mà cần được bổ sung. Ngoài ra, chúng ta thêm hai mẫu URL cho menu PayPal trong Dashboard:

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib import admin

from apps.app import application
from paypal.payflow.dashboard.app import application as payflow
from paypal.express.dashboard.app import application as express_dashboard

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^i18n/', include('django.conf.urls.i18n')),
]

urlpatterns += i18n_patterns(
    url(r'^', application.urls),

    # PayPal Express integration...
    url(r'^checkout/paypal/', include('paypal.express.urls')),
    # Dashboard views for Payflow Pro
    url(r'^dashboard/paypal/payflow/', include(payflow.urls)),
    # Dashboard views for Express
    url(r'^dashboard/paypal/express/', include(express_dashboard.urls)),
)

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

Bình luận về bài viết này