Django 에서 pillow 를 사용 하여 로그 인 인증 코드 기능 실현(인증 코드 새로 고침 기능 포함)
5044 단어 Django인증 코드 새로 고침인증번호
verification_code.py
import random
from PIL import Image, ImageFont, ImageDraw
def get_code():
mode = 'RGB'
bg_width = 180 #
bg_height = 30 #
bg_size = (bg_width, bg_height)
bg_color = (255, 255, 255)
ttf_path = 'config/DejaVuSansMono.ttf'# , linux
# ttf_path = '/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf' #
img = Image.new(mode, bg_size, bg_color)
draw = ImageDraw.Draw(img, mode)
font = ImageFont.truetype(ttf_path, 20)#
# generate text
letters = get_letters()
for index, text in enumerate(letters):
x = 35 * index + 10 #
y = 0
draw.text((x, y), text, get_rdmcolor(), font)
# blur the background
for i in range(100): # , ,
x = random.randint(0, bg_width)
y = random.randint(0, bg_height)
fill = get_rdmcolor()
draw.point((x, y), fill)
return img, letters
def get_letters(): # 4
base = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
result = []
for i in range(4): # 4 , , ,
result.append(random.choice(base))
return result
def get_rdmcolor():
return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
템 플 릿
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="POST" action="login/">
<p> :<input type="text" name="user"></p>
<p> :<input type="text" name="pwd"></p>
<label for="verification_code"> :</label><input type="text" id="verification_code" name="verification_code"
placeholder="Please type below code">
<img class="identifyCode" title=" " onclick="this.setAttribute('src','verification_code?random='+Math.random())" src="{% url 'verification_code' %}" alt="verification code">
<br>
<input type="submit" value=" ">
</form>
<script>
</script>
</body>
</html>
onclick="this.setAttribute('src','verification_code?random='+Math.random())"
이 onclick 사건 은 바로 그림 을 클릭 하여 인증 코드 를 갱신 하 는 기능 을 실현 하 는 것 입 니 다.그런데 왜 무 작위 수 를 추가 해 야 합 니까?그러면 브 라 우 저 캐 시 를 가지 않 습 니 다.urls.py
from django.urls import path
from test_login_app import views
urlpatterns = [
path('',views.index),
path('verification_code/', views.verification_code, name='verification_code'),
path('login/',views.login),
path('index/',views.index2),
]
views.py
from io import BytesIO
from django.http import HttpResponse
from django.shortcuts import render, redirect
from common.verification_code import get_code
# Create your views here.
def index(request):
return render(request, 'login.html')
def verification_code(request):
img, letters = get_code()
request.session['verification_code'] = ''.join(letters)
fp = BytesIO()
img.save(fp, 'png')
return HttpResponse(fp.getvalue(), content_type='image/png')
def login(request):# ,
if request.method == 'POST':
name = request.POST.get('user')
password = request.POST.get('pwd')
code = request.POST.get('verification_code')
if name == 'fuck' and password == 'xxoo' and code == request.session.get('verification_code', ''):
return redirect('/index/')
return render(request,'login.html')
def index2(request):
return render(request,'index.html')
완제품Django 에서 pillow 를 사용 하여 로그 인 인증 코드 기능(인증 코드 새로 고침 기능 포함)을 수행 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Django 인증 코드 새로 고침 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.