django 之(五) --- 验证码|富文本|邮箱短信
验证码
在用户登录,注册以及一些敏感操作的时候,我们为了防止服务器被暴力请求,或爬虫爬取,我们可以使用验证码进行过滤,减轻服务器的压力。
原生实现:
- 库名:pip install Pillow 验证码需要使用绘图 Pillow
- 核心:Image(画布)、ImageDraw(画笔)、ImageFont(画笔修饰)
- urls.py 和 settings.py
# --------------- urls.py------------------
from django.conf.urls import url
from App import views urlpatterns = [
url(r'^getcode/',views.get_code,name='get_code'),
] # --------------settings.py-----------------
# 注册字体路径
FONT_PATH = os.path.join(BASE_DIR, 'static/fonts/ADOBEARABIC-BOLD.OTF')
- views.py
import random
from io import BytesIO
from PIL import Image, ImageFont
from PIL.ImageDraw import ImageDraw
from django.http import HttpResponse
from App.utils import get_color, generate_code
from DjangoCache import settings # &&&&&&&&&&& 验证码绘制 &&&&&&&&&
def get_code(request):
mode = 'RGB'
size = [200, 100]
red = get_color()
green = get_color()
blue = get_color()
color_bg = (red, green, blue) # 初始化 画布和画笔
# 画布(颜色模式rgb,画布尺寸,颜色)
image = Image.new(mode, size=size, color=color_bg)
# 画笔(画布,模式rgb)
imagedraw = ImageDraw(image, mode=mode)
# 构造字体样式(路径,默认值)
imagefont = ImageFont.truetype(settings.FONT_PATH, 100)
verify_code = generate_code()
request.session['verify_code'] = verify_code # 将验证码存入存sesssion for i in range(4):
fill = (get_color(), get_color(), get_color())
# 画图(坐标,画什么,字体,颜色)
imagedraw.text(xy=(50 * i, 0), text=verify_code[i], font=imagefont, fill=fill) for i in range(10000):
fill = (get_color(), get_color(), get_color())
xy = (random.randrange(201), random.randrange(100))
# 画干扰点(位置随机,颜色随机)
imagedraw.point(xy=xy, fill=fill)
# 设置字节内存流IO流
fp = BytesIO()
# 存入(在内存流,存入格式)
image.save(fp, 'png')
# fp.getvalue从内存中获取值 传递给前端
return HttpResponse(fp.getvalue(), content_type='image/png') # 将以下两个函数 放入工具类中。使用时导入
# 设置颜色。每次不同
def get_color():
return random.randrange(256) # 设置文字,每次不同
def generate_code():
source = 'qwertyuiopasdfghjklzxcvbnm1234567890'
code = ''
for i in range(4):
code += random.choice(source)
return code
@csrf_exempt
def login(request):
if request.method == 'GET':
return render(request, 'login.html') elif request.method == 'POST':
receive_code = request.POST.get('verify_code')
store_code = request.session.get('verify_code') if receive_code != store_code: # 判断验证码是否正确
return HttpResponseRedirect(reverse('app:login'))
return HttpResponse('登陆成功')
- login.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登陆</title>
<script src="https://cdn.bootcss.com/jquery/1.11.1/jquery.js"></script>
<script type="text/javascript" src="{% static 'js/login.js' %}"></script>
</head>
<body>
<form action="{% url 'app:login' %}" method="post">
<span>用户名:</span><input type="text" name="username" placeholder="精神精神">
<br>
<spam>验证码:</spam><input type="text" name="verify_code" placeholder="请输入下图验证码">
<br>
<img src="{% url 'app:get_code' %}" >
<button>登陆</button>
</form>
</body>
</html>
富文本
介绍:
富文本:Rich Text Format(RTF),是有微软开发的跨平台文档格式,大多数的文字处理软件
都能读取和保存RTF文档,其实就是可以添加样式的文档,和HTML有很多相似的地方
插件:
- 名称:tinymce 插件
- 安装:pip install django-tinymce
场景:
- 在后台管理中使用
- 在页面中使用,通常用来作博客
使用:
- 配置,settings.py文件中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App',
'tinymce', # 注册
] # 配置
TINYMCE_DEFAULT_CONFIG = {
'theme': 'advanced', # 主题样式
'width': 800, # 宽度
'height': 600, # 高度
}
- 应用
- models.py 配置模型并迁移同步。HTMLfield()继承自models.TextField
from django.db import models
from tinymce.models import HTMLField class Blog(models.Model):
b_content = HTMLField()
- urls.py 和 views.py 路由和试图
from django.conf.urls import url
from App import views urlpatterns = [
url(r'^editblog/',views.edit_blog,name='edit_blog'),
] # ================================= from django.shortcuts import render def edit_blog(request):
return render(request,'edit_blog.html')
- edit_blog.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EditBlog</title>
<script type="text/javascript" src="/static/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
"mode": "textareas",
"theme": "advanced",
"width": 800,
"height": 600
})
</script>
</head>
<body>
<form action="{% url 'app:edit_blog' %}" method="post">
{% csrf_token %}
<textarea name="content"></textarea>
<button>保存</button>
</form>
</body>
</html>
邮箱认证
短信认证
django 之(五) --- 验证码|富文本|邮箱短信的更多相关文章
- Django (八) 中间件&验证码&富文本&缓存
中间件&验证码&富文本&缓存 1. 中间件&AOP 中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) 中间件的本质就是一 ...
- CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合Cacti等相关软件,重新编译而成的一个操作系统! 说明:CactiEZ中文版V10.1是基于CentOS 6.0系统,整合 ...
- 在django中集成ckeditor富文本
目前用的比较多的富文本插件有百度的ueditor.ckeditor.kindeditor等,其中ueditor和kindeditor比较美观,ckeditor的皮肤较少.但是ueditor加载较慢,k ...
- django—xadmin中集成富文本编辑器ueditor
一.安装 pip命令安装,由于ueditor为百度开发的一款富文本编辑框,现已停止维护,如果解释器为python2,则直接pip install djangoueditor 解压包安装,python3 ...
- 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使用xadmin集成富文本编辑器Ueditor(方法二)
一.xadmin的安装与配置1.安装xadmin,其中第一种在python3中安装不成功,推荐第二种或者第三种 方式一:pip install xadmin 方式二:pip install git+g ...
- Django项目中添加富文本编辑器django-ckeditor
django-ckeditor库的使用步骤: 1.在命令行下安装django-ckeditor这个库: 命令:pip install django-ckeditor 2.安装成功后,配置Django项 ...
随机推荐
- python_json模块和pickle模块
json 优点:所有语言通用:缺点:只能序列化基本的数据类型list/dict/int... json格式中,字符串必须是双引号,字符都是小写. 序列化: import json v = [12,3, ...
- 一款超好用的第三方评论插件--Gittalk
使用GITALK的背景: 1. 最近在做一个基于Java的个人博客系统,已经基本完工了,突然发现怎么没有评论的操作,如果再从头开始从数据库开始写的话,花费的代价有点大,于是乎我就在网上寻找一款适合我的 ...
- Task异步
快速示例 class Program { static void Main(string[] args) { //Console.WriteLine("main start..") ...
- Air Raid POJ - 1422 【有向无环图(DAG)的最小路径覆盖【最小不相交路径覆盖】 模板题】
Consider a town where all the streets are one-way and each street leads from one intersection to ano ...
- socket编程和并发服务器
socket这个词可以表示很多概念: 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket. 在TCP协议中,建立连接的两个进程 ...
- CSP-S 模拟测试92 题解
话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...
- 2019CCPC-江西省赛C题 HDU6569 GCD预处理+二分
Trap Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- 修改history记录数
在linux系统下.history命令会保存多少条命令呢?曾在一本书上说,如果注销系统,那么会将所有的历史命令都定入到~/.bash_history, 但只保留1000条命令(这个是由默认的shell ...
- c标签forEach
<c:forEach items="${requestScope.getUserMenuModelList}" var="item" varStatus= ...
- 常见的RuntimeException
一般面试中java Exception(runtimeException )是必会被问到的问题常见的异常列出四五种,是基本要求.更多的....需要注意积累了 常见的几种如下: NullPointerE ...