• 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)
  • 相关阅读:
    jsf web.xml配置
    JSF中Filter的实现
    转码
    facelates标签
    jsf学习笔记注解
    date工具类
    js秒读功能
    w3c document 与 dom4j document转化工具类
    jsf学习笔记ui
    jsf学习笔记拦截器
  • 原文地址:https://www.cnblogs.com/djfboai/p/10089198.html
Copyright © 2020-2023  润新知