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项 ...
随机推荐
- mysql查询表中最后一条记录
查询全部的记录: select * from test_limit ; 查第一条记录: select * from test_limit limit 1; ...
- Windows服务 System.ServiceProcess.ServiceBase类
一.Windows服务 1.Windows服务应用程序是一种需要长期运行的应用程序,它适合服务器环境. 2.无用户界面,任何消息都会写进Windows事件日志. 3.随计算机启动而启动,不需要用户一定 ...
- python 中的 字符串 列表 元祖 字典
str 1 格式化输出 %法 第一种 %s+tuple %d+tuple name = input('请输入你的姓名:') age = input('请输入你的年龄:') hobby = input( ...
- C# 操作文件夹、文件
Form namespace FileProperties { public partial class Form1 : Form { private string currentFolderPath ...
- CF557E Ann and Half-Palindrome 字典树+dp
现在看这道题也不难啊,不知道考场上为啥没切~ code: #include <bits/stdc++.h> #define N 5006 #define setIO(s) freopen( ...
- 【线性代数】6-6:相似矩阵(Similar Matrices)
title: [线性代数]6-6:相似矩阵(Similar Matrices) categories: Mathematic Linear Algebra keywords: Similar Matr ...
- React前端开发环境搭建
先,我们需要明确的是React和很多前端框架一样,底层都还是js以及html,即便它有着看似特殊的jsx语法. 我们要在服务端运行js,就需要依赖一个环境,和运行war包需要tomcat一类中间件一样 ...
- [BJOI2019]光线——递推
题目链接: [BJOI2019]光线 设$F_{i}$表示从第$1$面玻璃上面向下射入一单位光线,穿过前$i$面玻璃的透光率. 设$G_{i}$表示从第$i$面玻璃下面向上射入一单位光线,穿过前$i$ ...
- CentOS7.4中配置jdk环境
参考:https://www.linuxidc.com/Linux/2016-09/135556.htm 1.下载jdk 首先创建安装包放置位置 mkdir -p /usr/local/java 然后 ...
- 第11组 Alpha冲刺(5/6)
第11组 Alpha冲刺(5/6) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11898559.html 作业博客 https://edu ...