Contents

วิธีแทนที่เทมเพลตเริ่มต้นใน django-allauth

django-allauth เป็นแพ็คเกจ Django ที่ช่วยให้คุณสร้างระบบการตรวจสอบสิทธิ์สำหรับแอป Django ของคุณได้อย่างรวดเร็วและง่ายดาย มีเทมเพลตในตัวเพื่อให้คุณมุ่งเน้นไปที่ส่วนสำคัญอื่นๆ ของแอปได้

แม้ว่าเทมเพลตเริ่มต้นที่ให้ไว้อาจมีประโยชน์ แต่บ่อยครั้งจำเป็นต้องแก้ไขเนื่องจากอินเทอร์เฟซผู้ใช้ (UI) อาจไม่สอดคล้องกับการตั้งค่าหรือข้อกำหนดของตน

วิธีติดตั้งและกำหนดค่า django-allauth

การรวม django-allauth เข้ากับโปรเจ็กต์ Django จำเป็นต้องปฏิบัติตามชุดแนวทางง่ายๆ เพื่อให้แน่ใจว่ากระบวนการติดตั้งจะราบรื่นและไม่สะดุด

⭐ คุณสามารถติดตั้งแพ็คเกจ django-allauth ได้โดยใช้ตัวจัดการแพ็คเกจ Pip:

 pip install django-allauth

⭐ ในไฟล์การตั้งค่าของโปรเจ็กต์ของคุณ ให้เพิ่มแอปเหล่านี้ไปยังแอปที่ติดตั้งของคุณ:

 INSTALLED_APPS = [

    """
    Add your other apps here
    """

    # Djang-allauth configuration apps
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount', # add this if you want to enable social authentication
]

⭐ เพิ่มแบ็กเอนด์การรับรองความถูกต้องให้กับไฟล์การตั้งค่าของคุณ:

 AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

⭐ เพิ่มรหัสไซต์ในโครงการของคุณ:

 SITE_ID = 1

⭐ กำหนดค่า URL สำหรับ django-allauth:

 from django.urls import path, include

urlpatterns = [
    # Djang-allauth url pattern
    path('accounts/', include('allauth.urls')),
]

หากการกำหนดค่าของคุณดำเนินการอย่างถูกต้อง ไปที่ http://127.0.0.1:8000/accounts/signup/ ควรแสดงเทมเพลตที่มีลักษณะดังต่อไปนี้:

/th/images/django-allauth-signup-page.jpg

หากต้องการเข้าถึงรายการ URL ที่สามารถเข้าถึงได้ ให้ไปที่ “ http://127.0.0.1:8000/accounts/ ” ภายในการตั้งค่า “DEBUG=True” ในของคุณ ไฟล์การกำหนดค่า

/th/images/url-patterns-available-in-django-allauth.jpg

วิธีแทนที่เทมเพลตการเข้าสู่ระบบใน django-allauth

เพื่อที่จะใช้ระบบเทมเพลตของเรา ก่อนอื่นต้องตรวจสอบให้แน่ใจว่าไดเร็กทอรี"เทมเพลต"ได้รับการกำหนดค่าอย่างเหมาะสมแล้ว โดยเข้าไปที่ไฟล์การกำหนดค่าของแอปพลิเคชันของคุณ และไปที่ส่วน “เทมเพลต” ภายในส่วนนี้ ให้ค้นหารายการย่อย “DIRS” และปรับเปลี่ยนตามที่แสดงด้านล่าง:

 'DIRS': [BASE_DIR/'templates'],

เพื่ออำนวยความสะดวกในการรวม Django-Allauth จำเป็นอย่างยิ่งที่จะต้องสร้างโฟลเดอร์ “เทมเพลต” ที่อยู่ในไดเร็กทอรีหลักของโปรเจ็กต์ของคุณ อาจเลือกที่จะแก้ไขเทมเพลตการเข้าสู่ระบบมาตรฐานที่ Django-Allauth มอบให้โดยปฏิบัติตามชุดคำสั่งที่ตามมา

ขั้นตอนที่ 1: สร้างไฟล์เทมเพลตของคุณ

เพื่อจัดระเบียบและจัดการเทมเพลตที่เกี่ยวข้องกับ Django Allauth ภายในโปรเจ็กต์ของคุณอย่างเหมาะสม ขอแนะนำให้คุณสร้างโฟลเดอร์ที่กำหนดชื่อ “บัญชี” ภายในไดเร็กทอรี “เทมเพลต” ที่มีอยู่ของคุณ ซึ่งจะช่วยให้องค์กรมีประสิทธิภาพและเพิ่มความคล่องตัวในการเข้าถึงเทมเพลตเฉพาะเหล่านี้เมื่อจำเป็น

