DEV Community

Madhuban Khatri
Madhuban Khatri

Posted on • Updated on

Blog Website using Django

Hello Everyone,
This is MADHUBAN KHATRI, a self-taught programmer. In this post, I am creating a Blog Website using Pyton Framework - Django.
You need to create Django Project and an App. After this you have to install app in the settings.py INSTALLED APPS.

And follow these steps:-

models.py

In this file, u have to create 4 models

  • Contact
  • Post
  • Category
  • Comment
from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Contact(models.Model):
    name = models.CharField(max_length=100, default='None')
    email = models.EmailField(max_length=100, default='abc@gmail.com')
    sub = models.CharField(max_length=100, default='None')
    msg = models.TextField(default='None')

    def __str__(self):
        return self.name


class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    post_img = models.ImageField(upload_to='pictures')
    category_name =  models.CharField(max_length=50, default="None")


    def __str__(self):
        return self.title


class Category(models.Model):
    post_name = models.ManyToManyField(Post)
    cat_name = models.CharField(max_length=50)

    def __str__(self):
        return self.cat_name

class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    comment = models.TextField()

    def __str__(self):
        return self.comment
Enter fullscreen mode Exit fullscreen mode

admin.py

Register your models here.

from django.contrib import admin
from .models import Contact, Post, Category, Comment

# Register your models here.
admin.site.register(Contact)
admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Comment)

Enter fullscreen mode Exit fullscreen mode

app1-urls.py

This is app1-urls.py and here you have to create URL for your website.

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('post/<int:post_id>', views.post, name='post'),
    path('create_account/', views.create_account, name='create_account'),
    path('contact/', views.contact, name='contact'),
    path('contact/save', views.save_contact, name='save_contact'),
    path('create_post/', views.create_post, name='create_post'),
    path('save_post/', views.save_post, name='save_post'),
    path('search/',  views.search_query, name='search'),
    path('<str:post_title>/create_comment',  views.add_comment, name='add_comment'),


]
Enter fullscreen mode Exit fullscreen mode

views.py

In this file, u can create Logics for Blog website.

from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect
from .models import Contact, Post, Category, Comment
from django.core.paginator import Paginator
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required

# Create your views here.
@login_required
def home(request):
    all_post = Post.objects.all().order_by('-id')
    paginator = Paginator(all_post,2, orphans=1)
    page_number = request.GET.get('page')
    page_obj = paginator.get_page(page_number)

    param = {'page_obj': page_obj, 'paginator': paginator, 'page_num': page_number}
    return render(request,"index.html", param)



def post(request, post_id):
    post_view = Post.objects.get(id=post_id)
    post_comments = post_view.comment_set.all().order_by('-id')
    rel_posts = Post.objects.filter(category_name=post_view.category_name).order_by('-id')
    post_cat =  Category.objects.filter(post_name=post_view)
    all_category = Category.objects.all()

    param = {'post_comments': post_comments, 'rel_post':rel_posts,'post_data':post_view, 'categorys': all_category,'post_cat':post_cat}
    return render(request,"post.html", param)


def signup(request):
    return render(request,"signup.html")

def create_account(request):
    if request.method == 'POST':
        firstName = request.POST['firstName']
        lastName = request.POST['lastName']
        mail = request.POST['mail']
        userName = request.POST['userName']
        pwd = request.POST['pwd']

        if firstName!="" or lastName!="" or mail!="" or userName!="" or pwd!="":
            create_user = User(username=userName,first_name=firstName,last_name=lastName,email=mail)
            create_user.set_password(pwd)
            create_user.save()
            return redirect('login')
        else:
            return HttpResponse("<script>alert('Please Fill the details carefully.')</script>")


def login(request):
    return render(request,"login.html")

def logged_in(request):
    if request.method == 'POST':
        uname = request.POST['uname']
        pwd = request.POST['pwd']
        # authenticate(username='john', password='secret')
        user = authenticate(username=uname, password=pwd)
        login(request,user)
        if user is not None:
            return redirect('home')
        else:
            return redirect('login')
    else:
        return HttpResponse("404 - Not found.")




def contact(request):
    return render(request,"contact.html")



def save_contact(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        mail = request.POST.get('email')
        subject = request.POST.get('subject')
        message = request.POST.get('message')

        save_contact = Contact(name = name, email = mail, sub = subject, msg = message)
        save_contact.save()
        return redirect('contact')


def create_post(request):
    some_categories = ['Django Tutorial', 'Python Tutorial', 'Tip and Tricks', 'SEO', 'Travel',
                       'Event', 'Fashion', 'Lifestyle', 'Sports' ,'Blogs', 'Photography', 'Others']
    return render(request, 'create_post.html', {'categories': some_categories})

def save_post(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        content = request.POST.get('content')
        postImg = request.FILES['image']
        category = request.POST.get('category')

        save_post = Post(title = title, content = content, category_name = category, post_img = postImg)
        save_post.save()
        create_cat = Category(cat_name=category)
        if not Category.objects.filter(cat_name=category).exists():
            create_cat.save()
            create_cat.post_name.add(save_post)
        else:
            get_cat = Category.objects.get(cat_name=category)
            get_cat.post_name.add(save_post)
            return redirect("home")

    return redirect("home")



def search_query(request):
    if request.method == 'GET':
        search_term = request.GET.get('query')
        if search_term==None:
            return render(request, 'search_page.html')
        else:
            search_post_title = Post.objects.filter(title__icontains=search_term)
            search_post_content = Post.objects.filter(content__icontains=search_term)
            search_post_category = Post.objects.filter(category_name__icontains=search_term)
            search_post = search_post_title.union(search_post_content, search_post_category)

        param = {'search_post': search_post.order_by('-id')}

    return render(request, 'search_page.html', param)



#Create Comments
def add_comment(request, post_title):
    name = request.POST.get('name')
    comment = request.POST.get('comment')
    post = Post.objects.get(title=post_title)
    if name!="" and comment!="":
        create_comment = Comment(post=post, name=name, comment=comment)
        create_comment.save()
        return redirect(f'/post/{post.id}')



Enter fullscreen mode Exit fullscreen mode

Top comments (5)

Collapse
 
sj891 profile image
sj891

Where is the .html file of this project?

Collapse
 
madhubankhatri profile image
Madhuban Khatri

Silly Mistake happens with me.
I will upload it soon

Collapse
 
sj891 profile image
sj891

Sure Dude,
But as soon as possible because i want to work with this project of yours..

Thread Thread
 
madhubankhatri profile image
Madhuban Khatri

I m very sorry...
I couldn't find it
This project was deleted by mistake.

So I m really sorry.

Thread Thread
 
sj891 profile image
sj891

Ok bro... Thank you..