Os modelos padrão do django-allauth parecem contundentes e podem não atender às suas necessidades. Veja como você pode substituí-los.
django-allauth é um pacote Django que permite construir um sistema de autenticação para seus aplicativos Django de forma rápida e fácil. Possui modelos integrados para permitir que você se concentre em outras partes importantes do seu aplicativo.
Embora os modelos integrados sejam úteis, você desejará alterá-los porque eles não têm a melhor IU.
Como instalar e configurar Django-allauth
Seguindo alguns passos simples, você pode instalar facilmente o django-allauth em seu projeto Django.
- Você pode instalar Django-allauth pacote usando o gerenciador de pacotes Pip:
pip install django-allauth
- No arquivo de configurações do seu projeto, adicione estes aplicativos aos aplicativos instalados:
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
] - Adicione back-ends de autenticação ao seu arquivo de configurações:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
] - Adicione um ID de site ao seu projeto:
SITE_ID = 1
- Configure as URLs para Django-allauth:
from django.urls import path, include
urlpatterns = [
# Djang-allauth url pattern
path('accounts/', include('allauth.urls')),
]
Se você fizer as configurações acima corretamente, deverá ver um modelo como este ao navegar para http://127.0.0.1:8000/accounts/signup/:
Você pode ver a lista de URLs disponíveis navegando até http://127.0.0.1:8000/accounts/ com DEBUG = Verdadeiro no seu arquivo de configurações.
Como substituir o modelo de login em Django-allauth
Primeiro você precisa configurar seu modelos pasta, caso ainda não tenha feito isso. Abra seu arquivo de configurações e navegue até o MODELOS lista. Dentro dele, localize o DIRS list e modifique-o assim:
'DIRS': [BASE_DIR/'templates'],
Certifique-se de ter um modelos pasta no diretório raiz do seu projeto. Você pode substituir o modelo de login padrão em Django-allauth seguindo estes próximos passos.
Etapa 1: crie seus arquivos de modelo
Na tua modelos pasta, crie uma nova pasta chamada conta para armazenar os templates relacionados ao Django-allauth.
Os modelos de registro e login devem ser inscrição.html e login.html respectivamente. Você pode determinar o nome correto do modelo abrindo seu Ambiente virtual Python e navegando para Lib > pacotes de sites > allauth > modelos > conta pasta para encontrar os modelos. Você deve percorrer o código para entender como os modelos funcionam. Por exemplo, o modelo de login contém este código:
Etapa 2: adicione código HTML aos seus arquivos de modelo
Depois de criar seus arquivos, você deve adicionar o código HTML personalizado ao seu modelo. Por exemplo, para substituir o modelo de login acima, você pode querer copiar tudo do {% outro %} bloco, que contém o formulário e o botão de envio, e adicione-o ao seu modelo personalizado. Aqui está um exemplo:
{% extends 'base.html' %}
{% block content %}
<p>If you have not created an account yet, then please
<ahref="{{ signup_url }}">sign upa> first.p>
<formclass="login"method="POST"action="{% url 'account_login' %}">
{% csrf_token %}
{{ form.as_p }}
{% if redirect_field_value %}
<inputtype="hidden"name="{{ redirect_field_name }}"value="{{ redirect_field_value }}" />
{% endif %}
<aclass="button secondaryAction"href="{% url 'account_reset_password' %}">Forgot password?a>
<buttonclass="primaryAction"type="submit">SIgn inbutton>
form>
{% endblock content %}
O código acima usa Herança de templates do Django herdar características do base.html modelo. Certifique-se de remover tags desnecessárias, como {% blocktrans%} marcação. Se você fez isso, sua página de login deverá ser semelhante a esta:
O cabeçalho e rodapé da imagem acima serão diferentes dos seus.
Etapa 3: adicione estilos personalizados ao seu formulário
Na etapa anterior, o formulário de login é renderizado como um parágrafo usando o {{form.as_p}} marcação. Para adicionar estilos ao seu formulário, você precisa saber o valor do nome atributo associado a cada campo de entrada.
Você pode inspecionar sua página para obter os valores necessários.
A imagem acima mostra o atributo name associado ao e-mail campo do formulário.
Agora você pode adicionar os campos do formulário individualmente em seu projeto. Por exemplo, você pode adicionar o campo de e-mail assim:
{{ form.login }}
<labelfor="{{form.login.id_for_label}}">Emaillabel>
{{ form.login.errors|safe }}
Você pode use Bootstrap com seu projeto Django para estilizar facilmente seu formulário. Aqui está um exemplo:
<divclass="form-floating form-group">
{{ form.login }}
<labelfor="{{form.login.id_for_label}}">Emaillabel>
{{ form.login.errors|safe }}
div>
O código acima adiciona classes de formulário Bootstrap ao formulário. Agora, você pode adicionar os outros campos necessários e estilizá-los de acordo com sua preferência. Se você não gosta de usar o Bootstrap para estilizar, django-crispy-forms é uma alternativa para estilizar seus formulários. O exemplo abaixo usa Bootstrap para estilização.
<divclass="container d-flex justify-content-center align-items-center vh-100">
<formmethod="post"class="login"id="signup_form"action="{% url 'account_login' %}">
<divclass="text-center mb-4">
<h1class="h3 mb-3 font-weight-normal">Sign inh1>
div>
{{ form.non_field_errors | safe }}
{% csrf_token %}
<divclass="row g-3">
<divclass="col-12">
<divclass="form-floating form-group">
{{ form.login }}
<labelfor="{{form.login.id_for_label}}">Emaillabel>
{{ form.login.errors|safe }}
div>
div>
<divclass="col-12">
<divclass="form-floating form-group my-3">
{{ form.password }}
<labelfor="{{form.password.id_for_label}}">Passwordlabel>
{{ form.password.errors|safe }}
div>
div>
<divclass="col-12">
<divclass="form-check">
<labelfor="{{form.remember.id_for_label}}"class="form-check-label">Remember melabel>
{{ form.remember }}
div>
div>
<divclass="col-6">
{% if redirect_field_value %}
<inputtype="hidden"name="{{ redirect_field_name }}"value="{{ redirect_field_value }}" />
{% endif %}
<buttonclass="btn btn-primary w-100 py-3 bg-accent"type="submit">Sign inbutton>
<aclass="button secondaryAction text-accent"href="{% url 'account_reset_password' %}">Forgot
Password?a>
div>
div>
form>
div>
O bloco de código acima produzirá uma saída semelhante à imagem a seguir:
Você pode aprender mais sobre formulários no Django-allauth lendo o documentação oficial.
Substituir qualquer modelo em Django-allauth
django-allauth contém muitos modelos padrão que você pode substituir. Com as etapas deste guia, você pode substituir qualquer modelo no django-allauth. Você deve considerar usar este pacote para lidar com seu sistema de autenticação, para que possa se concentrar na construção de outros recursos importantes de seu aplicativo.