Давненько не програмував, але вирішив згадати Perl на одній задачці, вірніше, її частині.
Є текстовий файл з проксями (2000 штук), які треба перевірити для початку на елементарну живучість хоста і сервіса. По одному перевіряти - займе пів дня. Тут приходять на поміч threads (нитки чи потоки). 200 потоків, який кочегарять 10 проксяків кожен, і того справляються з задачею за одну хвилину.
slugify не працює з unicode стрічками
а щоб працював, є чудовий пакет Unidecode
і приклад:
і приклад:
from django.template.defaultfilters import slugify
import unidecode
from unidecode import unidecode
#...
task_object.slug = slugify(unidecode(u'%s' % name))
зміна queryset в формі
Є три моделі з наступними зв'язками і форма:
Тобто, в таск привязаний до юзера і юзерського локейшена. Форма мені виводить всі локейшени всіх юзерів, що не є добре. Хочу щоб виводились лише рідні локейшени юзера.
Рішення просте. Перевизначити init TaskForm'и і змінити queryset поля location
У вюшці в конструктор TaskForm передаємо request.user, бо нам треба буде фільтрувати по ньому Locations
views.py
forms.py
class Task(models.Model):
location = models.ForeignKey(Locations, related_name='Task_location')
buyer = models.ForeignKey(UserProfile, related_name='Task_buyer')
class Locations(models.Model):
user = models.ForeignKey('registration.UserProfile', \
verbose_name=_('user'), related_name="user_locations")
class UserProfile(User):
class TaskForm(ModelForm):
class Meta:
model = Task
fields = ('location', 'name', 'description')
Тобто, в таск привязаний до юзера і юзерського локейшена. Форма мені виводить всі локейшени всіх юзерів, що не є добре. Хочу щоб виводились лише рідні локейшени юзера.
Рішення просте. Перевизначити init TaskForm'и і змінити queryset поля location
У вюшці в конструктор TaskForm передаємо request.user, бо нам треба буде фільтрувати по ньому Locations
views.py
@login_required
@render_to('')
def task_add(request, template="tasks/add.html"):
if request.method == 'POST':
form = TaskForm(request.POST, user=request.user)
if form.is_valid():
task = form.save(request.user, 1)
TaskStatus.objects.create(task=task, task_status=1)
return redirect("home")
else:
form = TaskForm(user=request.user)
return {'form': form,}, template
forms.py
class TaskForm(ModelForm):
class Meta:
model = Task
fields = ('category', 'location', 'name', 'description', 'price')
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(TaskForm, self).__init__(*args, **kwargs)
self.fields['location'].queryset=Locations.objects.filter(user=self.user)
def save(self, user=None, task_status=None, commit=True):
task_object = super(TaskForm, self).save(commit=False)
task_object.buyer = user
task_object.task_status = task_status
if commit:
task_object.save()
return task_object
повідомлення для користувача
Часто потрібно посилати користувачу якісь повідомлення про помилки чи успішні операції. Нутром почув, що є вже готове рішення і таки так. Переклад куска мануала по цьому: http://habrahabr.ru/blogs/django/87473/
розширення моделі User
Часто трапляється, що крім імені користувача потрібно зберегти ще багато даних, для цього треба розширювати вбудовану модель User. Оптимальне рішення: http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/
авторизація в соціальних мережах
Коротко і зрозуміло в себе в блозі розписав один з доробників socialauth, дописавши можливість авторизуватись на сервісах популярних в СНД.
Підписатися на:
Дописи (Atom)