复习第二天

1. 为什么会有跨域?
        浏览器具有同源策略所有才出现跨域。
        同源策略:
            - 开放:src
            - 禁止:ajax
        解决跨域:
            - jsonp,在客户端动态创建一个script标签
                1.客户端:创建一个
                    <script src='http://www.jxntv.cn/data/jmd-jxtv2.html'></script>
                    <script>
                        function func(arg){
                            alert(arg);
                        }
                    </script>
                2.服务端:接收到请求并处理并返回值 "func('success')"
                    相当于:
                        <script>
                            func('success')
                        </script>
                        
                PS: jsonp只能发送GET请求
                
            - cors,设置响应响应响应响应响应头
                - 简单请求
                - 复杂请求
                    - options请求做预检
                    - PUT/POST....
                    
        在django中解决方案:
            - 中间件中设置响应头
            - django中的一个第三方组件:cors
                
        补充:
            jQuery Ajax:
                $.ajax({
                    ...
                })
            原生Ajax:XMLHttpRequest对象:
                var xhr = new XMLHttpRequest()
                
                xhr.onreadystatechange = function(){
                    if(xhr.readyState == 4){
                        // 已经接收到全部响应数据,执行以下操作
                        var data = xhr.responseText;
                        console.log(data);
                    }
                };
                
                xhr.open('POST', "/test/", true);
                
                // 设置请求头
                xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
                
                // 发送请求
                xhr.send('n1=1;n2=2;');
    
2. 你理解的http协议?    
    浏览器和吴福气之间约定好的消息格式(以\r\n分割)
3. 常见请求头
        - Content-Type ,  媒体类型信息
        - User-Agent,  用户信息
        - referer,可以做图片防盗链。
        - Host, 域名和端口号
        - cookies

4. 常见的请求方法:
        - GET/POST/DELETE/PUT/PATCH/OPTIONS

5. 常见的状态码:
        - 200,  请求成功
        - 301/302  永久/临时重定向
        - 403/404,  服务器拒绝请求/请求不存在
        - 500,  内部服务器出错
        
6. 序列化
    class BookSerializers(serializers.ModelSerializer):
    class Meta:
        model = models.Book
        # fields = "__all__"
        fields=['nid','title','authors','publish']
        # exclude=('nid',)   #不能跟fields同时用
        # depth = 1    #深度控制,写 几 往里拿几层,层数越多,响应越慢,官方建议0--10之间,个人建议最多3层
    publish=serializers.SerializerMethodField()
    def get_publish(self,obj):
        return obj.publish.name
    authors=serializers.SerializerMethodField()
    def get_authors(self,obj):
        ret=obj.authors.all()
        ss=AuthorSerializer(ret,many=True)
        return ss.data

7. ORM补充:
        a. 需求: 只取某n列
            queryset=[ {},{}]
            models.User.objects.all().values( 'id','name')
            
            queryset=[ (),()]
            models.User.objects.all().values_list( 'id','name')
            
            queryset=[ obj,obj]
            result = models.User.objects.all().only('id','name','age')    
            # result = models.User.objects.all().defer('id','name','age')    
            for item in reuslt:
                print(item.id,item.name,item.age)
        b. 需求: 打印所有用户姓名以及部门名称
            class depart:
                title = ....


            class User:
                name = ...
                dp = FK(depart)
                
            # select * from user
            # result = models.User.objects.all()
            # for item in result:
            #     print(item.name)
            
            # select * from user left join depart on user.dp_id = depart.id
            # result = models.User.objects.all().selected_related('dp')
            # for item in result:
                #print(item.name,item.dp.title )

猜你喜欢

转载自www.cnblogs.com/l-jie-n/p/9932683.html