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协议?
浏览器和吴福气之间约定好的消息格式(以
分割)
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 )