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 要返回固定参数。

在这里插入图片描述

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,详细操作请看官方文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSRF(Cross-Site Request Forgery)即跨站请求伪造,是一种常见的Web攻击方式。攻击者通过伪造用户的请求,来实现恶意操作,例如:以用户的名义发帖、发私信、盗取用户信息等。Django中提供了内置的CSRF防护机制,来保护应用程序免受此类攻击。 Django中的CSRF防护机制是通过在表单中添加一个CSRF令牌来实现的。这个令牌会在服务器端生成,并在表单中作为隐藏字段传递给客户端。当表单被提交时,服务器会验证这个令牌是否合法,如果不合法则拒绝请求。 在Django中开启CSRF防护机制非常简单,只需要在模板中添加`{% csrf_token %}`标签即可。例如: ```html <form method="post"> {% csrf_token %} <!-- 表单内容 --> <input type="submit" value="提交"> </form> ``` 在处理POST请求的视图函数中,如果需要访问POST数据,则需要使用`django.views.decorators.csrf.csrf_protect`装饰器来保护视图函数。例如: ```python from django.views.decorators.csrf import csrf_protect @csrf_protect def my_view(request): if request.method == 'POST': # 处理POST请求 else: # 处理GET请求 ``` 如果需要在某个视图函数中关闭CSRF防护机制,可以使用`django.views.decorators.csrf.csrf_exempt`装饰器来取消保护。例如: ```python from django.views.decorators.csrf import csrf_exempt @csrf_exempt def my_view(request): # 处理请求 ``` 总之,DjangoCSRF防护机制可以有效地保护应用程序免受跨站请求伪造攻击。如果你的应用程序涉及到敏感数据或者操作,一定要开启CSRF防护机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值