Captcha คืออะไร
****
CAPTCHA ย่อมากจาก (Completely Automated Public Turing test to tell Computers and Humans Apart) เป็นระบบหรือมาตรฐานความปลอดภัยอย่างหนึ่งที่ใช้ในการตรวจสอบสิทธิ์หรือป้องกันดูแลระบบจากการถูกสแปมจากบอทโดยหน้าที่หลักของ captcha คือการตรวจสอบ user ว่าเป็นมนุษย์หรือไม่โดย captcha จะมีหลายรูปแบบไม่ว่าจะเป็นการตอบคำถาม การเลือกรูปภาพ การกรอกอักษรหรือตัวเลขต่างๆทีถูกสุ่มมา ให้ถูกต้อง

****
เริ่มต้นสร้าง captcha ให้ Django ของเรากัน
****
โดยวันนี้เราใช้ตัว 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 CaptchaFieldclass 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
