Django (八) 中间件&验证码&富文本&缓存
中间件&验证码&富文本&缓存
1. 中间件&AOP
中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程)
中间件的本质就是一个python类
面向切面编程(Aspect Oriented Programming)简称AOP。AOP的主要实现目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合的隔离效果。
中间件可实现功能
- 统计
- 黑名单
- 白名单
- 反爬
- 界面友好化(捕获异常)
1.1 中间件的可切入点
1.2 切入函数
__init__:
没有参数,服务器响应第一个请求的时候自动调用,用户确定是否启用该中间件
process_request(self,request):
在执行视图前被调用,每个请求上都会调用,不主动进行返回或返回HttpResponse对象
process_view(self,request,view_func,view_args,view_kwargs):
调用视图之前执行,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_template_response(self,request,response):
在视图刚好执行完后进行调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_response(self,request,response):
所有响应返回浏览器之前调用,每个请求都会调用,不主动进行返回或返回HttpResponse对象
process_exception(self,request,exception):
当视图抛出异常时调用,不主动进行返回或返回HttpResponse对象
1.3 自定义中间件
自定义中间件流程
1.在工程目录下创建middleware目录
2.目录中创建一个python文件
3.在python文件中导入中间件的基类
from django.utils.deprecation import MiddlewareMixin
4.在类中根据功能需求,创建切入需求类,重写切入点方法
class LearnAOP(MiddlewareMixin):
def process_request(self,request):
print('request的路径',request.GET.path)
5.启用中间件,在settings中进行配置,MIDDLEWARE中添加middleware.文件名.类名
2.验证码
在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力。
验证码需要使用绘图 Pillow
pip install Pillow
核心
Image,ImageDraw,ImageFont
绘制流程
backgroundcolor = (10,20,30) RGB颜色
初始化画布
image = Image.new('RGB',(100,50),backgroundcolor)
获取画布中画笔对象
draw = ImageDraw.Draw(image)
绘制验证码,随机四个
font = ImageFont.truetype('path',size)
fontcolor = (20,40,60)
draw.text((x,y),'R',font,fontcolor)
最后扫尾
del draw
import io
buf = io.BytesIO()
Image.save(buf, 'png')
return HttpResponse(buf.getvalue(),'image/png')
3.富文本
富文本:Rich Text Format(RTF),是由微软开发的跨平台文档格式,大多数的文字处理软件都能读取和保存RTF文档,其实就是可以添加样式的文档,和HTML有很多相似的地方
tinymce 插件
django的插件
pip install django-tinymce
用处大约有两种
1. 在后台管理中使用
2. 在页面中使用,通常用来作博客
1.后台中使用:
配置settings.py文件
INSTALLED_APPS 添加 tinymce 应用
添加默认配置
TINYMCE_DEFAULT_CONFIG = {
'theme':'advanced',
'width':600,
'height':400,
}
创建模型类
from tinymce.models import HTMLField
class Blog(models.Model):
sBlog = HTMLField()
配置站点
admin.site.register
2.在视图中使用:
使用文本域盛放内容
<form>
<textarea></textarea>
</form>
在head中添加script
<script src='/static/tiny_mce/tiny_mce.js'></script>
<script>
tinyMCE.init({
'mode':'textareas', 'theme':'advanced',
'width':800,'height':600,
})
</script>
4. Cache
https://docs.djangoproject.com/zh-hans/2.0/topics/cache/
缓存框架的核心目标
较少的代码
缓存应该尽可能快
因此围绕缓存后端的所有框架代码应该保持在绝对最小值,特别是对于获取操作
一致性
缓存API应该是提供跨越不同缓存后端的一致接口
可扩展性
基于开发人员的需求,缓存API应该可以在应用程序级别扩展
缓存
django内置了缓存框架,并提供了几种常用的缓存
基于Memcached缓存
使用数据库进行缓存
使用文件系统进行缓存
使用本地内存进行缓存
提供缓存扩展接口
缓存配置
创建缓存表
python manage.py createcachetable [table_name]
缓存配置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
'TIMEOUT': '60',
'OPTIONS': {
'MAX_ENTRIES': '300',
},
'KEY_PREFIX': 'jack',
'VERSION': '1',
}
}
缓存使用
在视图中使用(使用最多的场景)
@cache_page()
time 秒 60*5 缓存五分钟
cache 缓存配置, 默认default,
key_prefix 前置字符串
缓存底层
获取cache
from django.core.cache import cache
cache = cache['cache_name'] 或 cache = cache.get('cache_name')
设置cache
from django.core.cache import cache
cache.set(key, value, timeout)
使用原生缓存来实现
def get_user_list(request):
# 每次从缓存中获取
user_cache = cache.get('user_cache')
# 如果有缓存,则从缓存中直接取
if user_cache:
result = user_cache
# 如果没有缓存,则从数据库中获取
else:
# 模拟长时间的数据操作
user_list = User.objects.all()
time.sleep(5)
data = {
'users': user_list,
}
# 使用模板渲染,得到result文本
template = loader.get_template('App/stu_list.html')
result = template.render(data)
# 设置缓存
cache.set('user_cache', result, 10)
return HttpResponse(result)
Django (八) 中间件&验证码&富文本&缓存的更多相关文章
- django 之(五) --- 验证码|富文本|邮箱短信
验证码 在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力. 原生实现: 库名:pip install Pillow ...
- django—xadmin中集成富文本编辑器ueditor
一.安装 pip命令安装,由于ueditor为百度开发的一款富文本编辑框,现已停止维护,如果解释器为python2,则直接pip install djangoueditor 解压包安装,python3 ...
- django之百度Ueditor富文本编辑器后台集成
Python3 + Django2.0 百度Ueditor 富文本编辑器的集成 百度富文本编辑器官网地址:http://fex.baidu.com/ueditor/ 疑问:为什么要二次集成? 答案:因 ...
- 在django中集成ckeditor富文本
目前用的比较多的富文本插件有百度的ueditor.ckeditor.kindeditor等,其中ueditor和kindeditor比较美观,ckeditor的皮肤较少.但是ueditor加载较慢,k ...
- django xadmin 集成DjangoUeditor富文本编辑器
本文档记录自己的学习历程! 介绍 Ueditor HTML编辑器是百度开源的在线HTML编辑器,功能非常强大 额外功能 解决图片视频等无法上传显示问题 Ueditor下载地址 https://gith ...
- Django xadmin后台添加富文本编辑器UEditor的用法
效果图: 步骤: 1.利用命令:pip install DjangoUeditor,安装DjangoUeditor,但由于DjangoUeditor没有python3版本的,从的Github上把修改好 ...
- django中使用tinymce 富文本
django后台集成富文本编辑器Tinymce 安装方式一: 1.首先去python的模块包的网站下载一个django-tinymce的包 https://pypi.python.org/pypi/ ...
- 【Django】中间件,csrf,缓存,信号
中间件(middleware) 描述:Middlewares 是修改 Django request 或者 response 对象的钩子. 在django中,中间件其实就是一个类,在请求到来和结束后,d ...
- Django使用xadmin集成富文本编辑器Ueditor(方法二)
一.xadmin的安装与配置1.安装xadmin,其中第一种在python3中安装不成功,推荐第二种或者第三种 方式一:pip install xadmin 方式二:pip install git+g ...
随机推荐
- php-get和post请求
1.get请求 <?php //判断20130101是否是工作日 //工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2: $url='http://www.easybots ...
- LoadRunner中两种录制模式的区别
决定我们成为什么样人的,不是我们的能力,而是我们的选择. ——<哈利-波特与密室> 一.先看看两种模式的设置和录制脚本的区别 设置HTML录制模式: 设置URL录制模式: HTML脚本: ...
- python 快速排序 qsort
def qsort(arr, start, end): if start > end: return def partition(arr, start, end): pivot = arr[st ...
- [原创]java操作word(一)
一. 需求背景 在做项目的过程中,经常会遇到要把数据库数据导出到Word文件中的需求,因为很多情况下,我们需要将数据导出到WORD中进行打印.此需求可以通过用程序填充数据到word模板中来实现.所谓模 ...
- 最小点覆盖 hdu--1054
点击打开题目链接 最小点覆盖=最大二分匹配的 (单向图) ; 最小点覆盖=最大二分匹配的一半 (双向图) ; 证明 所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案 具体算法都已经 ...
- codeforces 665B B. Shopping(水题)
题目链接: B. Shopping time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- python print 字体颜色
例子: print '\033[35;43m(1)ip转换成数字\033[0m' \033[35;43m ===>35列属于字颜色,43列属于背景颜色 字背景颜色范围: 40--49 4 ...
- POJ 3104 Contestants Division
Contestants Division Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10597 Accepted: ...
- GMap.NET 显示GIF图标的定制
利用System.Drawing.ImageAnimator类实现GIF图标显示 public class GMapMarkerImage : GMapMarker { private Image i ...
- 天天连萌UE分析
1.开始游戏消耗心,有消耗动画,[可以使用到副本次数上] 2.关卡结束,是个可爱的动画,[可以是潇洒的动画,一个吹箫的潇洒老翁或者帅哥] 3.点击爽快感:点击配对成功飘字及时且快速,[字体漂亮--潇洒 ...