first commit
This commit is contained in:
0
blog/management/commands/__init__.py
Normal file
0
blog/management/commands/__init__.py
Normal file
85
blog/management/commands/create_fake_posts.py
Normal file
85
blog/management/commands/create_fake_posts.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import os
|
||||
import random
|
||||
import string
|
||||
import requests
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.core.files.base import ContentFile
|
||||
from blog.models import Post, Category, Tags
|
||||
|
||||
try:
|
||||
from faker import Faker
|
||||
fake = Faker()
|
||||
HAS_FAKER = True
|
||||
except ImportError:
|
||||
HAS_FAKER = False
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Creates 300 fake posts with random images'
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
User = get_user_model()
|
||||
# Prefer an existing staff user, otherwise any existing user, otherwise create a fallback user
|
||||
user = User.objects.filter(is_staff=True).first() or User.objects.first()
|
||||
if not user:
|
||||
self.stdout.write('Hiç kullanıcı bulunamadı, `fakeuser` oluşturuluyor...')
|
||||
user = User.objects.create(username='fakeuser', email='fake@example.com')
|
||||
user.set_unusable_password()
|
||||
user.save()
|
||||
categories = list(Category.objects.all())
|
||||
if not categories:
|
||||
self.stdout.write(self.style.ERROR('Lütfen önce en az bir kategori oluşturun!'))
|
||||
return
|
||||
|
||||
tags = list(Tags.objects.all())
|
||||
if not tags:
|
||||
self.stdout.write('Tag bulunamadı, oluşturuluyor...')
|
||||
for i in range(5):
|
||||
tag_name = self.get_random_string(8) if not HAS_FAKER else fake.word()
|
||||
Tags.objects.create(tag=tag_name)
|
||||
tags = list(Tags.objects.all())
|
||||
|
||||
self.stdout.write('300 adet fake post oluşturuluyor...')
|
||||
|
||||
for i in range(300):
|
||||
if HAS_FAKER:
|
||||
title = fake.sentence(nb_words=6).replace('.', '')
|
||||
content = '\n\n'.join(fake.paragraphs(nb=5))
|
||||
keywords = ", ".join(fake.words(nb=5))
|
||||
else:
|
||||
title = self.get_random_string(30)
|
||||
content = self.get_random_string(500)
|
||||
keywords = self.get_random_string(20)
|
||||
|
||||
post = Post(
|
||||
user=user,
|
||||
title=title,
|
||||
content=content,
|
||||
keywords=keywords,
|
||||
video='none',
|
||||
is_active=True,
|
||||
is_front=True
|
||||
)
|
||||
post.save()
|
||||
|
||||
# ManyToMany ilişkileri
|
||||
post.categories.add(random.choice(categories))
|
||||
post.tags.add(random.choice(tags))
|
||||
|
||||
# Resim ekle
|
||||
try:
|
||||
# Picsum'dan rastgele resim (800x600)
|
||||
img_url = f"https://picsum.photos/seed/{random.randint(1, 10000)}/800/600"
|
||||
response = requests.get(img_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
file_name = f"fake_post_{i}_{random.randint(1000,9999)}.jpg"
|
||||
post.image.save(file_name, ContentFile(response.content), save=True)
|
||||
self.stdout.write(f'Post {i+1}/300 oluşturuldu: {title} (Resimli)')
|
||||
else:
|
||||
self.stdout.write(f'Post {i+1}/300 oluşturuldu: {title} (Resimsiz - İndirme hatası)')
|
||||
except Exception as e:
|
||||
self.stdout.write(f'Post {i+1}/300 oluşturuldu: {title} (Resimsiz - Hata: {str(e)})')
|
||||
|
||||
def get_random_string(self, length):
|
||||
letters = string.ascii_letters + string.digits + ' '
|
||||
return ''.join(random.choice(letters) for i in range(length))
|
||||
121
blog/management/commands/seed_data.py
Normal file
121
blog/management/commands/seed_data.py
Normal file
@@ -0,0 +1,121 @@
|
||||
import random
|
||||
import requests
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.core.files import File
|
||||
from django.core.files.temp import NamedTemporaryFile
|
||||
from django.contrib.auth import get_user_model
|
||||
from faker import Faker
|
||||
from blog.models import Category, Tags, Post
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = 'Seeds the database with fake data for blog app'
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
self.stdout.write('Seeding data...')
|
||||
fake = Faker()
|
||||
|
||||
# Ensure a user exists
|
||||
user, created = User.objects.get_or_create(
|
||||
email='admin@example.com',
|
||||
defaults={'first_name': 'Admin', 'is_staff': True, 'is_superuser': True}
|
||||
)
|
||||
if created:
|
||||
user.set_password('admin')
|
||||
user.save()
|
||||
self.stdout.write(self.style.SUCCESS(f'Created user: {user.email}'))
|
||||
else:
|
||||
self.stdout.write(self.style.SUCCESS(f'Using existing user: {user.email}'))
|
||||
|
||||
# Create Categories
|
||||
categories_data = {
|
||||
'Teknoloji': ['Yazılım', 'Donanım', 'Yapay Zeka'],
|
||||
'Yaşam': ['Seyahat', 'Sağlık', 'Yemek'],
|
||||
'Spor': ['Futbol', 'Basketbol', 'Voleybol'],
|
||||
'Eğlence': ['Sinema', 'Müzik', 'Oyun'],
|
||||
}
|
||||
|
||||
created_categories = []
|
||||
for parent_name, children in categories_data.items():
|
||||
parent, _ = Category.objects.get_or_create(
|
||||
title=parent_name,
|
||||
defaults={
|
||||
'keywords': f'{parent_name}, blog, kategori',
|
||||
'description': f'{parent_name} kategorisi açıklaması',
|
||||
'is_active': True
|
||||
}
|
||||
)
|
||||
created_categories.append(parent)
|
||||
self.stdout.write(f'Created/Found Category: {parent.title}')
|
||||
|
||||
for child_name in children:
|
||||
child, _ = Category.objects.get_or_create(
|
||||
title=child_name,
|
||||
parent=parent,
|
||||
defaults={
|
||||
'keywords': f'{child_name}, {parent_name}, blog',
|
||||
'description': f'{child_name} alt kategorisi açıklaması',
|
||||
'is_active': True
|
||||
}
|
||||
)
|
||||
created_categories.append(child)
|
||||
self.stdout.write(f' - Created/Found Subcategory: {child.title}')
|
||||
|
||||
# Create Tags
|
||||
tags_list = ['Python', 'Django', 'Web Development', 'Coding', 'Tech', 'News', 'Tutorial', 'Tips', 'Health', 'Travel']
|
||||
created_tags = []
|
||||
for tag_name in tags_list:
|
||||
tag, _ = Tags.objects.get_or_create(
|
||||
tag=tag_name,
|
||||
defaults={'is_active': True}
|
||||
)
|
||||
created_tags.append(tag)
|
||||
self.stdout.write(f'Created/Found Tag: {tag.tag}')
|
||||
|
||||
# Create Posts
|
||||
self.stdout.write('Creating posts...')
|
||||
for i in range(30): # Create 30 posts
|
||||
title = fake.sentence(nb_words=6).replace('.', '')
|
||||
content = f"<p>{fake.paragraph(nb_sentences=10)}</p><p>{fake.paragraph(nb_sentences=5)}</p>"
|
||||
|
||||
post, created = Post.objects.get_or_create(
|
||||
title=title,
|
||||
defaults={
|
||||
'user': user,
|
||||
'content': content,
|
||||
'keywords': ', '.join(fake.words(nb=5)),
|
||||
'is_active': True,
|
||||
'is_front': True,
|
||||
'video': 'none'
|
||||
}
|
||||
)
|
||||
|
||||
if created:
|
||||
# Add Categories
|
||||
post_cats = random.sample(created_categories, k=random.randint(1, 3))
|
||||
post.categories.set(post_cats)
|
||||
|
||||
# Add Tags
|
||||
post_tags = random.sample(created_tags, k=random.randint(1, 4))
|
||||
post.tags.set(post_tags)
|
||||
|
||||
# Fetch and save image
|
||||
image_url = f"https://picsum.photos/800/600?random={i}"
|
||||
try:
|
||||
response = requests.get(image_url, timeout=10)
|
||||
if response.status_code == 200:
|
||||
img_temp = NamedTemporaryFile(delete=True)
|
||||
img_temp.write(response.content)
|
||||
img_temp.flush()
|
||||
post.image.save(f"post_{i}.jpg", File(img_temp), save=True)
|
||||
self.stdout.write(f' - Downloaded image for post: {title}')
|
||||
except Exception as e:
|
||||
self.stdout.write(self.style.WARNING(f' - Could not download image for post {title}: {e}'))
|
||||
|
||||
post.save()
|
||||
self.stdout.write(self.style.SUCCESS(f'Created Post: {post.title}'))
|
||||
else:
|
||||
self.stdout.write(f'Post already exists: {post.title}')
|
||||
|
||||
self.stdout.write(self.style.SUCCESS('Data seeding completed successfully!'))
|
||||
Reference in New Issue
Block a user