在用户登陆,注册以及一些敏感操做的时候,咱们为了防止服务器被暴力请求,或爬虫爬取,咱们能够使用验证码进行过滤,减轻服务器的压力。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>