doraemon的python csrf校验(国庆大更新)

### 11.11 csrf装饰器

```python
from django.views.decorators.csrf import csrf_exempt,csrf_protect,ensure_csrf_cookie

csrf_exempt   #某个视图不需要进行csrf校验
csrf_protect   #某个视图需要进行csrf校验
ensure_csrf_cookie #确保生成csrf的cookie

```

csrf功能:

1.csrf中间件中执行process_request:

?    1. 从cookie中获取到csrftoken的值

?    2. csrftoken的值放入到 request.META

2.执行process_view

1. 查询视图函数是否使用csrf_exempt装饰器,使用了就不进行csrf的校验

2. 判断请求方式:

   1. 如果是GET‘, ‘HEAD‘, ‘OPTIONS‘, ‘TRACE‘

      不进行csrf校验

      2. 其他的请求方式(post,put)

      进行csrf校验:

      1.获取cookie中csrftoken的值

      获取csrfmiddlewaretoken的值

      ?    能获取到  ——》 request_csrf_token

      ?    获取不到   ——》 获取请求头中X-csrftoken的值 ——》request_csrf_token

      比较上述request_csrf_token和cookie中csrftoken的值,比较成功接收请求,比较不成功拒绝请求。

#### 11.11.1 ajax

详情地址:https://www.cnblogs.com/maple-shaw/articles/9524153.html

json的基础 

json

一种数据交换的格式

python

支持的数据类型:字符串、数字、列表、字典、布尔值、None

转化:序列化   josn.dumps(python的数据)      josn.dump(python的数据,f)    

?          反序列化   josn.loads(json的字符串)      josn.load(json的字符串,f)

js

支持的数据类型:字符串、数字、数组、对象、布尔值、null

转化:

序列化:JSON.stringfy(js的数据类型)

反序列化:JSON.parse(json的字符串)

