在Django的setting中有个MIDDLEWARE列表,里面的东西可以理解为过滤管道,里面有个安全过滤管道: from django.middleware.csrf import CsrfViewMiddleware里面有四个常用的方法:
默认情况下不使用任何方法或装饰器,在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时,某几个不需要使用时 –
在settings.py文件里面配置:缓存级别
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])
}
}
内置信号:在指定信号中注入操作函数
作用:使用Django内部定义的信号,在指定位置 注入 指定操作(触发信号)
自定义信号:可应用于任何地方,可动态配置
注:也可以自定义信号
大多用于大型程序的可扩展项
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文件中写或导入
下载BootStrap,详细操作请看官方文档。