《Django 5 By Example》学习第 13 天,p359-p382 总结,总计 24 页。
一、技术总结
1.session
(1)session 存储方式
Database sessions
File-based sessions
Cached sessions
Cached database sessions
Cookie-based sessions
(2)设置 CART_SESSION_ID
# settings.pyCART_SESSION_ID = 'cart'
复制代码
(3)使用示例
from django.conf import settingsfrom decimal import Decimalfrom shop.models import Product
class Cart: def __init__(self, request): """ 初始化 cart """ self.session = request.session # todo 这里的 cart 的类型是: cart = self.session.get(settings.CART_SESSION_ID) if not cart: cart = self.session[settings.CART_SESSION_ID] = {} self.cart = cart
def save(self): """
""" self.session.modified = True
def add(self, product, quantity=1, override_quantity=False): """ 添加商品到购物车 """ product_id = str(product.id) if product_id not in self.cart: self.cart[product_id] = { 'quantity': 0, 'price': str(product.price) } if override_quantity: self.cart[product_id]['quantity'] = quantity else: self.cart[product_id]['quantity'] += quantity
self.save()
def remove(self, product): """ 删除购物车中的商品 """ product_id = str(product.id) if product_id in self.cart: del self.cart[product_id] self.save()
def get_total_price(self): """ 统计购物车里商品价格总和 """ return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())
def clear(self): """ 清空购物车 session """ del self.session[settings.CART_SESSION_ID] self.save()
def __iter__(self): product_ids = self.cart.keys() products = Product.objects.filter(id__in=product_ids) cart = self.cart.copy() for product in products: cart[str(product.id)]['product'] = product for item in cart.values(): item['price'] = Decimal(item['price']) item['total_price'] = item['price'] * item['quantity'] yield item
def __len__(self): """ 统计购物车商品数量总和 """ return sum(item['quantity'] for item in self.cart.values())
复制代码
2.Context processors
(1)什么是 context processors?
p370, A context processor is a Python function that takes the request object as an argument and returns a dictionary that gets added to the request context.
二、英语总结(生词:2)
1.coerce
(1)coerce: co-("together") + arecere("to restrain")
vt. to persuade sb forcefully to do sth(强制)。
2.get added to
p370, A context processor is a Python function that takes the request object as an argument and returns a dictionary that gets added to the request context.
虽然表被动意思,但是用的是 get added to, 类似于 be added to。
三、其它
chapter 08 今日简评:技术上主要涉及 session , context processor 的使用,除此之外更多的是业务处理。
四、参考资料
1. 编程
(1) Antonio Melé,《Django 5 By Example》:https://book.douban.com/subject/37007362/
2. 英语
(1) Etymology Dictionary:https://www.etymonline.com
(2) Cambridge Dictionary:https://dictionary.cambridge.org
欢迎搜索及关注:编程人(a_codists)
评论