zoukankan      html  css  js  c++  java
  • AI-跨域、垃圾回收、content_type组见、接口处理

    AI-跨域、垃圾回收、content_type组见、接口处理

    跨域

    为什么有跨域?什么时候遇见的?
    答:由于浏览器的同源策略 阻止ajax请求 不阻止src请求;在测试时,项目上线后不会遇见跨域。源:协议、域名、端口

    什么是浏览器的同源策略?
    答:是浏览器对js实施的安全限制,比如:http://www.123.com:8080/index.html
    调用 http://www.123.com:8081/server.php (端口不同:8080/8081,属于跨域);http://abc.123.com/index.html
    调用 http://def.123.com/server.php (子域名不同:abc/def,属于跨域)。
    解决跨域?
    a.jsonp -- 缺点:不能发送post请求,我们利用src发送请求的
    b.core
    --做一个中间件,给响应加响应头。简单请求时比如发送一个urlencoding格式数据就是简单请求。当发送json时,就是复杂请求了,
        处理复杂请求时,给请求头加上一个HeadersMethods即可!
     -- get请求主要是给响应加响应头,
    -- class MyCore(MiddlewareMixin): def process_response(self, request, response): response['Access-Control-Allow-Origin'] = "*" if request.method == "OPTIONS": #比如post,put,delete等方式 # 复杂请求 预检 response['Access-Control-Allow-Headers'] = "Content-Type" response['Access-Control-Allow-Methods'] = "POST, DELETE, PUT" return response

    垃圾回收

    python的垃圾回收以引用计数为主,标记清除、分代回收为辅
    
    引用计数:python会为每个对象维护一个引用计数,当引用的次数为0,就视为垃圾;
    标记清除:为了解决孤立的循环引用问题。标记根节点和可达对象,将不可达的对象视为垃圾;
    分代回收:解决标记清除效率问题。分为3代,阈值为(700,10,10),当调用c接口开辟内存和销毁内存的差值为700触发0代回收,
         0代触发10次触发1代,1代触发10次触发2代,每次回收结束,没有被回收的对象放到下一代。

     content-type组件

    需求-为什么要用content_type?

    当商场搞活动,需要给商品加优惠券,而且要给用户优惠券,使用平时的Foreign方法繁杂,
    所以有了Content-type组件来帮助我们简化之,主要思路就是设计一个content-type表,
    里边内容是 : id  app_name   model_class ,分别为 id值、app名称、表名,优惠券表里的
    字段:id   name   object_id    content_type_id ,分别为 id、优惠券名称、用户的id、
    (用户)表的id值。有了这个content_type,我们给用户添加优惠券信息时就可以使用命令
    直接添加,不用一个一个的创建外键关联等。命令:

    content_type 命令

        -- 应用 价格策略 常见问题 优惠券
        -- 一张表跟多张表建立外键关系的
        -- 用法
            # 第一步 先生成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)
  • 相关阅读:
    leetcode 279. Perfect Squares
    leetcode 546. Remove Boxes
    leetcode 312. Burst Balloons
    leetcode 160. Intersection of Two Linked Lists
    leetcode 55. Jump Game
    剑指offer 滑动窗口的最大值
    剑指offer 剪绳子
    剑指offer 字符流中第一个不重复的字符
    leetcode 673. Number of Longest Increasing Subsequence
    leetcode 75. Sort Colors (荷兰三色旗问题)
  • 原文地址:https://www.cnblogs.com/djfboai/p/10089198.html
Copyright © 2011-2022 走看看