Django (八) 中间件验证码富文本缓存
生活随笔
收集整理的這篇文章主要介紹了
Django (八) 中间件验证码富文本缓存
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 中間件&AOP
中間件:是一個輕量級的,底層的插件,可以介入Django的請求和響應過程(面向切面編程) ? 中間件的本質就是一個python類 ? 面向切面編程(Aspect Oriented Programming)簡稱AOP。AOP的主要實現(xiàn)目的是針對業(yè)務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合的隔離效果。 ? 中間件可實現(xiàn)功能 ? - 統(tǒng)計 ? - 黑名單 ? - 白名單 ? - 反爬 ? - 界面友好化(捕獲異常)1.1 中間件的可切入點
?
1.2 切入函數(shù)
__init__: ? 沒有參數(shù),服務器響應第一個請求的時候自動調用,用戶確定是否啟用該中間件 process_request(self,request): ? 在執(zhí)行視圖前被調用,每個請求上都會調用,不主動進行返回或返回HttpResponse對象 process_view(self,request,view_func,view_args,view_kwargs): 調用視圖之前執(zhí)行,每個請求都會調用,不主動進行返回或返回HttpResponse對象 process_template_response(self,request,response): ? 在視圖剛好執(zhí)行完后進行調用,每個請求都會調用,不主動進行返回或返回HttpResponse對象 process_response(self,request,response): ? 所有響應返回瀏覽器之前調用,每個請求都會調用,不主動進行返回或返回HttpResponse對象 process_exception(self,request,exception): ? 當視圖拋出異常時調用,不主動進行返回或返回HttpResponse對象1.3 自定義中間件
自定義中間件流程 1.在工程目錄下創(chuàng)建middleware目錄 2.目錄中創(chuàng)建一個python文件 3.在python文件中導入中間件的基類 from django.utils.deprecation import MiddlewareMixin 4.在類中根據(jù)功能需求,創(chuàng)建切入需求類,重寫切入點方法 ? ? ? class LearnAOP(MiddlewareMixin): ? ? ? ? ? def process_request(self,request): ? ? ? ? ? ? ? print('request的路徑',request.GET.path) 5.啟用中間件,在settings中進行配置,MIDDLEWARE中添加middleware.文件名.類名 ??
2.驗證碼
在用戶登錄,注冊以及一些敏感操作的時候,我們?yōu)榱朔乐狗掌鞅槐┝φ埱?#xff0c;或爬蟲爬取,我們可以使用驗證碼進行過濾,減輕服務器的壓力。 ? 驗證碼需要使用繪圖 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),是由微軟開發(fā)的跨平臺文檔格式,大多數(shù)的文字處理軟件都能讀取和保存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, } 創(chuàng)建模型類 ? ? ? 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應該是提供跨越不同緩存后端的一致接口
-
-
可擴展性
-
基于開發(fā)人員的需求,緩存API應該可以在應用程序級別擴展
-
緩存
-
django內置了緩存框架,并提供了幾種常用的緩存
-
基于Memcached緩存
-
使用數(shù)據(jù)庫進行緩存
-
使用文件系統(tǒng)進行緩存
-
使用本地內存進行緩存
-
提供緩存擴展接口
-
緩存配置
創(chuàng)建緩存表
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)使用原生緩存來實現(xiàn)
def get_user_list(request): ? ? # 每次從緩存中獲取 ? user_cache = cache.get('user_cache') ? ? # 如果有緩存,則從緩存中直接取 ? if user_cache: ? ? ? result = user_cache ? ? # 如果沒有緩存,則從數(shù)據(jù)庫中獲取 ? else: ? ? ? # 模擬長時間的數(shù)據(jù)操作 ? ? ? 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 (八) 中间件验证码富文本缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows server 2012
- 下一篇: (可远程)开源手机app控制c51单片机