Django pagination
Вбудована пагінація якась надто скромна і не функціональна. Перепробував кілька реалізацій і зупинився на django-paging. Жахливо документована, але запрацювала на "ура" у всіх аппах.
Зміна xml шаблону Sitemap в Django
Захотілось додати CSS в XML-файл Sitemap'у по типу WordPress'івського.
Йдемо в /usr/lib/python2.7/site-packages/django/contrib/sitemaps/templates/ (в Fedora такий шлях) і копіюємо sitemap.xml в свій template каталог проекту. Робимо потрібні зміни в ньому і маємо щастя.
авторизація через соціальні мережі в Django
Дуже класний сервіс, який позбавляє головного болю з САБЖом - loginza.ru
Для Django розроблений апп під нього. Все запрацювало з першого разу. Єдине що поправив в обробнику сигналів, то авторизувати неперевірених, а в мануалі вказано що авторизувати лише перевірених
Для Django розроблений апп під нього. Все запрацювало з першого разу. Єдине що поправив в обробнику сигналів, то авторизувати неперевірених, а в мануалі вказано що авторизувати лише перевірених
def loginza_auth_handler(sender, user, identity, **kwargs):
try:
# it's enough to have single identity verified to treat user as verified
#loginza_models.UserMap.objects.get(user=user, verified=True)
loginza_models.UserMap.objects.get(user=user)
auth.login(sender, user)
except loginza_models.UserMap.DoesNotExist:
sender.session['users_complete_reg_id'] = identity.id
return redirect(reverse('users.views.complete_registration'))
ThreadedComment і TOP10 найкоментованіших об'єктів
Чомусь розробники не написали такої корисної API.
Моє рішення, мабуть тимчасове, бо треба буде потестувати на швидкість.
post_type = ContentType.objects.get_for_model(Post)
counts = ThreadedComment.objects.filter(content_type=post_type).values('object_id').annotate(Count('object_id')).order_by()[:10]
counts = [ ( Post.objects.get(pk=cc['object_id']), cc['object_id__count']) for cc in counts ]
а як прикольно це виглядає у одній стрічці :))
counts = [ ( Post.objects.get(pk=cc['object_id']), cc['object_id__count']) for cc in ThreadedComment.objects.filter(content_type=ContentType.objects.get_for_model(Post)).values('object_id').annotate(Count('object_id')).order_by()[:10] ]
post_type = ContentType.objects.get_for_model(Post)
counts = ThreadedComment.objects.filter(content_type=post_type).values('object_id').annotate(Count('object_id')).order_by()[:10]
counts = [ ( Post.objects.get(pk=cc['object_id']), cc['object_id__count']) for cc in counts ]
а як прикольно це виглядає у одній стрічці :))
counts = [ ( Post.objects.get(pk=cc['object_id']), cc['object_id__count']) for cc in ThreadedComment.objects.filter(content_type=ContentType.objects.get_for_model(Post)).values('object_id').annotate(Count('object_id')).order_by()[:10] ]
No Django support installed in selected interpreter
Перевірялка Апача на живучість
#!/bin/bash
PATH=/bin:/usr/bin
THEDIR=/tmp/apache-watchdog
EMAIL=blablabla@gmail.com
mkdir -p $THEDIR
if ( wget --timeout=30 -q -P $THEDIR http://localhost/robots.txt )
then
# we are up
touch ~/.apache-was-up
else
# down! but if it was down already, don't keep spamming
if [[ -f ~/.apache-was-up ]]
then
# write a nice e-mail
echo -n "apache crashed at " > $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Access log:" >> $THEDIR/mail
tail -n 30 /var/log/httpd/access_log >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Error log:" >> $THEDIR/mail
tail -n 30 /var/log/httpd/access_log >> $THEDIR/mail
echo >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/etc/rc.d/init.d/httpd stop >> $THEDIR/mail 2>&1
killall -9 httpd >> $THEDIR/mail 2>&1
/etc/rc.d/init.d/httpd start >> $THEDIR/mail 2>&1
# send the mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
mail -s "apache-watchdog: apache crashed" $EMAIL < $THEDIR/mail
rm ~/.apache-was-up
fi
fi
rm -rf $THEDIR
(c) десь нагуглено і допиляно під федору
Perl date regexp
while () {
if ($_ =~ /^(.+) (.+) (.+) (\[.+\]) (\".+\") (\d+) (\d+)$/) {
($remote, $hz1, $hz2, $date_a, $url, $code,$size) = ($1,$2,$3,$4,$5,$6,$7);
if ($date_a =~ /^\[(.+)\/(.+)\/(\d+):(\d+):(\d+):(\d+)/) {
($day,$month,$year,$hour,$minute,$second) = ($1,$2,$3,$4,$5,$6);
}
}
}
Підписатися на:
Дописи (Atom)
