Cách ghi đè mẫu mặc định trong django-allauth

Các mẫu mặc định của django-allauth trông đơn sơ và có thể không phù hợp với nhu cầu của bạn. Sau đây là cách bạn có thể ghi đè chúng.

Lập trình Django

django-allauth là một package Django, cho phép bạn xây dựng hệ thống xác thực cho các ứng dụng nhanh chóng và dễ dàng. Nó có sẵn nhiều mẫu cho bạn tập trung vào các phần quan trọng của app.

Dù những mẫu sẵn có đã hữu ích nhưng bạn sẽ muốn thay đổi chúng khi không lựa chọn được UI tốt nhất.

Cách cài đặt và cấu hình django-allauth

Bằng cách làm theo một số bước đơn giản, bạn có thể cài đặt ngay django-allauth vào dự án Django.

1. Bạn có thể cài đặt package django-allauth bằng cách dùng trình quản lý package Pip:

pip install django-allauth

2. Trong file cài đặt của dự án, thêm những app này vào ứng dụng đã cài:

INSTALLED_APPS = [

    """
    Thêm ứng dụng khác vào đây
    """

    # Các app cấu hình Djang-allauth 
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount', # add this if you want to enable social authentication
]

3. Thêm backend xác thực vào file cài đặt:

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

4. Thêm ID trang cho dự án:

SITE_ID = 1

5. Cấu hình URL cho django-allauth:

from django.urls import path, include

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

Nếu cấu hình chính xác, bạn sẽ thấy một mẫu như này khi điều hướng tới http://127.0.0.1:8000/accounts/signup/:

Đăng ký Django

Bạn có thể thấy danh sách URL sẵn có bằng cách điều hướng tới http://127.0.0.1:8000/accounts/ với DEBUG=True trong file cài đặt:

Page Not Found

Cách ghi đè mẫu đăng nhập trong django-allauth

Đầu tiên, bạn cần cấu hình thư mục templates nếu chưa thực hiện. Mở file cài đặt và điều hướng tới danh sách TEMPLATES. Bên trong nó, xác định danh sách DIRS, và chỉnh sửa nó như sau:

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

Đảm bảo bạn có thư mục templates trong thư mục gốc của dự án. Bạn có thể ghi đè mẫu đăng nhập mặc định trong django-allauth bằng cách làm theo những bước dưới đây.

Bước 1: Tạo file mẫu

Trong thư mục templates, tạo thư mục mới tên account để chứa các mẫu liên quan tới django-allauth.

Mẫu đăng ký và đăng nhập sẽ lần lượt là signup.html login.html. Bạn có thể xác định tên mẫu chính xác bằng cách mở môi trường ảo Python và điều hướng tới thư mục Lib > site-packages > allauth > templates > account để tìm mẫu. Hãy xem xét code này để hiểu cách các mẫu hoạt động. Ví dụ, mẫu đăng nhập có code này bên trong nó:

Tạo file mẫu template

Bước 2: Thêm code HTML vào file template

Sau khi tạo file, bạn sẽ thêm code HTML tùy chỉnh cho template. Ví dụ, để ghi đè mẫu đăng nhập trên, có thể bạn muốn sao chép mọi thứ từ khối {% else %}, chứa biểu mẫu & nút gửi, và thêm nó vào mẫu tùy chỉnh. Ví dụ:

{% 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 %}

Code trên dùng kế thừa mẫu của Django để kế thừa các tính năng template base.html. Đảm bảo bạn loại bỏ các tag dư thừa như {% blocktrans %}. Nếu đã hoàn thành nó, trang đăng nhập sẽ như thế này:

Khách sạn Miramar SG

Bước 3: Thêm kiểu tùy chỉnh cho biểu mẫu

Ở bước trước đó, biểu mẫu đăng nhập được hiện dưới dạng đoạn bằng tag {{ form.as_p }}. Để thêm kiểu vào biểu mẫu, bạn cần biết giá trị của thuộc tính name kết hợp với từng trường input.

Bạn có thể kiểm tra trang để lấy giá trị bạn cần.

Thêm kiểu tùy chỉnh cho biểu mẫu

Ảnh trên hiện thuộc tính tên kết hợp với trường email của biểu mẫu.

Giờ, bạn có thể thêm từng trường biểu mẫu vào dự án. Ví dụ, bạn có thể thêm trường email như sau:

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

Bạn có thể dùng Bootstrap với dự án Django để dễ dàng tạo kiểu biểu mẫu. Đây là một ví dụ:

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

Code trên thêm class biểu mẫu Bootstrap vào biểu mẫu này. Giờ bạn có thể thêm các trường khác bạn cần và tạo kiểu cho chúng như ý muốn. Ví dụ bên dưới dùng Bootstrap để tạo kiểu:

<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>

Khối code trên sẽ cho kết quả tương tự như ảnh sau:

Biểu mẫu đăng nhập

django-allauth chứa nhiều mẫu mặc định mà bạn có thể ghi đè. Với hướng dẫn trên, bạn có thể ghi đè mẫu bất kỳ trong django-allauth. Bạn sẽ cân nhắc dùng package này để xử lý hệ thống xác thực, từ đó, bạn có thể tập trung vào việc xây dựng các tính năng quan trọng khác cho ứng dụng.

Thứ Tư, 04/10/2023 08:07
1,52 👨 150
0 Bình luận
Sắp xếp theo