Pythonã䜿çšããŠãeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã®ã·ã§ããã³ã°ã«ãŒãã·ã¹ãã ãå®è£ ããæ¹æ³ãåŠã³ãŸããããŒã¿æ§é ãã»ãã·ã§ã³ç®¡çãããã³å®çšçãªèæ ®äºé ã«ã€ããŠèª¬æããŸãã
Python Eã³ããŒã¹ïŒå ç¢ãªã·ã§ããã³ã°ã«ãŒãã®æ§ç¯
仿¥ã®ããžã¿ã«ç°å¢ã§ã¯ãeã³ããŒã¹ãã©ãããã©ãŒã ã¯ããããšããã«ååšããŸããæåãããªã³ã©ã€ã³ã¹ãã¢ã®åºæ¬çãªã³ã³ããŒãã³ãã¯ãããèšèšããå®è£ ãããã·ã§ããã³ã°ã«ãŒãã§ãããã®ããã°æçš¿ã§ã¯ãPythonã§å ç¢ãªã·ã§ããã³ã°ã«ãŒãã·ã¹ãã ãæ§ç¯ããããã»ã¹ãã¬ã€ãããéèŠãªæŠå¿µãšå®çšçãªèæ ®äºé ã説æããŸãã
eã³ããŒã¹ã«Pythonã䜿çšããçç±
Pythonã¯ãeã³ããŒã¹éçºã«ããã€ãã®å©ç¹ãæäŸããŸãã
- ã·ã³ãã«ããšå¯èªæ§ïŒ Pythonã®ã¯ãªãŒã³ãªæ§æã¯ãåŠç¿ãšä¿å®ã容æã«ããŸãã
- è±å¯ãªã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ïŒ DjangoãFlaskã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯ãWebã¢ããªã±ãŒã·ã§ã³ãè¿ éãã€å¹ççã«æ§ç¯ããããã®åŒ·åãªããŒã«ãæäŸããŸãã SQLAlchemyãpsycopg2ã®ãããªã©ã€ãã©ãªã¯ãããŒã¿ããŒã¹ãšã®å¯Ÿè©±ã容æã«ããŸãã
- å€§èŠæš¡ãªã³ãã¥ããã£ãµããŒãïŒæŽ»æ°ã®ããã³ãã¥ããã£ã¯ãéçºè åãã«è±å¯ãªãªãœãŒã¹ããã¥ãŒããªã¢ã«ããµããŒããæäŸããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ Pythonã¯ã倧éã®ãã©ãã£ãã¯ãšããŒã¿ãåŠçããããã«ã¹ã±ãŒãªã³ã°ã§ãããããæé·ããeã³ããŒã¹ããžãã¹ã«é©ããŠããŸãã
ã·ã§ããã³ã°ã«ãŒãã®ã³ã¢ã³ã³ããŒãã³ã
ã·ã§ããã³ã°ã«ãŒãã·ã¹ãã ã«ã¯ãéåžžãæ¬¡ã®äž»èŠã³ã³ããŒãã³ããå«ãŸããŸãã
- ããŒã¿æ§é ïŒã«ãŒãã®å 容ïŒã¢ã€ãã ãæ°éãäŸ¡æ ŒïŒã衚ããŸãã
- ã»ãã·ã§ã³ç®¡çïŒåãŠãŒã¶ãŒã®ã«ãŒãããŒã¿ãä¿åããŸãã
- ã¢ã€ãã ã®è¿œå ïŒååãã«ãŒãã«è¿œå ããåŠçã
- æ°éã®æŽæ°ïŒãŠãŒã¶ãŒãã¢ã€ãã ã®æ°éã倿Žã§ããããã«ããŸãã
- ã¢ã€ãã ã®åé€ïŒãŠãŒã¶ãŒãã«ãŒãããã¢ã€ãã ãåé€ã§ããããã«ããŸãã
- åèšã®èšç®ïŒå°èšãçšéãéæãèšç®ããŸãã
- æ°žç¶æ§ïŒãªãã·ã§ã³ïŒïŒåŸã§ååŸããããã«ãããŒã¿ããŒã¹ã«ã«ãŒãããŒã¿ãä¿åããŸãã
ãã¬ãŒã ã¯ãŒã¯ã®éžæïŒFlask vs. Django
å®è£ ã«å ¥ãåã«ã2ã€ã®äžè¬çãªPython Webãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠç°¡åã«èª¬æããŸãããã
- FlaskïŒæè»æ§ãšå¶åŸ¡ãæäŸãããã€ã¯ããã¬ãŒã ã¯ãŒã¯ã§ããå°èŠæš¡ãªãããžã§ã¯ããããã现ããã«ã¹ã¿ãã€ãºãå¿ èŠãªå Žåã«æé©ã§ãã
- DjangoïŒORMãèªèšŒã管çããã«ãªã©ã®çµã¿èŸŒã¿æ©èœãæäŸãããã«æ©èœã®ãã¬ãŒã ã¯ãŒã¯ã§ããå€§èŠæš¡ã§ããè€éãªãããžã§ã¯ãã«é©ããŠããŸãã
ç°¡åã«ããããã«ããã®äŸã§ã¯Flaskã䜿çšããŸãããã ãããããã®æŠå¿µã¯Djangoãä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ç°¡åã«é©å¿ã§ããŸãã
Flaskã§ã·ã§ããã³ã°ã«ãŒããå®è£ ãã
Flaskã䜿çšããŠåºæ¬çãªã·ã§ããã³ã°ã«ãŒããäœæããŸããããæ¬¡ã®æé ã説æããŸãã
- Flaskã¢ããªã±ãŒã·ã§ã³ã®èšå®
- ã«ãŒãã®ããŒã¿æ§é ã®å®çŸ©
- ã»ãã·ã§ã³ç®¡çã®å®è£
- ã¢ã€ãã ã®è¿œå ãæŽæ°ãããã³åé€ã®ããã®ã«ãŒãã®äœæ
- ã«ãŒãã®å 容ã®è¡šç€º
1. Flaskã¢ããªã±ãŒã·ã§ã³ã®èšå®
ãŸããFlaskãã€ã³ã¹ããŒã«ããŸãã
pip install Flask
`app.py`ãšããååã®ãã¡ã€ã«ãäœæããæ¬¡ã®ã³ãŒãã远å ããŸãã
from flask import Flask, render_template, session, redirect, url_for, request
app = Flask(__name__)
app.secret_key = 'your_secret_key'
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
ãã®ã³ãŒãã¯ãFlaskã¢ããªã±ãŒã·ã§ã³ãåæåããã»ãã·ã§ã³ç®¡ççšã®ç§å¯éµãèšå®ããŸãã éèŠïŒæ¬çªç°å¢ã§ã¯ã`'your_secret_key'`ã匷åãªã©ã³ãã ã«çæãããããŒã«çœ®ãæããŠãã ããã
2. ã«ãŒãã®ããŒã¿æ§é ã®å®çŸ©
ã«ãŒãããããŒã補åIDã§ãå€ãæ°éã§ããèŸæžãšããŠè¡šããŸãããã®èŸæžã¯ããŠãŒã¶ãŒã®ã»ãã·ã§ã³ã«ä¿åãããŸãã
3. ã»ãã·ã§ã³ç®¡çã®å®è£
Flaskã¯ããŠãŒã¶ãŒåºæã®ããŒã¿ãä¿åããããã«ã»ãã·ã§ã³ã䜿çšããŸãã `session`ã䜿çšããŠãã»ãã·ã§ã³ãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã
4. ã«ãŒãæäœçšã®ã«ãŒãã®äœæ
ã«ãŒãã«ã¢ã€ãã ã远å ãæŽæ°ãããã³åé€ããããã®ã«ãŒããäœæããŸãããã
ã«ãŒããžã®ã¢ã€ãã ã®è¿œå
@app.route('/add/')
def add_to_cart(product_id):
if 'cart' not in session:
session['cart'] = {}
cart = session['cart']
if product_id in cart:
cart[product_id] += 1
else:
cart[product_id] = 1
session['cart'] = cart
return redirect(url_for('show_cart'))
ãã®ã«ãŒãã¯ã補åãã«ãŒãã«è¿œå ããŸããã«ãŒããã»ãã·ã§ã³ã«ååšããªãå Žåã¯ãæ°ããã«ãŒããäœæããŸãã補åããã§ã«ã«ãŒãã«ååšããå Žåã¯ãæ°éãå¢ãããŸãããã以å€ã®å Žåã¯ãæ°é1ã§è£œåã远å ããŸãã
ã¢ã€ãã ã®æ°éã®æŽæ°
@app.route('/update/', methods=['POST'])
def update_cart(product_id):
if 'cart' in session:
cart = session['cart']
quantity = int(request.form['quantity'])
if quantity > 0:
cart[product_id] = quantity
else:
del cart[product_id]
session['cart'] = cart
return redirect(url_for('show_cart'))
ãã®ã«ãŒãã¯ãã«ãŒãå ã®è£œåã®æ°éãæŽæ°ããŸãããã©ãŒã ããŒã¿ããæ°éãååŸããŸããæ°éã0ãã倧ããå Žåã¯ãã«ãŒããæŽæ°ããŸãããã以å€ã®å Žåã¯ãã«ãŒããã補åãåé€ããŸãã
ã«ãŒãããã®ã¢ã€ãã ã®åé€
@app.route('/remove/')
def remove_from_cart(product_id):
if 'cart' in session:
cart = session['cart']
if product_id in cart:
del cart[product_id]
session['cart'] = cart
return redirect(url_for('show_cart'))
ãã®ã«ãŒãã¯ãã«ãŒããã補åãåé€ããŸãã補åãã«ãŒãã«ååšããå Žåã¯ãåé€ããŸãã
5. ã«ãŒãã®å 容ã®è¡šç€º
ã«ãŒãã®å 容ã衚瀺ããã«ãŒããäœæããŸãããã
@app.route('/cart')
def show_cart():
if 'cart' not in session:
session['cart'] = {}
cart = session['cart']
# Sample product data (replace with your database)
products = {
1: {'name': 'Product A', 'price': 20.00},
2: {'name': 'Product B', 'price': 30.00},
3: {'name': 'Product C', 'price': 40.00}
}
cart_items = []
total = 0
for product_id, quantity in cart.items():
product = products[product_id]
item_total = product['price'] * quantity
total += item_total
cart_items.append({'product': product, 'quantity': quantity, 'item_total': item_total})
return render_template('cart.html', cart_items=cart_items, total=total)
ãã®ã«ãŒãã¯ãã»ãã·ã§ã³ããã«ãŒããååŸããã¢ã€ãã ãå埩åŠçããŸãããµã³ãã«`products`èŸæžãã補åã®è©³çްïŒååãäŸ¡æ ŒïŒãååŸããŸãïŒå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã¯ããŒã¿ããŒã¹ããååŸãããŸãïŒãã¢ã€ãã ã®åèšãšå šäœã®åèšãèšç®ããã«ãŒãã¢ã€ãã ãšåèšã䜿çšããŠ`cart.html`ãšããååã®ãã³ãã¬ãŒããã¬ã³ããªã³ã°ããŸãã
6. ãã³ãã¬ãŒãã®äœæ
`templates`ãšããååã®ãã©ã«ããŒã«ã`index.html`ãš`cart.html`ã®2ã€ã®HTMLãã¡ã€ã«ãäœæããŸãã
index.htmlïŒ
E-commerce Store
Welcome to Our Store!
View Cart
cart.htmlïŒ
Shopping Cart
Shopping Cart
{% if cart_items %}
Product
Quantity
Price
Total
Actions
{% for item in cart_items %}
{{ item.product.name }}
{{ item.product.price }}
{{ item.item_total }}
Remove
{% endfor %}
Total: {{ total }}
{% else %}
Your cart is empty.
{% endif %}
Continue Shopping
ãããã®ãã³ãã¬ãŒãã¯ã補åãªã¹ããšãæ°éãæŽæ°ããŠã¢ã€ãã ãåé€ã§ããã·ã§ããã³ã°ã«ãŒããã¬ã³ããªã³ã°ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å®è¡
`app.py`ãã¡ã€ã«ãå®è¡ããŸãã
python app.py
ãã©ãŠã¶ãéãã`http://127.0.0.1:5000/`ã«ç§»åããŠãeã³ããŒã¹ã¹ãã¢ã«ã¢ã¯ã»ã¹ããŸããã«ãŒãã«ã¢ã€ãã ã远å ããæ°éãæŽæ°ããã¢ã€ãã ãåé€ã§ããŸãã
é«åºŠãªæ©èœãšèæ ®äºé
äžèšã®äŸã¯ãåºæ¬çãªã·ã§ããã³ã°ã«ãŒãã®å®è£ ãæäŸããŸããæ¬çªç°å¢ã«å¯Ÿå¿ããeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã«ã¯ã次ã®é«åºŠãªæ©èœãšèæ ®äºé ãæ€èšããŠãã ããã
ããŒã¿ããŒã¹çµ±å
補åããŒã¿ãèŸæžã«ä¿åãã代ããã«ãããŒã¿ããŒã¹ïŒPostgreSQLãMySQLãMongoDBãªã©ïŒã䜿çšããŠãè£œåæ å ±ãä¿åããã³ååŸããŸãã SQLAlchemyã®ãããªORMã䜿çšããŠãPythonicãªæ¹æ³ã§ããŒã¿ããŒã¹ãšå¯Ÿè©±ããŸãã
SQLAlchemyã䜿çšããäŸïŒæŠå¿µçïŒïŒ
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Product(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True)
name = Column(String)
price = Column(Float)
# ... (Database setup and usage)
ãŠãŒã¶ãŒèªèšŒ
ãŠãŒã¶ãŒãã¢ã«ãŠã³ããäœæãããã°ã€ã³ããæ³šæå±¥æŽã远跡ã§ããããã«ããŠãŒã¶ãŒèªèšŒãå®è£ ããŸãã Djangoãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã¯ãçµã¿èŸŒã¿ã®èªèšŒã·ã¹ãã ãæäŸããŸãã
æ¯æãã²ãŒããŠã§ã€çµ±å
æ¯æãã²ãŒããŠã§ã€ïŒStripeãPayPalãªã©ïŒãšçµ±åããŠãæ¯æããå®å šã«åŠçããŸããæ¯æãã²ãŒããŠã§ã€ã®ããã¥ã¡ã³ãã«åŸã£ãŠãçµ±åãæ£ããå®è£ ããŸãã éèŠïŒæ¯æãæ å ±ãåŠçããå Žåã¯ãã»ãã¥ãªãã£ãåªå ããŸãã
éæãšçšéã®èšç®
ãŠãŒã¶ãŒã®å Žæã«åºã¥ããŠãéæãšçšéãèšç®ããŸããå€éšAPIãŸãã¯ã©ã€ãã©ãªã䜿çšããŠãæ£ç¢ºãªéæãšçšéæ å ±ãååŸããŸãããšãŒãããããã³ãã®ä»ã®å°åã§ã®è²©å£²ã«å¯ŸããVATïŒä»å 䟡å€çšïŒã®åœ±é¿ãèæ ®ããŸãã
ã»ãã¥ãªãã£
ãŠãŒã¶ãŒããŒã¿ãä¿è·ããæ»æãé²ãããã«ãå ç¢ãªã»ãã¥ãªãã£å¯Ÿçãå®è£ ããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- HTTPSïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ãã¹ãŠã®éä¿¡ãæå·åããããã«HTTPSã䜿çšããŸãã
- å ¥åæ€èšŒïŒã€ã³ãžã§ã¯ã·ã§ã³æ»æãé²ãããã«ããã¹ãŠã®ãŠãŒã¶ãŒå ¥åãæ€èšŒããŸãã
- åºåãšã³ã³ãŒãã£ã³ã°ïŒã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒæ»æãé²ãããã«ãåºåããšã³ã³ãŒãããŸãã
- CSRFä¿è·ïŒã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªæ»æãé²ãããã«ãCSRFä¿è·ãå®è£ ããŸãã
- 宿çãªã»ãã¥ãªãã£ç£æ»ïŒè匱æ§ãç¹å®ããŠä¿®æ£ããããã«ã宿çãªã»ãã¥ãªãã£ç£æ»ã宿œããŸãã
ã¹ã±ãŒã©ããªãã£
ãã©ãã£ãã¯ãšããŒã¿ã®å¢å ã«å¯Ÿå¿ã§ããããã«ãã¢ããªã±ãŒã·ã§ã³ãã¹ã±ãŒã©ãã«ã«èšèšããŸããããã«ã¯ä»¥äžãå«ãŸããå ŽåããããŸãã
- ããŒããã©ã³ã·ã³ã°ïŒè€æ°ã®ãµãŒããŒã«ãã©ãã£ãã¯ã忣ããŸãã
- ãã£ãã·ã³ã°ïŒé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ããã£ãã·ã¥ããŠãããŒã¿ããŒã¹ã®è² è·ã軜æžããŸãã
- ããŒã¿ããŒã¹ã®æé©åïŒããŒã¿ããŒã¹ã¯ãšãªãšã€ã³ããã¯ã¹ãæé©åããŠãããã©ãŒãã³ã¹ãåäžãããŸãã
- éåæã¿ã¹ã¯ïŒéåæã¿ã¹ã¯ãã¥ãŒïŒCeleryãªã©ïŒã䜿çšããŠãé·æéå®è¡ãããã¿ã¹ã¯ãåŠçããŸãã
åœéåãšããŒã«ãªãŒãŒã·ã§ã³ïŒi18n / l10nïŒ
åœéåãšããŒã«ãªãŒãŒã·ã§ã³ãå®è£ ããããšã«ãããããŸããŸãªåœã®ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- ããã¹ãã®ç¿»èš³ïŒããã¹ããããŸããŸãªèšèªã«ç¿»èš³ããŸãã
- æ¥ä»ãšæ°å€ã®æžåŒèšå®ïŒããŒã«ã«ã®èŠåã«åŸã£ãŠæ¥ä»ãšæ°å€ãæžåŒèšå®ããŸãã
- ããŸããŸãªé貚ã®ãµããŒãïŒããŸããŸãªé貚ãšé貚èšå·ããµããŒãããŸãã
- ããŸããŸãªæåçèŠç¯ãžã®é©å¿ïŒããŸããŸãªæåçèŠç¯ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãé©å¿ãããŸããããšãã°ãäžéšã®æåã§ã¯å³ããå·Šã«èªã¿ãŸãã
Flask-Babelã䜿çšããäŸïŒ
from flask import Flask, render_template
from flask_babel import Babel, gettext
app = Flask(__name__)
app.config['BABEL_DEFAULT_LOCALE'] = 'en'
app.config['BABEL_TRANSLATION_DIRECTORIES'] = 'translations'
babel = Babel(app)
@app.route('/')
def index():
title = gettext('Welcome')
return render_template('index.html', title=title)
ãã¹ã
ã³ãŒãã®å質ãšä¿¡é Œæ§ã確ä¿ããããã«ãå æ¬çãªãŠããããã¹ããšçµ±åãã¹ããäœæããŸãã pytestãŸãã¯unittestã®ãããªãã¹ããã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãã
äŸïŒããŸããŸãªé貚ã®åŠç
USDïŒç±³ãã«ïŒãEURïŒãŠãŒãïŒãGBPïŒè±ãã³ãïŒããµããŒããããšããŸãã以äžãå¿ èŠã«ãªããŸãã
- é貚æ å ±ã®ä¿åïŒé貚ã³ãŒããšçºæ¿ã¬ãŒããããŒã¿ããŒã¹ãŸãã¯æ§æã«ä¿åããŸãã
- äŸ¡æ Œã®å€æïŒçºæ¿ã¬ãŒãã«åºã¥ããŠãäŸ¡æ ŒããŠãŒã¶ãŒã®åžæããé貚ã«å€æããŸãã
- äŸ¡æ Œã®æžåŒèšå®ïŒé貚ã®åœ¢åŒã«åŸã£ãŠäŸ¡æ ŒãæžåŒèšå®ããŸãïŒäŸïŒ$ 10.00ãâ¬10,00ã£10.00ïŒã
- é貚èšå·ã®è¡šç€ºïŒæ£ããé貚èšå·ã衚瀺ããŸãã
æŠå¿µçãªäŸïŒ
import locale
def format_currency(amount, currency_code):
try:
locale.setlocale(locale.LC_ALL, '') # Use system default locale
except locale.Error:
print("Warning: Could not set locale. Currency formatting may be incorrect.")
return locale.currency(amount, symbol=True, grouping=True, international=False)
# Example usage
price_usd = 10.00
formatted_price_usd = format_currency(price_usd, 'USD') # Outputs: $10.00 (or similar based on locale)
泚ïŒ`locale`ã¢ãžã¥ãŒã«ã®åäœã¯ã·ã¹ãã ã«ãã£ãŠç°ãªããäžè²«ããçµæãåŸãã«ã¯æç€ºçãªãã±ãŒã«èšå®ãå¿ èŠã«ãªãå ŽåããããŸããæ¬çªã·ã¹ãã ã®å Žåã¯ããã©ãããã©ãŒã éã§ããå ç¢ã§ä¿¡é Œæ§ã®é«ããµããŒããæäŸããé貚åŠçãšæžåŒèšå®ã«ç¹åããã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããã
çµè«
å ç¢ãªã·ã§ããã³ã°ã«ãŒãã·ã¹ãã ãæ§ç¯ããããšã¯ãeã³ããŒã¹éçºã®éèŠãªåŽé¢ã§ããã³ã¢ã³ã³ããŒãã³ããçè§£ããé©åãªãã¬ãŒã ã¯ãŒã¯ãéžæããããŒã¿ããŒã¹çµ±åãæ¯æãã²ãŒããŠã§ã€çµ±åãåœéåãªã©ã®é«åºŠãªæ©èœãå®è£ ããããšã«ãããäžçäžã®é¡§å®¢ã®ããŒãºãæºããã¹ã±ãŒã©ãã«ã§å®å šãªeã³ããŒã¹ãã©ãããã©ãŒã ãäœæã§ããŸããéçºããã»ã¹å šäœãéããŠãã»ãã¥ãªãã£ãã¹ã±ãŒã©ããªãã£ãããã³ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåªå ããããšãå¿ããªãã§ãã ããããã®æçš¿ã¯ãPythonããŒã¹ã®eã³ããŒã¹ã·ã§ããã³ã°ã«ãŒããæ§ç¯ããããã®ç¢ºåºããåºç€ãæäŸããŸããé 匵ã£ãŠãã ããïŒ