中间件&验证码&富文本&缓存

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缓存

    • 使用数据库进行缓存

    • 使用文件系统进行缓存

    • 使用本地内存进行缓存

    • 提供缓存扩展接口

缓存配置

  1. 创建缓存表

    python manage.py createcachetable [table_name]

  2. 缓存配置

    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)

转载于:https://www.cnblogs.com/gugubeng/p/9723446.html

Django (八) 中间件验证码富文本缓存相关推荐

  1. django 与 百度 ueditor 富文本编辑器集成

    django 是基于 python 的一个很好的web开发框架.ueditor 是百度开源的一个富文本编辑器.有很好的用户体验,很适合中国人使用的一个编辑器. 在使用ueditor 之前,我集成过 f ...

  2. django html文本编辑器,django xadmin 集成DjangoUeditor富文本编辑器

    #### 本文档记录自己的学习历程! #### 介绍 - Ueditor HTML编辑器是百度开源的在线HTML编辑器,功能非常强大 #### 额外功能 - 解决图片视频等无法上传显示问题 #### ...

  3. Django项目中集成富文本编辑器的通用方法,适合KindEditor,xhEditor,NicEditor,wymeditor等 .

    首先,请参考我以前写的一篇博客:如何把nicEditor集成到django中使用 http://blog.csdn.net/huyoo/article/details/4382317 这篇文章中的做法 ...

  4. django框架加入simditor富文本编辑器,使用mako进行渲染

    1.安装依赖 django-simditor==0.0.15 2.配置 INSTALLED_APPS += ('simditor', )SIMDITOR_TOOLBAR = ['title', 'bo ...

  5. 【Django 027】tinymce富文本框使用详解

    针对博客和论坛类网站,用户需要在网页的富文本框中输入内容传递到后端.那么Django项目如何生成一个包含富文本框的页码,又如何获取用户上传的富文本内容呢?这一节我们就一起来看看. 我是T型人小付,一位 ...

  6. Django项目后台admin富文本KindEditor教程0基础

    由于Django开发过程中,发现对于博客类的文章前端显示不友好,所以想在后台集成一个富文本编辑器,这样就可以轻松的解决前台页面显示没有格式的问题,给你一个漂亮的.可以编辑格式的前端页面. 在引入富文本 ...

  7. python自动发邮件富文本_django 实现后台从富文本提取纯文本

    前言: 很多时候我们都会用富文本,比如说在版权区.博客文章编辑时等等.但是如果我们要做一个搜索的功能,去从富文本中查找关键字,就需要将富文本中的文本了.但是 django 并没有专门函数去做.这个时候 ...

  8. Django的边边角角(二):缓存、中间件、分页器、富文本

    文章目录 一.缓存 1.概述 2.Django内置缓存实现 (1)装饰器缓存 (2)数据库缓存 (3)内存级数据库缓存(redis) 3.多级缓存 (1)多级缓存 - 装饰器缓存 (2)多级缓存 - ...

  9. django 高级扩展-中间件-上传图片-分页-富文本-celery

    """ django 高级扩展一.静态文件 1.css,js,json,图片,字体等 2.配置setting,在最底下设置静态文件目录,写入下面代码 #配置静态文件目录 ...

最新文章

  1. 项目实施中应该注意的事项
  2. OS X 10.11 cocoapods
  3. 区别用户使用的终端设备代码 转 https://segmentfault.com/a/1190000012957023
  4. redis哨兵集群的搭建
  5. layui option 动态添加_layui select动态添加option的实例
  6. 在vs2010 .net 4.0 引用dll .net 2.0(转)
  7. php用什么打开_php文件怎么打开,用什么软件打开php文件
  8. 计算机固态硬盘与机械硬盘的区别是什么,电脑固态硬盘与机械硬盘的区别是什么,应该如何选择...
  9. python sort sorted_Python sort和sorted
  10. 20张Python高清数据分析全知识地图,数据分析发展路线
  11. 让Win7系统屏幕来个大翻转
  12. Linux加密框架中的算法和算法模式(二)
  13. js实现定时弹出广告效果
  14. GAN入门实例【个人理解】
  15. SQL Server超详细使用教程——从安装到编写SQL语句
  16. 飞机大战的常见Bug
  17. 在Android系统中添加一款新铃声
  18. 蓝牙BQB认证RF射频测试
  19. hbw-utils - UUIDUtils
  20. VS2015西红柿插件出现问题的解决方式

热门文章

  1. mybatis大于小于等于
  2. 创业动力衰减 中国面临危险挑战
  3. kafka集群搭建(消息)
  4. docker 4 section
  5. 表单oninput和onchange事件区别
  6. 模拟产品展示 Flash无法展示的追踪过程
  7. EasyUI左右布居
  8. 匿名包装器(function(){})()
  9. Linux命令中正则表达式的运用
  10. 计算t-test 的C程序