Files
shopback/blog/management/commands/create_fake_posts.py
Beyhan Oğur d9f1ea341e first commit
2026-04-26 22:27:56 +03:00

86 lines
3.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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))