1 - Create a new django project with an app named accounts
To start we proceed by:
- creating of a new project named mysite
- migration and creation of a super user account
- creating of a new app called accounts
Next, let's register our accounts application at the settings.py file:
INSTALLED_APPS = [
'accounts.apps.AccountsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Our site will therefore have the following structure:
Next, let's configure the template:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates']
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Next, let's create the template files by creating:
1- the template home page file "template/index.html"
2- the'registration' directory within the template directory
3- the files:
- 3.a template/registration/login.html
- 3.b template/registration/logout.html
- 3.c template/registration/signup.html
As shown in the following figure:
2 - Creation of a system login & logout
2.1 - Using the auth app
When creating a new project, django automatically creates an application named
, as you can see from the
file:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts.apps.AccountsConfig',
]
To use the
app we must to add it to our project level file
:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
]
The
app that installs automatically with a new django project has multiple
and urls for managing
,
, and
management. The URLs provided by auth are:
accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']
2.2 - Login and logout page
Now we create the "template/registration/login.html" file which will be used by the
module to
a user:
<!-- templates/registration/login.html -->
# we test if the user is authenticated
{% if user.is_authenticated %}
You are connected as <strong> {{ user.username }}!</strong>
<a href="/accounts/logout" >Logout !</a>
# if user is not authenticated, we display the authentication form:
{% else %}
<h3>Log In</h3>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Log In</button>
</form>
{% endif %}
Now if we type in the browser, the url address: http://127.0.0.1:8000/accounts/login/ we obtain the user athenication form:
And if we type the url address http://127.0.0.1:8000/accounts/logout/ we obtain this message indicating that the user is logged out:
2.3 - Settings up home page
We can now configure the home page so that it displays a welcome message to the user when he is connected and otherwise a message indicating that he is not connected followed by a link to the login page. Let's start with the configuration of the template file:
<!-- templates/index.html -->
<h2>Home Page !</h2>
{% if user.is_authenticated %}
Hi {{ user.username }}!
<p><a href="{% url 'logout' %}">Log Out</a></p>
{% else %}
<p>You are not logged in</p>
<a href="{% url 'login' %}">Log In</a>
{% endif %}
In order to display the home page we will create a link to it using the TemplateView class:
# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/' , include('django.contrib.auth.urls')),
path('', TemplateView.as_view(template_name='index.html'), name='home'),
]
And finally redirects to the home page after login or logout:
LOGOUT_REDIRECT_URL = '/'
LOGIN_REDIRECT_URL = '/'
Now if we type the url address : http://127.0.0.1:8000/ we obtain:
And after connection:
3 - User registration form
3.1 - Creation of the registration form via the UserCreationForm class
Let's now create the
file which will generate the user
and insert within it the following code:
# accounts/forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
3.2 - Creation the view of accounts applications
We then create the view of application which has a method for the user registration form
# accounts/views.py
from django.shortcuts import render, redirect
from .forms import UserRegisterForm
# Users registration page
def signup(request):
# on teste s'il y a des requetes envoyee par la methode POST
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
return redirect('/')
else:
form = UserRegisterForm()
return render(request, 'registration/signup.html', {'form': form})
Then update the url system
# mysite/urls
from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
from accounts import views
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/' , include('django.contrib.auth.urls')),
path('', TemplateView.as_view(template_name='index.html'), name='home'),
path('signup/' , views.signup , name ='signup'),
]
And finally we build the template file:
<!-- templates/registration/signup.html -->
<h2>Registration form</h2>
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
{{ form.as_p }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Register</button>
</div>
</form>
Now if we type in the browser the url address: http://127.0.0.1:8000/signup/ we obtain the registration form:
my-courses.net