สอนใช้ LoginView ใน Django 1.11+

February 14th, 2017
สอนใช้ LoginView ใน Django 1.11+

เนื่องจากตอนนี้ Django เวอร์ชั่น 1.11 ขึ้นไป มีการใช้ class LoginView ซึ่งทำให้เราทำ Login ได้ง่ายมาก เลยอยากแชร์เก็บไว้เผื่อโปรเจคอื่นๆ อยากจะเอาไปใช้บ้างอ้างอิงจาก document นี้ แล้วก็บทความนี้ใช้เวอร์ชั่น 1.11a กับ Python 3.6 นะคะ

Requirement:

ต้องการหน้า login ที่มีช่องให้ใส่ username, password และกดปุ่ม login แบบกากๆ ไม่มีความสวยงามใดๆ ยังไม่ต้องการ CSS ขอให้ใช้งานได้อย่างถูกต้องก็พอ

Implementation:

  1. ทำตัว template ซึ่งถ้าอยากใช้ฉบับ basic ก่อน ก็สามารถ copy จากลิงค์ด้านบนได้เลย ตรงที่บอกว่า เป็น Sample ของ registration/login.html โดยสมมติว่าเรามี base.html อยู่แล้ว และ login ของเราก็ extend จาก base.html นี้ เราจะเอา login.html ไว้ตรงไหนก็เรื่องของเรา แค่ใส่ใน urls ให้ถูกก็พอ ถ้าเป็นตัวอย่างนี้ จะเอาใส่ไว้ใน templates/login.html เลย
  2. ใน settings.py เพิ่มสิ่งนี้เข้าไป
    LOGIN_URL = '/login/'
    LOGIN_REDIRECT_URL = '/'

    จะทำให้มันไปหน้า login ตาม url /login/ และเวลา login เสร็จแล้ว ก็จะ redirect ไป / ถ้าเราอยากเปลี่ยนเป็นอย่างอื่น ก็เปลี่ยนได้ แต่ถ้าไม่ตั้งค่านี้ไว้ มันจะใช้ตาม default คือ หน้า login จะไปยัง accounts/login/ และ redirect ไปยัง accounts/profile/

  3. ใน urls.py ให้ใส่ url สำหรับ login/logout ไว้ดังนี้ (อันนี้แบบ logout แล้วให้กลับมาหน้า login)
    from django.conf.urls import include, url
    from django.contrib.auth import views as auth_views
    
    urlpatterns = [
        url(r'^login/$', auth_views.LoginView.as_view(
            template_name='login.html'), name='login'),
        url(r'^logout/$', auth_views.LogoutView.as_view(
            template_name='login.html'), name='logout'),
    ]
  4. อยากให้ view ไหน ต้อง login ก่อนใช้งาน ก็จัด decorator login_required ครอบ url เลย เช่น
    from django.contrib.auth.decorators import login_required
    
    ...
    url(r'^$', login_required(BoardView.as_view()), name='boards'),
    ...
    
  5. เวลาใส่ลิงค์ใน template ก็ใส่แบบนี้ได้เลย
    a href="{% url 'login' %}"
    a href="{% url 'logout' %}"

ห้ะ! เสร็จละเหรอ แค่เนี้ยยยยะ อีกนิดจะเป็นง่อยละ 55555555+ จะเห็นว่า ไม่ต้องทำไรใน views.py ละ เค้าจัด get กับ post มาให้เสร็จแล้ว ใช้อย่างเดียว ประมาณว่าการ login ก็ทำแบบนี้ทั้งโลกแหละ แต่ถ้าใครจะทำอะไรที่ advance กว่านี้ ก็ไปทำเอาเองนะ


Natty

Natty

Agile Coach / Research & Development Manager

Agile Coach ที่มีประสบการณ์ Coach ทีมมามากกว่า 5 ปี เติบโตมาจากการเป็น Software Engineer และรักในการสร้างทีม มีความถนัดในการสร้างทีมแบบ Scrum เป็น Certified Scrum Master, Certified Scrum Developer, Certified Scrum Product Owner, Certified Scrum Professional. ปัจจุบันเริ่มเข้าสู่การ Agile Transformation ให้กับองค์กร โดยให้คำปรึกษาและ facilitate ทีมอื่นๆ ที่ไม่ใช่ Development team และเป็น External trainer ให้กับบริษัทต่างๆ ที่สนใจการทำงานแบบ Agile/Scrum หรือตามมหาลัยที่สนใจให้ไปสอนเด็กๆ แต่ยังเน้นความเป็น Tecnnical Coach ในส่วนงานด้าน community เป็น Founder ของ Girls Who Dev คอมมูนิตี้ของสาวๆ เขียนโปรแกรม และเป็น Founder ของ Girls Who Coach คอมมูนิตี้ของสาวๆ ที่รักการ Coach และเป็นคุณแม่ลูกหนึ่ง ที่ใช้ความรู้ในการ coach ไปสอนลูกที่บ้านด้วย :))