在用戶登陸,註冊以及一些敏感操做的時候,咱們爲了防止服務器被暴力請求,或爬蟲爬取,咱們能夠使用驗證碼進行過濾,減輕服務器的壓力。javascript
原生實現: css
1 # --------------- urls.py------------------ 2 from django.conf.urls import url 3 from App import views 4 5 urlpatterns = [ 6 url(r'^getcode/',views.get_code,name='get_code'), 7 ] 8 10 # --------------settings.py----------------- 11 # 註冊字體路徑 12 FONT_PATH = os.path.join(BASE_DIR, 'static/fonts/ADOBEARABIC-BOLD.OTF')
1 import random 2 from io import BytesIO 3 from PIL import Image, ImageFont 4 from PIL.ImageDraw import ImageDraw 5 from django.http import HttpResponse 6 from App.utils import get_color, generate_code 7 from DjangoCache import settings 8 9 10 # &&&&&&&&&&& 驗證碼繪製 &&&&&&&&& 11 def get_code(request): 12 mode = 'RGB' 13 size = [200, 100] 14 red = get_color() 15 green = get_color() 16 blue = get_color() 17 color_bg = (red, green, blue) 18 19 # 初始化 畫布和畫筆 20 # 畫布(顏色模式rgb,畫布尺寸,顏色) 21 image = Image.new(mode, size=size, color=color_bg) 22 # 畫筆(畫布,模式rgb) 23 imagedraw = ImageDraw(image, mode=mode) 24 # 構造字體樣式(路徑,默認值) 25 imagefont = ImageFont.truetype(settings.FONT_PATH, 100) 26 verify_code = generate_code() 27 request.session['verify_code'] = verify_code # 將驗證碼存入存sesssion 28 29 for i in range(4): 30 fill = (get_color(), get_color(), get_color()) 31 # 畫圖(座標,畫什麼,字體,顏色) 32 imagedraw.text(xy=(50 * i, 0), text=verify_code[i], font=imagefont, fill=fill) 33 34 for i in range(10000): 35 fill = (get_color(), get_color(), get_color()) 36 xy = (random.randrange(201), random.randrange(100)) 37 # 畫干擾點(位置隨機,顏色隨機) 38 imagedraw.point(xy=xy, fill=fill) 39 # 設置字節內存流IO流 40 fp = BytesIO() 41 # 存入(在內存流,存入格式) 42 image.save(fp, 'png') 43 # fp.getvalue從內存中獲取值 傳遞給前端 44 return HttpResponse(fp.getvalue(), content_type='image/png') 45 46 47 # 將如下兩個函數 放入工具類中。使用時導入 48 # 設置顏色。每次不一樣 49 def get_color(): 50 return random.randrange(256) 51 52 # 設置文字,每次不一樣 53 def generate_code(): 54 source = 'qwertyuiopasdfghjklzxcvbnm1234567890' 55 code = '' 56 for i in range(4): 57 code += random.choice(source) 58 return code
1 @csrf_exempt 2 def login(request): 3 if request.method == 'GET': 4 return render(request, 'login.html') 5 6 elif request.method == 'POST': 7 receive_code = request.POST.get('verify_code') 8 store_code = request.session.get('verify_code') 9 10 if receive_code != store_code: # 判斷驗證碼是否正確 11 return HttpResponseRedirect(reverse('app:login')) 12 return HttpResponse('登錄成功')
1 {% load static %} 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>用戶登錄</title> 7 <script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.js"></script> 8 <script type="text/javascript" src="{% static 'js/login.js' %}"></script> 9 </head> 10 <body> 11 <form action="{% url 'app:login' %}" method="post"> 12 <span>用戶名:</span><input type="text" name="username" placeholder="精神精神"> 13 <br> 14 <spam>驗證碼:</spam><input type="text" name="verify_code" placeholder="請輸入下圖驗證碼"> 15 <br> 16 <img src="{% url 'app:get_code' %}" > 17 <button>登錄</button> 18 </form> 19 </body> 20 </html>
介紹:html
富文本:Rich Text Format(RTF),是有微軟開發的跨平臺文檔格式,大多數的文字處理軟件前端
都能讀取和保存RTF文檔,其實就是能夠添加樣式的文檔,和HTML有不少類似的地方java
插件:jquery
場景:django
使用:服務器
1 INSTALLED_APPS = [ 2 'django.contrib.admin', 3 'django.contrib.auth', 4 'django.contrib.contenttypes', 5 'django.contrib.sessions', 6 'django.contrib.messages', 7 'django.contrib.staticfiles', 8 'App', 9 'tinymce', # 註冊 10 ] 11 12 # 配置 13 TINYMCE_DEFAULT_CONFIG = { 14 'theme': 'advanced', # 主題樣式 15 'width': 800, # 寬度 16 'height': 600, # 高度 17 }
1 from django.db import models 2 from tinymce.models import HTMLField 3 4 class Blog(models.Model): 5 b_content = HTMLField()
1 from django.conf.urls import url 2 from App import views 3 4 urlpatterns = [ 5 url(r'^editblog/',views.edit_blog,name='edit_blog'), 6 ] 7 8 # ================================= 9 10 from django.shortcuts import render 11 12 def edit_blog(request): 13 return render(request,'edit_blog.html')
1 {% load static %} 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>EditBlog</title> 7 <script type="text/javascript" src="/static/tiny_mce/tiny_mce.js"></script> 8 <script type="text/javascript"> 9 tinyMCE.init({ 10 "mode": "textareas", 11 "theme": "advanced", 12 "width": 800, 13 "height": 600 14 }) 15 </script> 16 </head> 17 18 <body> 19 <form action="{% url 'app:edit_blog' %}" method="post"> 20 {% csrf_token %} 21 <textarea name="content"></textarea> 22 <button>保存</button> 23 </form> 24 </body> 25 </html>