เพื่อระบุเทมเพลตการลงทะเบียนและการเข้าสู่ระบบสำหรับ Allauth อย่างถูกต้อง เราจะต้องไปที่ไดเร็กทอรี"Lib"ภายในสภาพแวดล้อมเสมือน Python และไปที่โฟลเดอร์"site-packages"จากนั้นไปที่โฟลเดอร์ “allauth” และค้นหาโฟลเดอร์ย่อย “templates” เมื่อตรวจสอบเนื้อหาของโฟลเดอร์ย่อยนี้ โดยเฉพาะโฟลเดอร์"บัญชี"คุณจะค้นพบชื่อเทมเพลตที่เหมาะสมสำหรับหน้าการลงทะเบียนและการเข้าสู่ระบบซึ่งก็คือ"signup.html"และ"login.html"ตามลำดับ เพื่อให้เข้าใจอย่างลึกซึ้งยิ่งขึ้นว่าเทมเพลตเหล่านี้ทำงานอย่างไร อาจจำเป็นต้องตรวจสอบโค้ดที่เกี่ยวข้อง

/th/images/django-allauth-default-login-code-block.jpg

ขั้นตอนที่ 2: เพิ่มโค้ด HTML ลงในไฟล์เทมเพลตของคุณ

หลังจากสร้างไฟล์ของคุณแล้ว จำเป็นต้องรวมโค้ด HTML ที่ปรับแต่งมาภายในเทมเพลตของคุณ ตามภาพประกอบ เพื่อแก้ไขเทมเพลตการเข้าสู่ระบบเริ่มต้น เราอาจเลือกที่จะจำลองเนื้อหาทั้งหมดที่อยู่ในบล็อก {% else %} ซึ่งรวมถึงแบบฟอร์มและปุ่มส่ง และรวมเข้ากับเทมเพลตที่กำหนดเอง การใช้งานตัวอย่างอาจปรากฏดังนี้:

 {% extends 'base.html' %}
{% block content %}
<p>If you have not created an account yet, then please
    <a href="{{ signup_url }}">sign up</a> first.</p>
    
    <form class="login" method="POST" action="{% url 'account_login' %}">
      {% csrf_token %}
      {{ form.as_p }}
      {% if redirect_field_value %}
      <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
      {% endif %}
      <a class="button secondaryAction" href="{% url 'account_reset_password' %}">Forgot password?</a>
      <button class="primaryAction" type="submit">SIgn in</button>
    </form>
    {% endblock content %}

Django ใช้เทคนิคที่เรียกว่าการสืบทอดเทมเพลตภายในเฟรมเวิร์กที่ช่วยให้ปรับแต่งเทมเพลตได้โดยการสืบทอดคุณลักษณะและคุณลักษณะจากเทมเพลตพื้นฐานที่มีอยู่แล้ว ในกรณีเฉพาะนี้ โค้ดจะใช้ฟีเจอร์ในตัวของ Django สำหรับการสืบทอดเทมเพลตเพื่อรวมองค์ประกอบเค้าโครงและสไตล์ที่พบในไฟล์ “base.html” ลงในหน้าเข้าสู่ระบบ เพื่อให้แน่ใจว่ามีฟังก์ชันการทำงานที่เหมาะสมที่สุด ขอแนะนำให้กำจัดส่วนประกอบ HTML ที่ไม่ต้องการหรือซ้ำซ้อน รวมถึงแท็ก “ {% blocktrans %}"” ด้วยการทำเช่นนี้ หน้าเข้าสู่ระบบที่ได้จะมีลักษณะใกล้เคียงกับโครงสร้างตัวอย่างที่ให้ไว้

/th/images/custom-login-page-without-custom-form.jpg

กราฟิกดังกล่าวมีส่วนหัวและส่วนท้ายที่แตกต่างจากที่ปรากฎในที่นี้

ขั้นตอนที่ 3: เพิ่มสไตล์ที่กำหนดเองให้กับแบบฟอร์มของคุณ

เพื่อที่จะเติมแต่งแบบฟอร์มการเข้าสู่ระบบของเราด้วยความสวยงามและรูปลักษณ์ที่น่าดึงดูด จำเป็นต้องเข้าใจความสำคัญของการระบุชื่อเฉพาะให้กับช่องป้อนข้อมูลแต่ละช่องภายในแบบฟอร์มดังกล่าว ด้วยการใช้แท็ก {{ form.as_p }} เราอาจแสดงแบบฟอร์มการเข้าสู่ระบบของเราเป็นการเล่าเรื่องที่สอดคล้องกันเพื่อการโต้ตอบของผู้ใช้ที่ราบรื่น อย่างไรก็ตาม เพื่อที่จะปรับปรุงรูปลักษณ์ของแบบฟอร์มนี้และให้ความรู้สึกถึงการปรับแต่ง จำเป็นอย่างยิ่งที่เราต้องรับรู้ถึงตัวระบุที่ไม่ซ้ำกันที่กำหนดให้กับแต่ละองค์ประกอบภายในแบบฟอร์ม

