python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonpCORS、Content-Type组件

Python垃圾回收
	-- 引用计数
		-- Python为每个对象维护一个引用计数
		-- 当引用计数为0的 代表这个对象为垃圾
	-- 标记清除
		-- 解决孤立的循环引用
		-- 标记根节点和可达对象
		-- 不可达视为垃圾
	-- 分代回收
		-- 解决标记清除的效率问题
		-- 0代 1代 2代
		-- 阈值 (700,10,10)
		-- 当调用c的接口开辟内存和销毁内存的差值为700的时候出发0代回收
		-- 0代触发10次 触发1代回收
		-- 1代触发10次 触发2代回收
		-- 每次回收结束 没有被回收的对象放入下一代

PythonMRO c3算法
	-- 找到类的mro的继承顺序
	-- 第一步 找到所有父类的mro
	-- 第二步 用这些父类的mro 跟所有的父类进行归并
		-- 取每个表表头 并且其他表去掉表头的部分不能含有我们要取的那个表头
		-- 如果不满走就去取第二个表头

跨域
	-- 浏览器的同源策略 阻止ajax请求 不阻止src请求
	-- jsonp
		-- 我们利用src发送请求
	-- core
		-- class MyCore(MiddlewareMixin):
		    def process_response(self, request, response):
		        response['Access-Control-Allow-Origin'] = "*"
		        if request.method == "OPTIONS":
		            # 复杂请求 预检
		            response['Access-Control-Allow-Headers'] = "Content-Type"
		            response['Access-Control-Allow-Methods'] = "POST, DELETE, PUT"
		        return response
ContentType组件 
	-- 应用 价格策略 常见问题 优惠券
	-- 一张表跟多张表建立外键关系的
	-- 用法
		# 第一步 先生成ForeignKey字段 关联ContentType
	    content_type = models.ForeignKey(to=ContentType)
	    # 第二步 生成一个IntergerField 字段关联
	    object_id = models.PositiveIntegerField()
	    # 第三步 生成一个GenericForeignKey 把上面两个字段注册进去
	    content_object = GenericForeignKey("content_type", "object_id")
	-- 创建和查询
		# 通过contentType找到OldBoy中所有的信息
	    # content = ContentType.objects.filter(app_label="app01", model="oldboy").first()
	    # oldboy_model = content.model_class()
	    # ret = oldboy_model.objects.all()
	    # print(ret)
	    # 给Yuan局长加优惠券信息
	    yuan_obj = OldBoy.objects.filter(id=2).first()
	    Coupon.objects.create(name="苑局1000-750优惠券", content_object=yuan_obj)

	    # alex_obj = OldBoy.objects.filter(id=1).first()
	    # Coupon.objects.create(name="Alex打折优惠券", content_object=alex_obj)

	    # 查询优惠券id=1的关联的商品
	    # coupon_obj = Coupon.objects.filter(id=1).first()
	    # goods_obj = coupon_obj.content_object
	    # print(goods_obj)

	    # 查询苑昊的优惠券
	    yuan_obj = OldBoy.objects.filter(id=2).first()
	    coupon_list = yuan_obj.coupons.all()
	    print(coupon_list)


#######################################################################
  • ContentType实例提供的接口
    • ContentType.model_class()
      • 获取当前ContentType类型所代表的模型类
    • ContentType.get_object_for_this_type()
      • 使用当前ContentType类型所代表的模型类做一次get查询
  • ContentType管理器(manager)提供的接口
    • ContentType.objects.get_for_id()
      • 通过id寻找ContentType类型,这个跟传统的get方法的区别就是它跟get_for_model共享一个缓存,因此更为推荐。
    • ContentType.objects.get_for_model()
      • 通过model或者model的实例来寻找ContentType类型

---------------------



数据接口 
-- 作业
	-- 表结构
		-- 课程类别
		-- 课程表
		-- 课程详细表
			-- 推荐课程!!!
			-- 关联课程表
		-- 价格策略ContentType
		-- 课程章节
			-- 课程详细关联
		-- 课时表
			-- 跟章节关联
		-- 常见问题表 ContentType
		-- 讲师表
			-- 跟课程详细关联

  https://juejin.im/entry/5b4eeda2e51d4519700f4c04

原文地址:https://www.cnblogs.com/wuchenggong/p/9700352.html