django 之(五) --- 驗證碼|富文本|郵箱短信

驗證碼

 在用戶登陸,註冊以及一些敏感操做的時候,咱們爲了防止服務器被暴力請求,或爬蟲爬取,咱們能夠使用驗證碼進行過濾,減輕服務器的壓力。javascript

原生實現: css

  • 庫名:pip install Pillow    驗證碼須要使用繪圖 Pillow
  • 核心:Image(畫布)、ImageDraw(畫筆)、ImageFont(畫筆修飾)
    • urls.py 和 settings.py
 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')
    •  views.py 
 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('登錄成功')
    • login.html
 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

  • 名稱:tinymce 插件
  • 安裝:pip install django-tinymce

 場景:django

  • 在後臺管理中使用
  • 在頁面中使用,一般用來做博客

 使用:服務器

  • 配置,settings.py文件中
 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 }
  • 應用
    • models.py  配置模型並遷移同步。HTMLfield()繼承自models.TextField
1 from django.db import models
2 from tinymce.models import HTMLField
3 
4 class Blog(models.Model):
5     b_content = HTMLField()
    • urls.py 和 views.py 路由和試圖
 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')
    • 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>

郵箱認證

 

 

 

 

 

 

 

 

 

短信認證

相關文章
相關標籤/搜索