How to Implement CRUD and Authentication in Django

Django is a powerful Python web framework that simplifies the process of building robust web applications. In this tutorial, we will create a Django project with CRUD (Create, Read, Update, Delete) functionality and authentication features. Follow these steps to get started.
 

Step 1: Install Django

First, ensure you have Python installed on your system. Then, install Django using pip:

pip install django

Step 2: Create a Django Project

Create a new Django project by running the following command:

django-admin startproject myproject

Navigate to the project directory:

cd myproject

Step 3: Create a Django App

Create an app within the project to handle your functionality. For example, we’ll name it myapp:

python manage.py startapp myapp


Register the app in your project's settings.py file:

INSTALLED_APPS = [
    ...
    'myapp',
]


Step 4: Set Up Models

Define the models for your application in myapp/models.py. For this example, we’ll create a simple Post model:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title


Apply the migrations to create the database table:

python manage.py makemigrations
python manage.py migrate


Step 5: Create Views for CRUD Operations


In myapp/views.py, create the views for CRUD functionality:

from django.shortcuts import render, get_object_or_404, redirect
from .models import Post

# Create
def create_post(request):
    if request.method == 'POST':
        title = request.POST['title']
        content = request.POST['content']
        Post.objects.create(title=title, content=content)
        return redirect('post_list')
    return render(request, 'myapp/create_post.html')

# Read
def post_list(request):
    posts = Post.objects.all()
    return render(request, 'myapp/post_list.html', {'posts': posts})

# Update
def update_post(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == 'POST':
        post.title = request.POST['title']
        post.content = request.POST['content']
        post.save()
        return redirect('post_list')
    return render(request, 'myapp/update_post.html', {'post': post})

# Delete
def delete_post(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == 'POST':
        post.delete()
        return redirect('post_list')
    return render(request, 'myapp/delete_post.html', {'post': post})


Step 6: Configure URLs

In myapp/urls.py, define the URL patterns for the views:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('create/', views.create_post, name='create_post'),
    path('update/<int:pk>/', views.update_post, name='update_post'),
    path('delete/<int:pk>/', views.delete_post, name='delete_post'),
]

Include these URLs in your project's urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]


Step 7: Create Templates

Create templates for your views in myapp/templates/myapp/. For example:

post_list.html

<h1>Posts</h1>
<a href="/create/">Create New Post</a>
<ul>
    {% for post in posts %}
        <li>{{ post.title }} - <a href="/update/{{ post.id }}/">Edit</a> | <a href="/delete/{{ post.id }}/">Delete</a></li>
    {% endfor %}
</ul>


create_post.html

<h1>Create Post</h1>
<form method="post">
    {% csrf_token %}
    <label for="title">Title:</label>
    <input type="text" name="title" id="title" required><br>

    <label for="content">Content:</label>
    <textarea name="content" id="content" required></textarea><br>

    <button type="submit">Create</button>
</form>


Repeat this process for update_post.html and delete_post.html as needed.

Step 8: Add Authentication


Django provides built-in authentication features. Use Django's User model and auth views.

Update your settings.py to specify a login URL:

LOGIN_URL = 'login'

Update Views for Authentication

Use @login_required to restrict access to certain views:

from django.contrib.auth.decorators import login_required

@login_required
def create_post(request):
    # Your code here


Add Authentication URLs

Include authentication URLs in your urls.py:

from django.contrib.auth import views as auth_views

urlpatterns += [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]


Create Login Template

Create a registration/login.html template:

<h1>Login</h1>
<form method="post">
    {% csrf_token %}
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" required><br>

    <label for="password">Password:</label>
    <input type="password" name="password" id="password" required><br>

    <button type="submit">Login</button>
</form>


Step 9: Run the Application

Run the Django development server:

python manage.py runserver

Visit http://127.0.0.1:8000 in your browser to test your application.


You now have a Django project with CRUD functionality and authentication. From here, you can expand your application with additional features like pagination, user registration, and more.  Hope this is helpful, and I apologize if there are any inaccuracies in the information provided.

Post a Comment for "How to Implement CRUD and Authentication in Django"