สร้าง Captcha แบบง่ายสุด ๆ ให้กับ Django

สร้าง captcha ง่ายๆใน Django ด้วย django-simple-captcha

สร้าง Captcha แบบง่ายสุด ๆ ให้กับ Django

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

| Like | Comment | Share | >> STACKPYTHON

แนะนำ 📒Python WebDevelopment with Django (Course)