Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
from django.db.models import get_model
entries = get_model('auth', 'User').objects.get(...)
class LoginRequiredMixin(object):
@ method_decorator(login_required) # пробел после собачки надо убрать.
def dispatch(self, request, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
class PostDetailView(LoginRequiredMixin, DetailView):
model = Post
LoginRequiredMixin. Разумеется, можно сделать более общий микшин UserPassesTestMixin и организовать его по образу и подобию аналогичного декоратора. class LoginRequiredMixin(object):
@ method_decorator(login_required) # пробел после собачки надо убрать.
def dispatch(self, request, *args, **kwargs):
if self.test():
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
else:
return self.test_failed()
def test_failed(self):
"Response в случае ошибки"
def test(self):
return True
class LoginRequiredMixin(UserPassesTestMixin):
def test(self):
return self.request.user.is_authenticated()
from handy.shits import *
post = Post.objects.get(pk=request.GET['id'])
?id=ololotrololo';delete from auth_users;
render_to или json_response не реализовывал только ленивый.date_created).get_object_or_None и django-extensions для чего-нибудь ещё.INSTALLED_APPS = (
'metapacket.views',
'metapacket.shortcuts',
'metapacket.decorators',
)
render_to вообще пользоваться моветон, на мой взгляд. Ладно бы жили в каменные времена версии 1.2, когда это было вынужденной мерой: тогда шорткаты были длиннее собственно функций, на которые ссылались.django.shortcuts.render. А в 1.2, кстати, можно было импортировать direct_to_template as render. Получалось вполне себе универсально.return render(request, 'template/template.html', {'a':2,' b':3})
@render_to() предлагает более высокий уровень факторизации, например похожие страницы для зарегистрированных и для анонимов могут использовать общую логику:def _edit(request):
# логика редактирования какой-нибудь штуки
# будет использоваться повторно
# создаём вьюхи из логики и других аспектов
my_edit = login_required(render_to('my/edit.html')(_edit))
edit = render_to()(_edit)
render(), конечно, уменьшает надобность в @render_to().<hh user=render_to>()
def foo(request):
return {
}
foo здесь уже не вьюха, а только её часть и если думать о ней так, то вполне логично, что и выглядит она по другому.ajax
def enable_post(request):
...
raise ajax.error('permission_denied')
def enable_post(request):
...
return ErrorAjaxResponse('permission_denied')
<source lang="python">...</source> для подстветки кода и @ для создания собак.Декор — (от лат. decorare — украшать) — дополнительные элементы в живописных композиционных сюжетах.
class MyCustomView(TemplateView):
template_name = 'my_custom_template.html'
def get_context_data(self, **kwargs):
return {
'bar': Bar.objects.all()
}
django.utils.html.strip_spaces_between_tags, зачем писать эту логику самостоятельно?
Упрощая жизнь c Django