Frame-24-CSRF

1.DRF

(1) APIView流程
(2) 序列化组件
serizer=序列化类(queryset,many=True)
serizer=序列化类(model_obj,many=Flase)
serizer.data # [{},{}] {}
serizer.error
serizer.is_valid()
serizer.save()
(3) 视图
1 独立写逻辑
2 mixin混合类封装
3 mixin混合类进一步封装
4 基于ModelViewSet封装
(4) 认证,权限,频率
查找类似于permission_classes这样的实例变量
局部查找 — 全局查找 — 默认
(5) 解析器
Django默认解析urlencoded
DRF:urlencoded,json
(6) url路由器
(7) 响应器
(8) 分页

一 表结构

补充知识点:
# 笨方法:

     >>> coupon=Coupon.objects.filter(name="海尔空调折扣券").first()
 	>>> coupon
 	<Coupon: Coupon object>
 	>>> coupon
 	<Coupon: Coupon object>
 	>>> coupon.content_type_id
 	9
 	>>> from django.contrib.contenttypes.models import ContentType

 	>>> ContentType.objects.filter(pk=9)
 	<QuerySet [<ContentType: electrics>]>
 	>>> ContentType.objects.filter(pk=9).first()
 	<ContentType: electrics>
 	>>> ContentType.objects.filter(pk=9).first().model
 	'electrics'
 	>>> ContentType.objects.filter(pk=9).first().model_class()
 	<class 'app01.models.Electrics'>
 	>>> ContentType.objects.filter(pk=9).first().model_class().objects.filter(pk=coupon.object_id)
 	<QuerySet [<Electrics: Electrics object>]>
 	>>> ContentType.objects.filter(pk=9).first().model_class().objects.filter(pk=coupon.object_id).first().name
 	'海尔空调'
 	```

## 2.Django's Generic Relations
```python
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Activity(models.Model):
 FAVORITE = 'F'
 LIKE = 'L'
 UP_VOTE = 'U'
 DOWN_VOTE = 'D'
 ACTIVITY_TYPES = (
     (FAVORITE, 'Favorite'),
     (LIKE, 'Like'),
     (UP_VOTE, 'Up Vote'),
     (DOWN_VOTE, 'Down Vote'),
 )

 user = models.ForeignKey(User)
 activity_type = models.CharField(max_length=1, choices=ACTIVITY_TYPES)
 date = models.DateTimeField(auto_now_add=True)

 # Below the mandatory fields for generic relation
 content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
 object_id = models.PositiveIntegerField()
 content_object = GenericForeignKey()

3.简单跨域/复杂跨域

3.1 CORS

简介
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

3.2 两种请求

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

只要同时满足以下两大条件,就属于简单请求。

复制代码
(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
复制代码
凡是不同时满足上面两个条件,就属于非简单请求。

浏览器对这两种请求的处理,是不一样的。

复制代码

  • 简单请求和非简单请求的区别?

    简单请求:一次请求
    非简单请求:两次请求,在发送数据之前会先发一次请求用于做“预检”,只有“预检”通过后才再发送一次请求用于数据传输。

  • 关于“预检”

  • 请求方式:OPTIONS
  • “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息
  • 如何“预检”
    => 如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则“预检”不通过
    Access-Control-Request-Method
    => 如果复杂请求设置了请求头,则服务端需要设置允许某请求头,否则“预检”不通过
    Access-Control-Request-Headers
    复制代码

支持跨域,简单请求

服务器设置响应头:Access-Control-Allow-Origin = ‘域名’ 或 ‘*’

支持跨域,复杂请求

由于复杂请求时,首先会发送“预检”请求,如果“预检”成功,则发送真实数据。

“预检”请求时,允许请求方式则需服务器设置响应头:Access-Control-Request-Method
“预检”请求时,允许请求头则需服务器设置响应头:Access-Control-Request-Headers

http://www.cnblogs.com/yuanchenqi/articles/7638956.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值