Skip to content

Commit

Permalink
Added project files.
Browse files Browse the repository at this point in the history
  • Loading branch information
RoshisRai committed Mar 24, 2024
1 parent 9bc9de5 commit 9fb60be
Show file tree
Hide file tree
Showing 188 changed files with 38,182 additions and 0 deletions.
Empty file added unchartedpages/home/__init__.py
Empty file.
26 changes: 26 additions & 0 deletions unchartedpages/home/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from django.contrib import admin
from .models import Blog, ContactUs, NewsletterSubscriber, BookOrder

# Register your models here.
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
list_display = ['id', 'title', 'author', 'created_at', 'updated_at']
search_fields = ['title__contains', 'author__contains']

class Media:
js = ('js/tinyinject.js',)

@admin.register(ContactUs)
class ContactUsAdmin(admin.ModelAdmin):
list_display = ['id', 'email', 'phone', 'subject', 'created_at', 'updated_at']
search_fields = ['email__contains', 'phone__contains', 'subject__contains']

@admin.register(NewsletterSubscriber)
class NewsletterSubscriberAdmin(admin.ModelAdmin):
list_display = ['id', 'email', 'created_at', 'updated_at']
search_fields = ['email__contains']

@admin.register(BookOrder)
class BookOrderAdmin(admin.ModelAdmin):
list_display = ['id', 'name', 'email', 'phone', 'created_at', 'updated_at']
search_fields = ['email__contains']
6 changes: 6 additions & 0 deletions unchartedpages/home/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class HomeConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'home'
4 changes: 4 additions & 0 deletions unchartedpages/home/context_processors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from django.conf import settings

def site(request):
return {'SITE_URL': settings.SITE_URL}
108 changes: 108 additions & 0 deletions unchartedpages/home/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
from django.db import models
from django.utils.text import slugify
from django.dispatch import receiver
from django.db.models.signals import pre_save, post_delete

# Create your models here.
class Blog(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=255)
sub_title = models.TextField()
main_image = models.ImageField(upload_to='NewsAndArticles/', blank=True, null=True)
categories = models.CharField(max_length=255, blank=True, null=True)
content = models.TextField()
author = models.CharField(max_length=120)
slug = models.CharField(unique=True, max_length=200, blank=True, null=True)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)

def __str__(self):
return self.title

def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
return super(Blog, self).save(*args, **kwargs)

@receiver(post_delete, sender=Blog)
def post_save_blog_image(sender, instance, *args, **kwargs):
""" Clean Old Image file """
try:
instance.main_image.delete(save=False)
except:
pass

@receiver(pre_save, sender=Blog)
def pre_save_blog_image(sender, instance, *args, **kwargs):
""" instance old image file will delete from os """
try:
old_img = instance.__class__.objects.get(id=instance.id).main_image
try:
new_img = instance.main_image
except:
new_img = None
if new_img != old_img:
import os
if os.path.exists(old_img.path):
os.remove(old_img.path)
except:
pass

class ContactUs(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=150)
email = models.EmailField(max_length=200)
phone = models.BigIntegerField()
subject = models.CharField(max_length=255)
message = models.TextField()
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)

def __str__(self):
return self.name + "--" + str(self.phone) + "--" + self.subject

class NewsletterSubscriber(models.Model):
id = models.AutoField(primary_key=True)
email = models.EmailField(max_length=200)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)

def __str__(self):
return self.email

class BookOrder(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=150)
email = models.EmailField(max_length=200)
phone = models.BigIntegerField()
payment_receipt = models.FileField(upload_to='Payment Receipts/')
additional_notes_or_comments = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

def __str__(self):
return str(self.id) + '--' + self.name + '--' + str(self.phone) + '--' + self.email

@receiver(post_delete, sender=BookOrder)
def post_save_apply_now_resume(sender, instance, *args, **kwargs):
""" Clean Old Image file """
try:
instance.payment_receipt.delete(save=False)
except:
pass

@receiver(pre_save, sender=BookOrder)
def pre_save_apply_now_resume(sender, instance, *args, **kwargs):
""" instance old image file will delete from os """
try:
old_img = instance.__class__.objects.get(id=instance.id).payment_receipt
try:
new_img = instance.payment_receipt
except:
new_img = None
if new_img != old_img:
import os
if os.path.exists(old_img.path):
os.remove(old_img.path)
except:
pass
Empty file.
12 changes: 12 additions & 0 deletions unchartedpages/home/templatetags/custom_tags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django import template

register = template.Library()

@register.filter(name='split')
# @stringfilter
def split(string, sep):
"""Return the string split by sep.
Example usage: {{ value|split:"/" }}
"""
return string.split(sep)
3 changes: 3 additions & 0 deletions unchartedpages/home/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
14 changes: 14 additions & 0 deletions unchartedpages/home/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from django.urls import path
from .views import home, about, blogs, blog_post, buy_book, contact, faq, newsletter_subscriber, blog_search

urlpatterns = [
path('', home, name='home'),
path('about-us/', about, name='about'),
path('blogs/', blogs, name='blogs'),
path('blog-search/', blog_search, name='blog-search'),
path('blog-post/<slug:slug>/', blog_post, name='blog-post'),
path('buy-book/', buy_book, name='buy-book'),
path('contact-us/', contact, name='contact'),
path('frequently-asked-questions/', faq, name='faq'),
path('newsletter-subscriber/', newsletter_subscriber, name='newsletter-subscriber'),
]
160 changes: 160 additions & 0 deletions unchartedpages/home/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
from django.shortcuts import render, redirect
from django.contrib import messages
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from .models import Blog, NewsletterSubscriber, ContactUs, BookOrder
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
from django.views.decorators.csrf import csrf_exempt
from django.contrib.sites.shortcuts import get_current_site
from django.db.models import Q


