Django中间件,CSRF(跨站请求伪造),缓存,信号,BootStrap(模板)-响应式(栅格)+模板

Django中间件,CSRF(跨站请求伪造),缓存,信号,BootStrap(模板)-响应式(栅格)+模板

1.中间件(重要):

在Django的setting中有个MIDDLEWARE列表,里面的东西可以理解为过滤管道,里面有个安全过滤管道: from django.middleware.csrf import CsrfViewMiddleware里面有四个常用的方法:

  • process_request:客户端请求的通道,但当此方法里面有return时就不会再执行后面的方法,直接走process_response方法(表示请求数据被拦截)。注:其中使用return 会拦截掉客户端的所有请求。
  • process_views:经过process_request之后再从新从每个管道的此方法执行后面的方法(后面的方法指的是主体URL请求时所走的views方法)。
  • process_exception:抛出异常,在process_response方法执行之前,且只抛出URL链接请求的views方法中的异常,不会抛出process_request,process_views中的异常,而且所有的异常抛出后才会从第一个process_response方法返回给客户端请求的内容。
  • process_response:请求获取到数据返回的路径。注:必有返回值 且 return 要返回固定参数。

Django中间件,CSRF(跨站请求伪造),缓存,信号,BootStrap(模板)-响应式(栅格)+模板_第1张图片

2.CSRF(跨站请求伪造):

默认情况下不使用任何方法或装饰器,在Django项目配置文件setting.py文件的MIDDLEWARE的csrf管道会拦截post请求。

  • 在使用form表单发送post请求时要在表单的里面加入{% csrf_token %}

  • 在使用Ajax发送post请求时要在Ajax里面的请求投headers加入{‘X-CSRFToken’.cookie(‘csrftoken’)} —(要导入Jquery文件和Jq的cookies文件)如果想全局设置headers就可以使用:

    //使用此方法就不用再ajax中再设置headers请求头
    <script>
        $(function(){
           
        	$.ajaxSetup({
           
                beforeSend:function(xhr){
           
                    xhr.setRequestHeader("X-CSRFToken",$.cookie('csrftoken'));
                }
            });
        });
    </script>
    
  • $.cookie(‘csrftoken’)是cookies的csrftoken随机字符串,csrf原理和cookie相似,他会给经过的信息做标记,携带此标记才不会被拦截,$.cookie(‘csrftoken’)的作用就是获取cookie的那个标记(csrf随机生成的字符串)

  • 由于中间件是针对全局操作的,当注释 #‘django.middleware.csrf.CsrfViewMiddleware’,整个网站的链接都不会执行CSRF验证,如果要针对某个链接请求操作使用CSRF操作可以在Views文件的方法上使用装饰器:@csrf_protect(声名使用CSRF)-- 全局不使用CSRF时,某几个需要使用时 –

  • 由于中间件是针对全局操作的,当使用 ‘django.middleware.csrf.CsrfViewMiddleware’,整个网站的链接都会执行CSRF验证,如果要针对某个链接请求禁止通过CSRF操作可以在Views文件的方法上使用装饰器:@csrf_exempt(声名禁止CSRF)-- 全局使用CSRF时,某几个不需要使用时 –

3.缓存

在settings.py文件里面配置:缓存级别

  • 全栈缓存:要使用两个特殊的中间件,放在setting的MIDDLEWARE列表里面,最上面一个,最下面一个。转载:https://www.cnblogs.com/wupeiqi/articles/5246483.html(里面包含缓存Session等知识)。
  • 单独视图缓存
  • 局部视图缓存

Django的六种缓存方式:

  • 开发调试:调试时使用,实际内部不做任何操作

  • 内存:缓存的内容存在内存中

  • 文件:缓存的内容存在文件中

  • 数据库:缓存的内容存在数据库中

  • Memcache缓存(python-memcached模块):此缓存使用python-memcached模块连接Memcache(另外一台机器)可以有三种链接方式,链接另一台机器,链接本机,链接多台机器。

  • Memcache缓存(pylibmc模块):此缓存使用pylibmc模块连接Memcache(另外一台机器)可以有三种链接方式,链接另一台机器,链接本机,链接多台机器。

  • 关于缓存更详细的内容请看转载链接:https://www.cnblogs.com/wupeiqi/articles/5246483.html

  • 关于缓存更详细的内容请看转载链接:https://www.cnblogs.com/wupeiqi/articles/5132791.html

    CACHES = {
           
        'default':{
           
            'BACKEND':'django.core.cache.backends.dummy.DummyCache' #引擎(开发调试的引擎)
            'TIMEOUT':300,       #缓存超时时间(默认300,None表示永不过期,0表示立即过期)
            'OPTIONS':{
           
                'MAX_ENTRIES':300,  #最大缓存个数(默认300)
                'CULL_FREQUENCY':3, #缓存到达最大数之后,剔除缓存个数的比例:1/CULL_FREQUENCY:3,只的是分数1/3,三分之一。
            },
            'KEY_PREFIX':'',        #缓存key的前缀(默认空)
            'VERSION':1,            #缓存key的版本(默认1)
            'KEY_FUNCTION':函数名,   #生成key的函数(默认函数会生成为:[前缀:版本号:key])
    	}
    }
    

4.信号(Django预留的钩子)

  1. 内置信号:在指定信号中注入操作函数

    作用:使用Django内部定义的信号,在指定位置 注入 指定操作(触发信号)

  2. 自定义信号:可应用于任何地方,可动态配置

    注:也可以自定义信号

  3. 大多用于大型程序的可扩展项

Model signals
	pre_init     #django的modal执行其构造方法前,自动触发
	post_init    #django的model执行其构造方法后,自动触发
	pre_save     #django的model对象保存前,自动触发
	post_save    #django的model对象保存后,自动触发
	pre_delete   #django的model对象删除前,自动触发
	post_delete  #django的model对象删除后,自动触发
	m2m_changed  #django的model中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
	#程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
Management signals
	pre_migrate  #执行migrate命令前,自动触发
	post_migrate #执行migrate命令后,自动触发
Request/resonse signals
	request_atarted        #请求到来前,自动触发
	request_finished       #请求结束后,自动触发
	got_request_exception  #请求异常后,自动触发
Test signals
	setting_changed        #使用test测试修改配置文件时,自动触发
	template_rendered      #使用test测试渲染模板时,自动触发
Database Wrappers
	connection_created     #创建数据库连接时,自动触发
使用方法:
from django.db.models.signals import class_prepared
def callback(sender,**Kwargs):
	print("pre_init_callback")
	print(sender,kwargs)
pre_init.connect(callback)
#导入方法:钩子函数名.connect(写好的函数)
#要在项目的__init__.py文件中写或导入

5.BootStrap(模板)-响应式(栅格)+ 模板

下载BootStrap,详细操作请看官方文档。

你可能感兴趣的:(python)