Django, le framework web full-stack (probablement) le plus utilisé en Python. Oscar, (probablement) le package EC le plus dynamique qui fonctionne sur ce Django.
J'ai écrit l'Oscar comme guide pour l'utiliser au Japon.
Documentation Django-Oscar: https://django-oscar.readthedocs.org/
Dépôt: https://github.com/django-oscar/django-oscar
Fonctions incluses depuis le début
Tel.
Il est relativement facile de désactiver des fonctionnalités telles que les avis. (Disponible dans les paramètres)
À propos, il n'inclut pas la fonction "point" qui est courante au Japon.
Si vous souhaitez étendre (hériter) de la fonction Oscar standard, utilisez une fonction appelée fork.
Tout d'abord, créez un répertoire tel que oscar_fork (ou myapps) directement sous le projet.
$ ./manage.py oscar_fork_app catalogue oscar_fork
Si vous exécutez, oscar_fork / catalog sera créé.
Dans ce module de fourche
Etc.
Par exemple, si vous souhaitez ajouter un champ miniature_url au catalogue.
oscar_fork/catalogue/models.py
from django.db import models
from oscar.apps.catalogue.abstract_models import AbstractProduct
class Product(AbstractProduct):
image_url = models.URLField(default='', blank=True)
thumbnail_url = models.URLField(default='', blank=True)
from oscar.apps.catalogue.models import * # noqa
Vers INSTALLED_APPS
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
....
]
INSTALLED_APPS += get_core_apps([
'oscar_fork.catalogue',
])
Étendez INSTALLED_APPS en écrivant.
Un fichier de migration peut être créé avec ./manage.py makemigrations
, utilisez donc ./manage.py migrate
pour migrer le schéma.
Si vous souhaitez agrandir la vue de votre panier (paiement)
$ ./manage.py oscar_fork_app checkout oscar_fork
après
python:oscar_fork/checkout.views.py
from oscar.apps.checkout import views
class IndexView(views.IndexView):
def get(self, request, *args, **kwargs):
#obtenir le traitement...
Vous pouvez écrire comme ça.
Également ajouté à INSTALLED_APPS
settings.py
INSTALLED_APPS += get_core_apps([
'oscar_fork.catalogue',
'oscar_fork.checkout',
])
Si vous souhaitez ajouter ou désactiver des URL, écrivez app.py.
$ ./manage.py oscar_fork_app customer oscar_fork
oscar_fork/customer/app.py
from oscar.apps.customer import app
class CustomerApplication(app.CustomerApplication):
def get_urls(self):
urls = [
# Login, logout and register doesn't require login
url(r'^login/$', self.login_view.as_view(), name='login'),
url(r'^logout/$', self.logout_view.as_view(), name='logout'),
# url(r'^register/$', self.register_view.as_view(),
# name='register'),
Vous pouvez le désactiver en commentant l'URL du registre.
Également ajouté à INSTALLED_APPS. (Détails omis)
settings.py
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
settings.py
OSCAR_DEFAULT_CURRENCY = 'JPY'
OSCAR_CURRENCY_FORMAT = '¤#,##0'
$ ./manage.py oscar_populate_countries
Ainsi, le modèle de pays (adresse_pays) contient les données initiales pour 249 pays.
Si is_shipping_country est défini sur 1 pour le Japon uniquement et 0 pour les autres, la sélection du nom du pays n'apparaîtra pas lors de l'enregistrement d'une adresse (le Japon sera la valeur par défaut).
Depuis le shell Django ou en SQL.
mysql> UPDATE address_country SET is_shipping_country = 0 WHERE printable_name != 'Japan';
How do I translate Oscar? — django-oscar 0.5 documentation https://django-oscar.readthedocs.org/en/releases-0.5/howto/how_do_i_translate_oscar.html
Reportez-vous ici
$ mkdir locale i18n
$ ln -s $PATH_TO_OSCAR i18n/oscar
$ ./manage.py makemessages --symlinks --locale=ja
(Si cela ne fonctionne pas, peut-être que gettext n'est pas installé. Dans mon cas (mac), j'avais besoin de brew install gettext --force)
Modifier les paramètres régionaux / ja / LC_MESSAGES / django.po
msgid "email address"
msgstr "adresse mail"
msgid "First name"
msgstr "Nom de famille"
msgid "Last name"
msgstr "Nom"
msgid "View basket"
msgstr "Voir le panier"
msgid "Basket total"
msgstr "montant total"
msgid "Basket total:"
msgstr "montant total:"
msgid "In stock"
msgstr "En stock"
msgid "Shipping"
msgstr "livraison"
msgid "Total"
msgstr "total"
msgid "Order total"
msgstr "montant total"
msgid "State/County"
msgstr "Préfectures"
msgid "City"
msgstr "Municipalité"
msgid "First line of address"
msgstr "Nom de la ville/Personnage/adresse"
msgid "Second line of address"
msgstr "bâtiment/numéro de chambre"
...
(* Prénom = nom de famille, nom = prénom est écrit intentionnellement et n'est pas faux. C'est plus facile à utiliser pour moi.)
Après avoir écrit le fichier po,
$ ./manage.py compilemessages
Pour créer un fichier mo. Le site est maintenant affiché en japonais.
La valeur par défaut est un taux d'imposition fixe de 0%. Le Japon a une taxe à la consommation de 8%, elle doit donc être modifiée.
Le taux de taxe est dans partner / strategy.py
$ ./manage.py oscar_fork_app partner oscar_fork
après,
oscar_fork/partner/strategy.py
from decimal import Decimal as D
from oscar.apps.partner import strategy
class Selector(object):
def strategy(self, request=None, user=None, **kwargs):
return JPStrategy()
class JP(strategy.FixedRateTax):
rate = D('0.08')
exponent = D('1.')
def pricing_policy(self, product, stockrecord):
if not stockrecord:
return prices.Unavailable()
rate = self.get_rate(product, stockrecord)
exponent = self.get_exponent(stockrecord)
tax = (stockrecord.price_excl_tax * rate).quantize(
exponent, rounding=ROUND_DOWN)
return prices.TaxInclusiveFixedPrice(
currency=stockrecord.price_currency,
excl_tax=stockrecord.price_excl_tax,
tax=tax)
def parent_pricing_policy(self, product, children_stock):
stockrecords = [x[1] for x in children_stock if x[1] is not None]
if not stockrecords:
return prices.Unavailable()
# We take price from first record
stockrecord = stockrecords[0]
rate = self.get_rate(product, stockrecord)
exponent = self.get_exponent(stockrecord)
tax = (stockrecord.price_excl_tax * rate).quantize(
exponent, rounding=ROUND_DOWN)
return prices.FixedPrice(
currency=stockrecord.price_currency,
excl_tax=stockrecord.price_excl_tax,
tax=tax)
class JPStrategy(strategy.UseFirstStockRecord, strategy.StockRequired,
JP, strategy.Structured):
pass
Vous pouvez l'écrire comme ça.
class JP(strategy.FixedRateTax):
rate = D('0.08')
J'ai écrit ceci. Dans ce cas, le montant après la virgule décimale est traité tel quel. Par exemple, dans le cas d'un produit de 70 yens HT, il est calculé en interne à 75,6 yens TTC. Considérez après le point décimal.
Ce n'était pas pratique pour mon service, donc je l'ai changé comme suit
class JP(strategy.FixedRateTax):
rate = D('0.08')
exponent = D('1.')
Arrondi au nombre entier le plus proche. Pour les produits de 70 yens hors taxes, il sera de 76 yens TTC.
Cette fois, je voulais tronquer après la virgule décimale, alors j'ai remplacé les méthodes pricing_policy
et parent_pricing_policy
et mis rounding = ROUND_DOWN
dans l'argument de la méthode quantize
de Decimal
.
Ce n'est pas un peu élégant de remplacer la méthode entière simplement parce que vous vouliez la tronquer. Y a-t-il un bon moyen?
Je me demande si cela peut être réalisé avec decimal.setcontext
. Je ne peux pas le faire parce que cela semble avoir d'autres effets.
Ajouté à INSTALLED_APPS comme d'habitude
settings.py
INSTALLED_APPS += get_core_apps([
...
'oscar_fork.partner',
])
Puisque vous pouvez écrire des branches, etc. avec la logique, vous pouvez également écrire des traitements compliqués. Droits de douane, etc.
Je pense qu'il peut être utilisé presque au Japon.
Le reste est la création et la traduction de modèles.
Au fait. La première page est en promotions.
Les vues sont ʻoscar.apps.promotions.views.HomeView, Le modèle est
promotions / home.html`. Il faudra un certain temps pour le trouver, alors je vais l'écrire.
paypal semble être relativement facile à utiliser avec le module django-oscar-paypal
. Prend en charge le paiement express et le paiement. Peut-être que le paiement express n'est qu'un lien.
J'ai décidé de le faire avec webpay, alors je l'ai écrit moi-même.
Il sera écrit en remplaçant le handle_payment
de payment.views.PaymentDetailsView
.