美文网首页
Django:rest framework补充ContentTy

Django:rest framework补充ContentTy

作者: Zzmi | 来源:发表于2019-05-20 15:26 被阅读0次
    ContentType

    django内置的ContentType组件就是帮我们做连表操作
    如果一个表与其他表有多个外键关系,我们可以通过ContentType来解决这种关联

    from django.db import models
    from django.contrib.contenttypes.models import ContentType
    from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
    
    
    class DegreeCourse(models.Model):
        name = models.CharField(max_length=32)
    
    
    class Course(models.Model):
        name = models.CharField(max_length=32)
    
        # 数据库不生成,只用于链表查询
        policy_list = GenericRelation("PricePolicy")
    
    
    class PricePolicy(models.Model):
        period = models.CharField(max_length=32)
        price = models.FloatField()
        # 课程类型 关联django自动生成的contenttype表
        content_type = models.ForeignKey(ContentType)  
        object_id = models.PositiveIntegerField()
        # 不在数据库中生成,只用于帮助你做数据操作
        content_object = GenericForeignKey('content_type', 'object_id')
    
    CORS

    即:跨域资源共享(CORS,Cross-Origin Resource Sharing),其本质是设置响应头,使得浏览器允许跨域请求
    复杂请求在发送真正的请求前,会先发送一个OPTIONS请求,第三方服务端先”预检“一下,”预检“通过才会发送正式数据。
    “预检”请求时,允许请求方式则需服务器设置响应头:Access-Control-Request-Method
    “预检”请求时,允许请求头则需服务器设置响应头:Access-Control-Request-Headers
    “预检”缓存时间,服务器设置响应头:Access-Control-Max-Age
    带请求头的复杂请求

    客户端cors.html
    <body>
        <h3>CORS示例</h3>
        <button type="button" onclick="getData()" >获取第三方数据</button>
     
        <script src="/static/jquery-3.2.1.js"></script>
        <script>
        function getData() {
            $.ajax({
                url:'http://127.0.0.1:8000/cors_data/',
                type:'GET',   // 请求方式:HEAD、GET、POST为简单请求
                headers:{'name':'joe1991'},   //有请求头的复杂请求
                success:function (arg) {
                    var $tag = $('<h6>');
                    $tag.text(arg);
                    $('h3').append($tag);
                    }
                })
            }
        </script>   
    </body>
    
    第三方服务端views.py
    def cors_data(request):
        if request.method == 'OPTIONS':
            # 预检
            obj = HttpResponse()
            obj['Access-Control-Allow-Origin'] = " http://127.0.0.1:8001"
            obj['Access-Control-Allow-Headers'] = 'name'    #处理方式不同
            # obj['Access-Control-Allow-Methods'] = "PUT"
            return obj
        else :
            obj = HttpResponse('第三方数据')
            obj['Access-Control-Allow-Origin'] = " http://127.0.0.1:8001"
            return obj
    
    区别

    JSONP:主要修改在前端部分,后端需做约束修改,发jsonp请求
    JSONP:只能发GET请求
    CORS:前端的代码不用修改,服务端的代码需要修改
    CORS:可以发任意请求,简单请求与复杂请求处理方式不同

    相关文章

      网友评论

          本文标题:Django:rest framework补充ContentTy

          本文链接:https://www.haomeiwen.com/subject/gvpkzqtx.html