CAPTCHA ย่อมากจาก (Completely Automated Public Turing test to tell Computers and Humans Apart) เป็นระบบหรือมาตรฐานความปลอดภัยอย่างหนึ่งที่ใช้ในการตรวจสอบสิทธิ์หรือป้องกันดูแลระบบจากการถูกสแปมจากบอทโดยหน้าที่หลักของ captcha คือการตรวจสอบ user ว่าเป็นมนุษย์หรือไม่โดย captcha จะมีหลายรูปแบบไม่ว่าจะเป็นการตอบคำถาม การเลือกรูปภาพ การกรอกอักษรหรือตัวเลขต่างๆทีถูกสุ่มมา ให้ถูกต้อง
โดยวันนี้เราใช้ตัว package ที่มีชื่อว่า django-simple-captcha เป็น package สำหรับสร้าง Captcha ง่ายๆเพียงไม่กี่ขั้นตอน
เริ่มต้นให้เราทำการติดตั้งตัว django-simple-captcha ลงในโปรเจค Django ของเราก่อน
$ pip install django-simple-captcha
ติดตั้ง Captcha ใน INSTALLED_APPS[...] ที่ไฟล์ settings.py
INSTALLED_APPS = [
........,
'captcha'
]
จากนั้น run python manage.py migrate 1 ครั้ง
$ python manage.py migrate
ไปที่ urls.py เพื่อทำการ set path
urlpatterns += [
path('captcha/', include('captcha.urls')),
]
สร้าง form สำหรับเรียกใช้งานใน forms.py
from captcha.fields import CaptchaField
class CaptchaTestForm(forms.Form):
captcha = CaptchaField()
ทดสอบทำงานง่ายๆ ใน views.py
def register(request):
cap = CaptchaTestForm()
return render(request, 'register.html', {'cap': cap})
เรียกใช้งานในส่วนของ HTML
{{ cap.captcha }}
ตัวอย่าง
เช็คความถูกของ Captcha
form = CaptchaTestForm(request.POST)
if form.is_valid():
เงื่อนไขที่ต้องการหากผู้ใช้งานกรอก Captcha ถูกต้อง
ตัวอย่าง
def registercheck(request):
if request.method == 'POST': # เช็คว่ามีการส่งข้อมูลมาในรูปแบบ POST หรือไม่
form = CaptchaTestForm(request.POST) # รับ request จาก form ของ Captcha
firstname = request.POST['firstname'] # รับ request จาก form fistname
lastname = request.POST['lastname'] # รับ request จาก form lastname
username = request.POST['username'] # รับ request จาก form username
password = request.POST['password'] # รับ request จาก form password
email = request.POST['email'] # รับ request จาก form email
phone = request.POST['phone'] # รับ request จาก form phone
address = request.POST['address'] # รับ request จาก form address
photo = request.FILES['photo'] # รับ request จาก form photo
if form.is_valid(): # เช็คว่า form ของ captcha ถูกต้องหรือไม่
row = Member.objects.filter(username=username) # สร้างตัวแปร row เก็บข้อมูลว่ามี username ในฐานข้อมูลหรือไม่
if row.count() == 0: # ถ้า row มีค่าเป็น 0 แปลว่า username ไม่ซ้ำ
row = Member.objects.filter(email=email) # สร้างตัวแปร row เก็บข้อมูลว่ามี email ในฐานข้อมูลหรือไม่
if row.count() == 0: # ถ้า row มีค่าเป็น 0 แปลว่า email ไม่ซ้ำ
r = Member(firstname=firstname, lastname=lastname,
username=username, password=password,
email=email, phone=phone,
address=address, photo=photo,
)
r.save() # บันทึกข้อมูลลงฝนฐานข้อมูล
return redirect('/login') # ทำการ return ไปยังหน้า login
else: # ถ้า email ซ้ำ
cap = CaptchaTestForm() # สร้าง form captcha ขึ้นมาใหม่
return render(request, 'register.html', {'err_msg': 'email มีผู้ใช้งานแล้ว', 'cap': cap}) # return ไปยังหน้า register พร้อมแสดงข้อความ err_msg
else: # ถ้า username ซ้ำ
cap = CaptchaTestForm() # สร้าง form captha ขึ้นมาใหม่
return render(request, 'register.html', {'err_msg': 'Username มีผู้ใช้งานแล้ว', 'cap': cap}) # return ไปยังหน้า register พร้อมแสดงข้อความ err_msg
else: # ถ้า form ของ captcha ผิด
cap = CaptchaTestForm() # สร้าง form captha ขึ้นมาใหม่
return render(request, 'register.html', {'err_msg': 'รหัสความปลอดภัยผิด', 'cap': cap}) # return ไปยังหน้า register พร้อมแสดงข้อความ err_msg
เพียงเท่านี้เราก็สามารถใช้งานได้แล้ว
หน้าที่หลักของ Captcha ก็คือการป้องกันการโดนสแปมข้อมูลของ Bot หรือโปรแกรม Auto ต่างๆ นั้นเอง
สำหรับตัว Captcha ที่เรามักจะเจอบ่อยก็คือ reCAPTCHA ของ Google นั้นเอง
คอร์สเรียน Django Crash Course 2021 (Free) by STACKPYTHON
Follow us on
Medium: STACKPYTHON
Youtube: STACKPYTHON
Facebook: STACKPYTHON
| Like | Comment | Share | >> STACKPYTHON
>> แนะนำ 📒Python WebDevelopment with Django (Course)
กิจกรรมที่กำลังจะมาถึง
ไม่พลาดกิจกรรมเด็ด ๆ ที่น่าสนใจ
Event นี้จะเริ่มขึ้นใน April 25, 2023
รายละเอียดเพิ่มเติม/สมัครเข้าร่วมคอร์สเรียนไพธอนออนไลน์ที่เราได้รวบรวมและได้ย่อยจากประสบการณ์จริงและเพื่อย่นระยะเวลาในการเรียนรู้ ลองผิด ลองถูกด้วยตัวเองมาให้แล้ว เพราะเวลามีค่าเป็นอย่างยิ่ง พร้อมด้วยการซัพพอร์ตอย่างดี