def validate_email_address(email):
try:
validate_email(email)
return True
except ValidationError:
return False

# Create your views here.
def home(request):
return render(request, 'home/index.html')

def about(request):
return render(request, 'home/about.html')

def blogs(request):
try:
left_blog = Blog.objects.all().order_by('-id')[:1][0]
right_blogs = Blog.objects.all().order_by('-id')[1:3]
blogs = Blog.objects.all().order_by('-id')
top_three_slugs = [left_blog.slug]
for i in right_blogs:
top_three_slugs.append(i.slug)
main_blogs = []
for i in blogs:
if i.slug not in top_three_slugs:
main_blogs.append(i)
random_blogs = Blog.objects.all().order_by('?')
other_blogs = []
for i in random_blogs:
if i.slug not in top_three_slugs:
other_blogs.append(i)
context = {
'left_blog': left_blog,
'right_blogs': right_blogs,
'main_blogs': main_blogs,
'other_blogs': other_blogs[:4]
}
except Exception as e:
context = {
'left_blog': None,
'right_blogs': [],
'main_blogs': [],
'other_blogs': []
}
return render(request, 'home/blogs.html', context)

def blog_search(request):
query = request.GET.get('blog-search')
context = {
'query': query,
}
if(len(query) <= 3):
messages.error(request, 'Cound not find any matches. The number of search words is too small.')
elif(len(query)>= 120):
messages.error(request, 'The query length is above 120. Please! make it shorter.')
else:
blog1 = Blog.objects.filter(title__icontains=query)
blog2 = Blog.objects.filter(sub_title__icontains=query)
blog3 = Blog.objects.filter(categories__icontains=query)
blog4 = Blog.objects.filter(author__icontains=query)
blog5 = Blog.objects.filter(content__icontains=query)
blogst = blog1.union(blog2)
blognd = blogst.union(blog3)
blogrd = blognd.union(blog4)
blogs = blogrd.union(blog5)
context['blogs'] = blogs
return render(request, 'home/blogsearch.html', context)

def blog_post(request, slug):
blog = Blog.objects.get(slug=slug)
prev_blog_slug = next_blog_slug = None
if Blog.objects.filter(id=blog.id-1).exists():
prev_blog_slug = Blog.objects.get(id=blog.id-1).slug
if Blog.objects.filter(id=blog.id+1).exists():
next_blog_slug = Blog.objects.get(id=blog.id+1).slug

blog_category_list = blog.categories
print(blog_category_list)
related_blogs = []
for i in blog_category_list:
blog_filter = Blog.objects.filter(categories__icontains=i).order_by('-id')
for j in blog_filter:
if j not in related_blogs:
if j.slug != blog.slug:
related_blogs.append(j)
other_blogs = Blog.objects.all().order_by('-id')[:4]
context = {
'blog' : blog,
'related_blogs': related_blogs[:3],
'other_blogs': other_blogs,
'prev_blog_slug': prev_blog_slug,
'next_blog_slug': next_blog_slug,
}
return render(request, 'home/blogpost.html', context)

def buy_book(request):
if request.method == 'POST':
email = request.POST.get('email')
if validate_email_address(email):
phone = request.POST.get('phone')
if len(phone) == 10:
name = request.POST.get('name')
email = request.POST.get('email')
phone = request.POST.get('phone')
payment_receipt = request.FILES.get('payment_receipt')
additional_notes_or_comments = request.POST.get('additional_notes_or_comments')
book_order = BookOrder(name=name, email=email, phone=phone, payment_receipt=payment_receipt, additional_notes_or_comments=additional_notes_or_comments)
book_order.save()
messages.success(request, 'Book purchased sucessfully! Your book will be delivered within 24 hours of your purchase!!')
else:
messages.error(request, 'Please enter a valid phone number. Thank you!')
return redirect('home')
else:
return render(request, 'home/buybook.html')

def contact(request):
if request.method == 'POST':
email = request.POST.get('email')
if validate_email_address(email):
phone = request.POST.get('phone')
if len(phone) == 10:
name = request.POST.get('name')
subject = request.POST.get('subject')
message = request.POST.get('message')
contact = ContactUs(name=name, email=email, phone=phone, subject=subject, message=message)
contact.save()
messages.success(request, 'Your message has been sent successfully!!')
else:
messages.error(request, 'Please enter a valid phone number. Thank you!')
return HttpResponseRedirect(request. META['HTTP_REFERER'])
else:
messages.error(request, 'Please enter a valid email address. Thank you!')
return HttpResponseRedirect(request. META['HTTP_REFERER'])
elif request.method == 'GET':
return render(request, 'home/contact.html')

def faq(request):
return render(request, 'home/faq.html')

def newsletter_subscriber(request):
if request.method == 'POST':
email = request.POST.get('subscribe-email')
if validate_email_address(email):
subscriber = NewsletterSubscriber(email=email)
subscriber.save()
messages.success(request, 'Thank you for subscribing Uncharted Pages')
else:
messages.error(request, 'Please enter a valid email address. Thank you!')
return HttpResponseRedirect(request. META['HTTP_REFERER'])
22 changes: 22 additions & 0 deletions unchartedpages/manage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'unchartedpages.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)


if __name__ == '__main__':
main()
6 changes: 6 additions & 0 deletions unchartedpages/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
asgiref==3.6.0
Django==4.2
Pillow==9.5.0
python-dotenv==1.0.1
sqlparse==0.4.3
tzdata==2023.3
Loading

0 comments on commit 9fb60be

Please sign in to comment.