How To Create Login Page In Python Using Django

Creating a login page in Python using Django can seem intimidating at first, but with the right guidance, it can actually be quite straightforward. In this article, I will walk you through the steps of creating a login page using Django, while sharing my personal experiences and insights along the way.

What is Django?

Before we dive into the process of creating a login page, let’s first understand what Django is. Django is a high-level Python web framework that allows developers to build web applications quickly and efficiently. It follows the Model-View-Controller (MVC) architectural pattern, which makes it easy to separate the different components of your application.

Setting up a Django Project

The first step in creating a login page with Django is to set up a Django project. To do this, open your terminal or command prompt, navigate to the directory where you want to create your project, and enter the following command:

django-admin startproject myproject

This command will create a new directory called “myproject” with the basic files and directories needed to run a Django project. Navigate to the project directory by running:

cd myproject

Creating a Django App

Next, we need to create a Django app within our project. An app in Django is a self-contained module that encapsulates a specific functionality of your web application. To create an app, run the following command:

python manage.py startapp myapp

This command will create a new directory called “myapp” inside your project directory, which will contain the necessary files for the app.

Defining the User Model

Before we can add a login page, we need to define the user model in Django. The user model is responsible for managing user authentication and authorization. Django provides a built-in user model, which we can extend to add additional fields if needed. To define the user model, open the “models.py” file inside your app directory and add the following code:

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    # Add custom fields here if needed
    pass

In this code, we are creating a custom user model called “CustomUser” that extends the built-in AbstractUser model provided by Django. You can add any additional fields you need inside the class definition.

Creating the Login View and Template

Now that we have the user model defined, we can create the login view and template. A view in Django handles HTTP requests and returns HTTP responses. To create the login view, open the “views.py” file inside your app directory and add the following code:

from django.shortcuts import render
from django.contrib.auth import authenticate, login

def login_view(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return render(request, 'myapp/dashboard.html')
        else:
            return render(request, 'myapp/login.html', {'error_message': 'Invalid username or password'})
    else:
        return render(request, 'myapp/login.html')

In this code, we define a function-based view called “login_view” that handles both the GET and POST requests. If the user submits the login form using the POST method, we authenticate the user using the “authenticate” function provided by Django. If the authentication is successful, we log the user in using the “login” function and redirect them to the dashboard page. If the authentication fails, we display an error message on the login page.

Next, we need to create the login template. Create a new directory called “templates” inside your app directory, and inside the “templates” directory, create a new file called “login.html”. Add the following code to the “login.html” file:

<h2>Login</h2>

{% if error_message %}
    <p class="error">{{ error_message }}</p>
{% endif %}

<form method="post" action="{% url 'login' %}">
    {% csrf_token %}
    <div>
        <label for="username">Username:</label>
        <input type="text" name="username" required>
    </div>
    <div>
        <label for="password">Password:</label>
        <input type="password" name="password" required>
    </div>
    <div>
        <input type="submit" value="Login">
    </div>
</form>

In this code, we have a simple login form that takes a username and password as input. The form sends a POST request to the “login_view” function we defined earlier. We also include a CSRF token to protect against Cross-Site Request Forgery attacks.

Testing the Login Page

Now that we have the login view and template set up, we can test our login page. Start the Django development server by running the following command:

python manage.py runserver

Open your web browser and navigate to “http://localhost:8000/login” (replace “localhost:8000” with the appropriate host and port if you’re running Django on a different server). You should see the login page, where you can enter your username and password. If the credentials are valid, you should be redirected to the dashboard page.

Conclusion

Creating a login page in Python using Django might seem complex, but by following the steps outlined in this article, you can create a secure and user-friendly login page for your web application. Remember to always prioritize security when handling user authentication, and make sure to test your login page thoroughly before deploying it to a production environment.