![img](https://images2018.cnblogs.com/blog/867021/201804/867021-20180407213606833-782897022.jpg)

ajax的定义:
    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

特点:

1. 异步
2. 局部刷新
3. 传输的数据量少

ajax的标准格式

$.ajax({

?    url:发送的地址,

?    type:请求方式,

?    processData:false;  //不处理编码方式

?    contentType:false;    //不处理请求头

?    data:formobj,

?    success:function(res){

?    响应体

}

})

jquery发ajax请求

```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>AJAX局部刷新实例</title>
</head>
<body>

<input type="text" id="i1">+
<input type="text" id="i2">=
<input type="text" id="i3">
<input type="button" value="AJAX提交" id="b1">

<script src="/static/jquery-3.2.1.min.js"></script>
<script>
  $("#b1").on("click", function () {
    $.ajax({
      url:"/ajax_add/",
      type:"GET",
      data:{"i1":$("#i1").val(),"i2":$("#i2").val()},
      success:function (data) {
        $("#i3").val(data);
      }
    })
  })
</script>
</body>
</html>

HTML部分代码
```

上传文件:

```html
<input type="file" id="f1">
<button id="b1">上传</button>

$(‘#b1‘).click(function () {
        var  formobj =  new FormData();

        formobj.append(‘file‘,document.getElementById(‘f1‘).files[0]);  /*前端里元素的获取*/
        // formobj.append(‘file‘,$(‘#f1‘)[0].files[0]);
        formobj.append(‘name‘,‘alex‘);

        $.ajax({
            url: ‘/upload/‘,
            type: ‘post‘,
            data:formobj ,
            processData:false,  //
            contentType:false,
            success: function (res) {
                $("[name=‘i3‘]").val(res)
            },
        })
    })
```

ajax通过csrf的校验

前提条件:确保有csrftoken的cookie

在页面中使用{% csrf_token %}

加装饰器 ensure_csrf_cookie

from django.views.decorators.csrf import csrf_exempt,csrf_protect,  ensure_csrf_cookie

1.给data中添加csrfmiddlewaretoken的值

```html
data: {
    ‘csrfmiddlewaretoken‘:$(‘[name="csrfmiddlewaretoken"]‘).val(),
    a: $("[name=‘i1‘]").val(),
    b: $("[name=‘i2‘]").val(),
},
```

2.加请求头

```html
headers:{
    ‘x-csrftoken‘:$(‘[name="csrfmiddlewaretoken"]‘).val(),
},
```

### 

原文地址:https://www.cnblogs.com/doraemon548542/p/11638561.html

时间: 2024-07-30 11:33:48

doraemon的python csrf校验(国庆大更新)的相关文章

doraemon的python ORM必会操作(国庆大更新)

### 11.9 ORM的字段和参数 ```python AutoField 主键 IntegerField 整数 CharField 字符串 BoolleanField 布尔值 DateTimeField DateField 日期时间 auto_now_add=True #新增数据的时候回自动保存当前的时间 auto_now=True #新增.修改数据的时候回自动保存当前的时间 DecimalField 十进制的小数 max_digits 小数总长度 decimal_place 小数长度 ``

doraemon的python form组件(国庆大更新)

### 11.12 form组件 form组件的功能: 1. 生产input标签 2. 对提交的数据进行校验 3. 提供错误提示 定义form组件 ```python from django import forms class RegForm(forms.Form): username = forms.CharField() pwd = forms.CharField() ``` 使用的流程 视图 ```python form_obj = RegForm() form_obj = RegFor

doraemon的python cookie和session(国庆大更新)

### 11.10 cookie和session #### 11.10.1 cookie 定义:保存在浏览器本地上的一组组键值对 为什么有cookie? - http协议是无状态的,每次http请求都是对立的,相互之间没有关联,yongcoolie保存状态 特点: 1. 由服务器让浏览器进行设置的 2. 浏览器保存在浏览器本地 3. 下次访问的时候自动携带 4. 应用场景:登录.保存浏览器习惯.简单的投票 django中操作cookie 设置: ```python ret = redirect(

doraemon的python django框架的路由详解(国庆大更新)

### 11.8 路由 #### 11.8.1 urlconf ```python from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^admin/',admin.site.urls), #这里用到了正则 url(r'^home',views.home,{},name='home'), ] ``` #### 11.8.2 分组和命名分组 url上捕获的都是字符串 分组 ```python

doraemon的python django的中间件(国庆大更新)

### 11.13 中间件 中间件的定义: 中间件是处理django的请求和相应的框架级别的钩子,本质上就是一个类 中间件可以定义为五个方法: - process_request(self,request) - process_view(self, request, view_func, view_args, view_kwargs) - process_template_response(self,request,response) - process_exception(self, requ

用Python和FFmpeg查找大码率的视频文件

用Python和FFmpeg查找大码率的视频文件 本文使用Python2.7, 这个工作分两步 遍历文件夹下的视频文件 用ffprobe获取是视频文件的码率信息 用ffprobe 获取json格式的视频信息 用ffprobe.exe是FFmpeg自带的查看视频信息的工具,其获取json格式的信息命令如下 ffprobe -v quiet -print_format json -show_format -show_streams -i filename 这个命令会输出 带有 streams和for

python 一句话校验软件 hash值

转载: 我是如何 Python 一句话校验软件哈希值的 原创 2017-05-21 余弦 懒人在思考 MD5 python -c "import hashlib,sys;print hashlib.md5(open(sys.argv[1],'rb').read()).hexdigest()" Shadowsocks.exe 校验 下载软件是否被"中间人动过手脚" 例如:校验shadowsocks SHA-1 python -c "import hashli

python基础知识 05 python语言中的大整数

第五课 python语言中的大整数 java中的int 最大可以处理 2^31 -1(2147483647) 最小呢-2^31 (-2147483647)但是在Java中可以使用BigInteger 来处理无线大的数 print(2 ** 60) 结果为 1152921504606846976 print(2 ** 600) 41495155688809929585124078636911611510124462322424368999956573296906528114129081463997

Python+PyQT5的子线程更新UI界面的实例《新手必学》

今天小编就为大家分享一篇Python+PyQT5的子线程更新UI界面的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧子线程里是不能更新UI界面的,在移动端方面.Android的UI访问是没有加锁的,多个线程可以同时访问更新操作同一个UI控件.也就是说访问UI的时候,android系统当中的控件都不是线程安全的,这将导致在多线程模式下,当多个线程共同访问更新操作同一个UI控件时容易发生不可控的错误.所以Android中规定只能在UI线程中访问UI,相当于从另一个角度给Andr