เพื่อให้ได้ข้อมูลที่จำเป็น ขอแนะนำให้ตรวจสอบหน้าเว็บของตน

/th/images/inspect-page.jpg

กราฟิกแสดงป้ายกำกับที่มาจากช่องป้อนข้อมูลภายในแบบฟอร์ม ซึ่งสอดคล้องกับรายการที่อยู่อีเมล

อันที่จริงอาจมีการรวมฟิลด์แบบฟอร์มแต่ละรายการไว้ภายในโครงการเฉพาะของพวกเขา ตามตัวอย่าง การรวมฟิลด์อีเมลสามารถทำได้ดังนี้:

 {{ form.login }}
<label for="{{form.login.id_for_label}}">Email</label>
{{ form.login.errors|safe }}

เราสามารถใช้ Bootstrap ร่วมกับโปรเจ็กต์ Django เพื่อตกแต่งรูปร่างให้สวยงามได้อย่างง่ายดาย พิจารณาภาพประกอบต่อไปนี้เป็นจุดอ้างอิง:

 <div class="form-floating form-group">
 {{ form.login }}
 <label for="{{form.login.id_for_label}}">Email</label>
 {{ form.login.errors|safe }}
</div>

รหัสที่ให้มาจะใช้การจัดรูปแบบ Bootstrap กับแบบฟอร์มที่กำหนด ซึ่งช่วยให้สามารถเพิ่มฟิลด์เพิ่มเติมรวมถึงการตั้งค่าการออกแบบส่วนบุคคลได้ สำหรับผู้ที่ไม่ต้องการใช้ Bootstrap ในสไตล์ อาจพิจารณาตัวเลือกอื่นที่เรียกว่า"django-crispy-forms"แทน ดังที่แสดงให้เห็นในตัวอย่างที่ตามมา Bootstrap ถูกใช้เพื่อจุดประสงค์ในการสร้างแบบฟอร์ม

 <div class="container d-flex justify-content-center align-items-center vh-100">
    <form method="post" class="login" id="signup_form" action="{% url 'account_login' %}">
        <div class="text-center mb-4">
            <h1 class="h3 mb-3 font-weight-normal">Sign in</h1>
        </div>
        {{ form.non_field_errors | safe }}
        {% csrf_token %}
        <div class="row g-3">
            <div class="col-12">
                <div class="form-floating form-group">
                    {{ form.login }}
                    <label for="{{form.login.id_for_label}}">Email</label>
                    {{ form.login.errors|safe }}
                </div>
            </div>
            <div class="col-12">
                <div class="form-floating form-group my-3">
                    {{ form.password }}
                    <label for="{{form.password.id_for_label}}">Password</label>
                    {{ form.password.errors|safe }}
                </div>
            </div>
            <div class="col-12">
                <div class="form-check">
                    <label for="{{form.remember.id_for_label}}" class="form-check-label">Remember me</label>
                    {{ form.remember }}
                </div>
            </div>
            <div class="col-6">
                {% if redirect_field_value %}
                <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
                {% endif %}
                <button class="btn btn-primary w-100 py-3 bg-accent" type="submit">Sign in</button>
                <a class="button secondaryAction text-accent" href="{% url 'account_reset_password' %}">Forgot
                    Password?</a>
            </div>
        </div>
    </form>
</div>

ส่วนรหัสดังกล่าวคาดว่าจะสร้างผลลัพธ์ที่คล้ายกับภาพประกอบด้านล่าง:

/th/images/customized-login-page.jpg

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับแบบฟอร์มใน django-allauth ได้โดยอ่าน เอกสารอย่างเป็นทางการ

แทนที่เทมเพลตใด ๆ ใน django-allauth

Django Allauth มีเทมเพลตมาตรฐานมากมายที่สามารถปรับแต่งตามความต้องการส่วนบุคคล ขั้นตอนที่ระบุไว้ในแหล่งข้อมูลนี้มีความยืดหยุ่นในการปรับเปลี่ยนเทมเพลตใดเทมเพลตหนึ่งเหล่านี้ ขอแนะนำเป็นอย่างยิ่งให้ใช้ Django Allauth เป็นโซลูชันแบบรวมทุกอย่างสำหรับการจัดการการรับรองความถูกต้องของผู้ใช้ ดังนั้นนักพัฒนาจึงสามารถมุ่งความสนใจไปที่การสร้างและเพิ่มประสิทธิภาพด้านที่สำคัญเพิ่มเติมของแอปพลิเคชันซอฟต์แวร์ของตนโดยเฉพาะ