Day136
s7day136
内容回顾:
1. ORM
- exclude/F/Q
- only
- defer
- select_related
- prefetch_related
- 原生SQL
connection:
# from django.db import connection, connections
# cursor = connection.cursor() # cursor = connections['default'].cursor()
# cursor.execute("""SELECT * from auth_user where id = %s""", [1])
# row = cursor.fetchone()
extra
Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,))
Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])
Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])
raw
models.UserInfo.objects.raw('select * from xxx')
name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'}
Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)
2. restful 规范
套路:
之前不了解restful规范
method不同
3. 路飞学城:表结构
4. 技术问题
开发过程中遇到过什么难的事?或Bug?
Bug: 昨天两个Bug
难搞:购物流程
今日内容:
1. 购物车
2. 去结算
3. 立即支付
内容详细:
1. 购物车
问题:选择方案
a. 基于数据库表
用户ID 价格策略ID 课程信息
b. 放session (另外一台机器的内存:redis)
c. 另外一台机器的内存:redis
问题:redis
格式:
购物车 = {
1:{
课程ID1:{
name: "Python开发21天入门必备",
img: '',
default_price_policy:2,
price_policy:{
2: {...},
3: {...},
}
},
课程ID2:{
name: "Python开发21天入门必备",
img: '',
default_price_policy:2,
price_policy:{
2: {...},
3: {...},
}
},
}
}
实现:
SHOPPING_CAR = {
1:json.dumps({})
}
如何实现:
a. 发送添加购物车的请求:
- 用户(token)
- 课程ID
- 价格策略ID
VUE:
URL: http://www.luffycity.com/api/v1/shopping_car/?token=128sdkjfso97821ws
Method: POST
Data:{
course_id:1,
price_policy_id:12
}
后端:
SHOPPING_CAR = {
用户ID: {}
}
def post(self,request,*args,**kwargs):
ret = {'code':1000,...}
try:
1. 获取字典信息
request.data
2. 根据课程ID,获取课程信息
如果不存在,则抛出异常
3. 根据课程获取所有的价格策略
4. price_policy_id在课程的所有价格策略中,是否存在?
如果不存在,则抛出异常
course_id = course_id
temp = {
name: "Python开发21天入门必备",
img: '',
default_price_policy:2,
price_policy:{
2: {...},
3: {...},
}
}
old_car = SHOPPING_CAR.get(request.user.id)
if not old_car:
SHOPPING_CAR[request.user.id] = json.dumps({course_id:temp})
else:
old_car_dict = json.locads(old_car)
old_car_dict[course_id] = temp
SHOPPING_CAR[request.user.id] = json.dumps(old_car_dict)
except Exception as e:
ret['code'] = 1001
b. 查看购物车
VUE:
URL: http://www.luffycity.com/api/v1/shopping_car/?token=128sdkjfso97821ws
Method: GET
后端:
def get(self,request,*args,**kwargs):
my_car = SHOPPING_CAR.get(request.user.id)
my_car_dict = json.loads(my_car)
c. 删除购物车商品
VUE:
URL: http://www.luffycity.com/api/v1/shopping_car/1/?token=128sdkjfso97821ws
Method: DELETE
后端:
def delete(self,request,*args,**kwargs):
pk = kwargs.get('pk')
1. 根据当前用户ID获取购物车信息
my_car_dict = json.loads(SHOPPING_CAR.get(request.user.id))
if pk in my_car_dict:
del my_car_dict[pk]
SHOPPING_CAR[request.user.id] = json.dumps(my_car_dict)
d. 修改默认价格策略
VUE:
URL: http://www.luffycity.com/api/v1/shopping_car/?token=128sdkjfso97821ws
Method: patch
data:
{
course_id: 1,
price_policy:2
}
1. 去购物车中获取
2. 校验价格策略是否存在(非数据库操作)
3. default_price_policy值修改
4. 会写到购物车中
2. redis
3. 单例模式
连接数据库时,防止每次操作都去创建数据库连接,索引使用单例模式仅在第一次使用时创建连接,以后均使用该连接即可。
a. 基于文件导入实现单例模式
b. 基于 classmethod
c. 基于__new__
d. 基于metaclass

default表示可以通过settings里面配置多个数据库进行选择,读写分离


执行原生sql另外的方法
extra
raw

启动的重要ORM操作:exclude/F/Q
restfull
路飞有702张表

公司有多少人?
今日内容
1.购物车
2.去结算
3.立即支付

浙公网安备 33010602011771号