Любимая Django Tips & Features?

Это невозможно. Spark не поддерживает вложенные операции над распределенными структурами данных (RDDs, DataFrames, Datasets). Даже если бы он выполнял большое количество заданий, это не было бы хорошей идеей. Учитывая код, который вы показали, вы, вероятно, захотите преобразовать свой RDD в DataFrame и выполнить join wit

(rdd.map(x => (x, )).toDF(["element"])
  .join(sampleDF, sampleDF[0] == df[0])
  .groupBy("element")
  .agg(count("element") > 0))

. На боковой ноте печать внутри map абсолютно бесполезна, не упоминайте об этом добавьте дополнительные служебные данные ввода-вывода.

308
задан 3 revs, 2 users 100% 31 August 2009 в 10:36
поделиться

39 ответов

Я просто собираюсь запуститься с подсказки от меня :)

Использование os.path.dirname () в settings.py для предотвращения hardcoded dirnames.

не Делают hardcode пути в Вашем settings.py, если Вы хотите выполнить свой проект в различных местоположениях. Используйте следующий код в settings.py, если Ваши шаблоны и статические файлы расположены в каталоге проекта Django:

# settings.py
import os
PROJECT_DIR = os.path.dirname(__file__)
...
STATIC_DOC_ROOT = os.path.join(PROJECT_DIR, "static")
...
TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, "templates"),
)

Кредиты: Я получил эту подсказку от скринкаста' Django С нуля '.

222
ответ дан Haes 23 November 2019 в 01:14
поделиться

Не делайте твердого кода Ваши URL!

Использование имена URL вместо этого, и reverse функция для получения самого URL.

при определении отображений URL дайте имена URL.

urlpatterns += ('project.application.views'
   url( r'^something/ 

Удостоверяются, что имя уникально на URL.

у меня обычно есть последовательный формат "project-appplication-view", например, "cbx-forum-thread" для представления потока.

ОБНОВЛЕНИЕ (бесстыдно кража дополнение ayaz ):

Это имя может использоваться в шаблонах с url тег .

, 'view_function', name="url-name" ), .... )

Удостоверяются, что имя уникально на URL.

у меня обычно есть последовательный формат "project-appplication-view", например, "cbx-forum-thread" для представления потока.

ОБНОВЛЕНИЕ (бесстыдно кража дополнение ayaz ):

Это имя может использоваться в шаблонах с url тег .

88
ответ дан Community 23 November 2019 в 01:14
поделиться

Не пишите свои собственные страницы входа в систему. Если Вы используете django.contrib.auth.

реальный, грязный секрет - то, что, если Вы также используете django.contrib.admin, и django.template.loaders.app_directories.load_template_source находится в Ваших шаблонных загрузчиках, можно получить шаблоны, свободные также!

# somewhere in urls.py
urlpatterns += patterns('django.contrib.auth',
    (r'^accounts/login/,'views.login', {'template_name': 'admin/login.html'}),
    (r'^accounts/logout/,'views.logout'),
)
80
ответ дан SingleNegationElimination 23 November 2019 в 01:14
поделиться

Когда я начинал, я не знал, что было Paginator, удостоверьтесь, что Вы знаете о его существовании!!

57
ответ дан hasen 23 November 2019 в 01:14
поделиться

Используйте django-раздражение render_to декоратор вместо render_to_response.

@render_to('template.html')
def foo(request):
    bars = Bar.objects.all()
    if request.user.is_authenticated():
        return HttpResponseRedirect("/some/url/")
    else:
        return {'bars': bars}

# equals to
def foo(request):
    bars = Bar.objects.all()
    if request.user.is_authenticated():
        return HttpResponseRedirect("/some/url/")
    else:
        return render_to_response('template.html',
                              {'bars': bars},
                              context_instance=RequestContext(request))

Отредактированный, чтобы указать, что возврат HttpResponse (такого как перенаправление) будет срывать декоратора и работать, как Вы ожидаете.

119
ответ дан Jiaaro 23 November 2019 в 01:14
поделиться

Мне нравится использовать отладчик Python pdb для отладки проектов Django.

Это - полезная ссылка для изучения, как использовать его: http://www.ferg.org/papers/debugging_in_python.html

37
ответ дан Harold 23 November 2019 в 01:14
поделиться

Добавьте assert False в Вашем коде представления для дампа отладочной информации.

35
ответ дан zgoda 23 November 2019 в 01:14
поделиться

Используйте Jinja2 вместе с Django.

, Если Вы находите шаблонный язык Django, чрезвычайно ограничивающий (как я!) затем Вы не должны застревать с ним. Django гибок, и шаблонный язык слабо связывается к остальной части системы, поэтому просто плагин другой шаблонный язык, и используйте его для рендеринга http ответов!

я использую Jinja2, он почти похож на приводимую в действие версию шаблонного языка django, он использует тот же синтаксис и позволяет Вам использовать выражения в если операторы! больше никакого создания пользовательские если-теги такой как if_item_in_list! можно просто сказать %{ if item in list %}, или {% if object.field < 10 %}.

, Но это не все; это имеет намного больше функций для упрощения шаблонного создания, в котором я не могу пойти хотя все они сюда.

35
ответ дан hasen 23 November 2019 в 01:14
поделиться

Это добавляет к ответу выше приблизительно имена URL Django и обратный URL, диспетчеризирующий .

имена URL могут также эффективно использоваться в шаблонах. Например, для данного шаблона URL:

url(r'(?P<project_id>\d+)/team/ 

у Вас может быть следующее в шаблонах:

<a href="{% url project_team project.id %}">Team</a>
, 'project_team', name='project_team')

у Вас может быть следующее в шаблонах:

<a href="{% url project_team project.id %}">Team</a>
33
ответ дан Community 23 November 2019 в 01:14
поделиться

django.views.generic.list_detail.object_list - Это обеспечивает всю логику & переменные шаблона для разбиения на страницы (одна из тех I've-written-that-a-thousand-times-now тяжелых работ). Обертывание это допускает любую логику, в которой Вы нуждаетесь. Этот драгоценный камень сохранил меня много часов отладки ошибок диапазона на моих страницах "Search Results" и заставляет представление кодировать инструмент для очистки в процессе.

16
ответ дан jds 23 November 2019 в 01:14
поделиться

Установка Django Command Extensions и pygraphviz и затем дает следующую команду для получения действительно симпатичной визуализации модели Django:

./manage.py graph_models -a -g -o my_project.png
130
ответ дан Haes 23 November 2019 в 01:14
поделиться

При попытке обмениваться данными между Django и другим приложением, request.raw_post_data хороший друг. Используйте его для получения и пользовательский процесс, скажем, данные XML.

Документация: http://docs.djangoproject.com/en/dev/ref/request-response/

37
ответ дан Peter Mortensen 23 November 2019 в 01:14
поделиться

django.db.models.get_model действительно позволяет получить модель без ее импорта.

Джеймс показывает, насколько это может быть удобно: «Советы Django: напишите улучшенные теги шаблонов - итерация 4 ".

19
ответ дан 23 November 2019 в 01:14
поделиться

Virtualenv + Python = life saver, если вы работаете над несколькими проектами Django и существует вероятность того, что все они не зависят от одной и той же версии Django / приложения.

97
ответ дан 23 November 2019 в 01:14
поделиться

Используйте панель инструментов отладки django . Например, он позволяет просматривать все SQL-запросы, выполняемые во время рендеринга представления, и вы также можете просматривать трассировку стека для любого из них.

82
ответ дан 23 November 2019 в 01:14
поделиться

Приложение для веб-дизайна очень полезно при создании дизайна вашего веб-сайта. После импорта вы можете добавить это, чтобы сгенерировать образец текста:

{% load webdesign %}
{% lorem 5 p %}
19
ответ дан 23 November 2019 в 01:14
поделиться

Есть набор настраиваемых тегов, которые я использую во всех шаблонах своего сайта. В поисках способа автозагрузки (СУХОЙ, помните?) Я обнаружил следующее:

from django import template
template.add_to_builtins('project.app.templatetags.custom_tag_module')

Если вы поместите это в модуль, который загружается по умолчанию (например, ваш основной urlconf), у вас будут теги и фильтры из ваш модуль пользовательского тега доступен в любом шаблоне, без использования {% load custom_tag_module%} .

Аргументом, переданным в template.add_to_builtins () , может быть любой путь к модулю; ваш модуль настраиваемого тега не обязательно должен находиться в конкретном приложении. Например, это также может быть модуль в корневом каталоге вашего проекта (например, 'project.custom_tag_module' ).

102
ответ дан 23 November 2019 в 01:14
поделиться

У меня недостаточно репутации, чтобы ответить на рассматриваемый комментарий, но важно отметить, что если вы собираетесь использовать Jinja , он НЕ поддерживает '-' в именах блоков шаблона, а в Django. Это вызвало у меня много проблем и потратил впустую время, пытаясь отследить очень непонятное сообщение об ошибке, которое оно генерировало.

20
ответ дан 23 November 2019 в 01:14
поделиться

Из документации django-admin :

Если вы используете оболочку Bash, подумайте об установке сценария завершения Django bash, который находится в extras / django_bash_completion в дистрибутиве Django. Он включает завершение табуляции для команд django-admin.py и manage.py , так что вы можете, например ...

  • Набрать django-admin.py .
  • Нажмите [TAB], чтобы увидеть все доступные параметры.
  • Введите sql , затем [TAB], чтобы увидеть все доступные параметры, имена которых начинаются с sql .
41
ответ дан 23 November 2019 в 01:14
поделиться

Контекстные процессоры прекрасны.

Допустим, у вас другая модель пользователя и вы хотите включить это в каждом ответе. Вместо этого:

def myview(request, arg, arg2=None, template='my/template.html'):
    ''' My view... '''
    response = dict()
    myuser = MyUser.objects.get(user=request.user)
    response['my_user'] = myuser
    ...
    return render_to_response(template,
                              response,
                              context_instance=RequestContext(request))

Контекстные процессы дают вам возможность передавать любую переменную вашему шаблоны. Обычно я помещаю свой в 'my_project / apps / core / context.py :

def my_context(request):
    try:
        return dict(my_user=MyUser.objects.get(user=request.user))
    except ObjectNotFound:
        return dict(my_user='')

В вашем settings.py добавьте следующую строку в ваш TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (
    'my_project.apps.core.context.my_context',
    ...
)

Now каждый раз, когда делается запрос, он автоматически включает ключ my_user .

Также сигнализирует выигрыш.

Я написал об этом в блоге несколько месяцев назад, так что я просто скопирую и вставлю:

Django сразу же выдает несколько сигналов, которые невероятно полезно. У вас есть возможность делать вещи заранее и публиковать сохранение, инициализацию, удаление или даже когда запрос обработанный. Итак, давайте отойдем от концепций и продемонстрируйте, как они используются. Допустим, у нас есть блог

from django.utils.translation import ugettext_lazy as _
class Post(models.Model):
    title = models.CharField(_('title'), max_length=255)
    body = models.TextField(_('body'))
    created = models.DateTimeField(auto_now_add=True)

Итак, вы хотите каким-то образом уведомить один из множества блогов-пингов сервисы мы сделали новый пост, пересобираем самые последние кеш сообщений и твит об этом. Хорошо с сигналами у вас есть возможность делать все это без добавления каких-либо методы в класс Post.

import twitter

from django.core.cache import cache
from django.db.models.signals import post_save
from django.conf import settings

def posted_blog(sender, created=None, instance=None, **kwargs):
    ''' Listens for a blog post to save and alerts some services. '''
    if (created and instance is not None):
        tweet = 'New blog post! %s' instance.title
        t = twitter.PostUpdate(settings.TWITTER_USER,
                               settings.TWITTER_PASSWD,
                               tweet)
        cache.set(instance.cache_key, instance, 60*5)
       # send pingbacks
       # ...
       # whatever else
    else:
        cache.delete(instance.cache_key)
post_save.connect(posted_blog, sender=Post)

Вот и мы, определив эту функцию и используя post_init сигнал для подключения функции к модели Post и выполнить его после сохранения.

66
ответ дан 23 November 2019 в 01:14
поделиться

Я узнал об этом из документации к приложению sorl-thumbnailails . Вы можете использовать ключевое слово «as» в тегах шаблона, чтобы использовать результаты вызова в другом месте вашего шаблона.

Например:

{% url image-processor uid as img_src %}
<img src="{% thumbnail img_src 100x100 %}"/>

Это упоминается вскользь в документации Django templatetag, но относится только к циклам. Они не говорят, что вы можете использовать это где-нибудь еще (где угодно?).

18
ответ дан 23 November 2019 в 01:14
поделиться

Поскольку «представления» Django должны быть только вызываемыми объектами, которые возвращают HttpResponse, вы можете легко создавать представления на основе классов, такие как в Ruby on Rails и других фреймворках.

Есть несколько способов. для создания представлений на основе классов, вот мой любимый:

from django import http

class RestView(object):
    methods = ('GET', 'HEAD')

    @classmethod
    def dispatch(cls, request, *args, **kwargs):
        resource = cls()
        if request.method.lower() not in (method.lower() for method in resource.methods):
            return http.HttpResponseNotAllowed(resource.methods)
        try:
            method = getattr(resource, request.method.lower())
        except AttributeError:
            raise Exception("View method `%s` does not exist." % request.method.lower())
        if not callable(method):
            raise Exception("View method `%s` is not callable." % request.method.lower())
        return method(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        return http.HttpResponse()

    def head(self, request, *args, **kwargs):
        response = self.get(request, *args, **kwargs)
        response.content = ''
        return response

Вы можете добавить всевозможные другие вещи, такие как условная обработка запросов и авторизация, в свое базовое представление.

Как только вы настроите свои представления, ваш urls.py будет выглядеть примерно так:

from django.conf.urls.defaults import *
from views import MyRestView

urlpatterns = patterns('',
    (r'^restview/', MyRestView.dispatch),
)
27
ответ дан 23 November 2019 в 01:14
поделиться

Вместо использования render_to_response для привязки вашего контекста к шаблону и его рендеринга (что обычно показывают в документации Django) используйте общее представление direct_to_template . Он делает то же самое, что и render_to_response , но также автоматически добавляет RequestContext в контекст шаблона, неявно разрешая использование контекстных процессоров. Вы можете сделать это вручную, используя render_to_response , но зачем беспокоиться? Это просто еще один шаг, который нужно запомнить, и еще один LOC. Помимо использования контекстных процессоров, наличие RequestContext в вашем шаблоне позволяет вам делать такие вещи, как:

<a href="{{MEDIA_URL}}images/frog.jpg">A frog</a> 

, что очень полезно. Фактически, +1 к общим взглядам в целом. Документы Django в основном показывают их как ярлыки, потому что для простых приложений даже нет файла views.py, но вы также можете использовать их в своих собственных функциях просмотра:

from django.views.generic import simple

def article_detail(request, slug=None):
    article = get_object_or_404(Article, slug=slug)
    return simple.direct_to_template(request, 
        template="articles/article_detail.html",
        extra_context={'article': article}
    )
21
ответ дан 23 November 2019 в 01:14
поделиться

Используйте IPython , чтобы перейти к вашему коду на любом уровне и отладить его, используя возможности IPython. После того, как вы установили IPython, просто поместите этот код туда, где вы хотите отлаживать:

from IPython.Shell import IPShellEmbed; IPShellEmbed()()

Затем обновите страницу, перейдите в окно вашего сервера запуска, и вы попадете в интерактивное окно IPython.

У меня есть настроенный фрагмент в TextMate, поэтому я просто набираю ipshell и нажимаю Tab. Я не мог без этого жить.

47
ответ дан 23 November 2019 в 01:14
поделиться

Я много работал с компонентами Telerik и настоятельно рекомендую их. Не только компоненты действительно хороши, но и поддержка, которую вы получаете, отличная. Я также попробовал номер люкс ComponentOne, но у них не было нужной мне функции локализации.

-121--3505030-

Область объекта не никогда не подразумевает безопасность - никогда! Роль ОС заключается в обеспечении безопасности во время выполнения. Это ошибка при разработке системы, которая использует специфичную для языка область объекта, чтобы ограничить доступ к данным экземпляра объекта во время выполнения. Если это не так, то все языки, не относящиеся к ОО, по определению не являются безопасными.

-121--2501900-

Все знают, что есть сервер разработки, на котором можно работать с «manage.py runserver», но знаете ли вы, что существует представление разработки для обслуживания статических файлов (CSS/JS/IMG)?

Новички всегда озадачены, потому что Джанго не имеет никакого способа обслуживать статические файлы. Это потому, что команда разработчиков считает, что это задание для реального веб-сервера.

Но при разработке вы можете не захотеть настраивать Apache + mod_wisgi, это тяжело. Затем можно просто добавить к urls.py следующее:

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': '/path/to/media'}),

Ваш CSS/JS/IMG будет доступен по адресу www.yoursite.com/site_media/.

Конечно, не используйте его в производственной среде.

19
ответ дан 23 November 2019 в 01:14
поделиться

Запустите SMTP-сервер для разработки, который будет просто выводить все, что ему отправлено (если вы не хотите устанавливать SMTP на свой сервер)

командная строка:

python -m smtpd -n -c DebuggingServer localhost:1025
43
ответ дан 23 November 2019 в 01:14
поделиться

PyCharm IDE - удобная среда для программирования и особенно отладки со встроенной поддержкой Django.

16
ответ дан 23 November 2019 в 01:14
поделиться

Используйте xml_models для создания моделей Django, использующих серверную часть XML REST API (вместо SQL). Это очень полезно, особенно при моделировании сторонних API - вы получаете тот же синтаксис QuerySet, к которым вы привыкли. Вы можете установить его из PyPI.

XML из API:

<profile id=4>
    <email>joe@example.com</email>
    <first_name>Joe</first_name>
    <last_name>Example</last_name>
    <date_of_birth>1975-05-15</date_of_birth>
</profile>

И теперь в python:

class Profile(xml_models.Model):
    user_id = xml_models.IntField(xpath='/profile/@id')
    email = xml_models.CharField(xpath='/profile/email')
    first = xml_models.CharField(xpath='/profile/first_name')
    last = xml_models.CharField(xpath='/profile/last_name')
    birthday = xml_models.DateField(xpath='/profile/date_of_birth')

    finders = {
        (user_id,):  settings.API_URL +'/api/v1/profile/userid/%s',
        (email,):  settings.API_URL +'/api/v1/profile/email/%s',
    }

profile = Profile.objects.get(user_id=4)
print profile.email
# would print 'joe@example.com'

Он также может обрабатывать связи и коллекции. Мы используем его каждый день в интенсивно используемом производственном коде, поэтому, несмотря на то, что он бета-версия, он очень удобен. Он также имеет хороший набор заглушек, которые вы можете использовать в своих тестах.

(Отказ от ответственности: хотя я не являюсь автором этой библиотеки, теперь я коммиттер, сделав несколько незначительных коммитов)

14
ответ дан 23 November 2019 в 01:14
поделиться

Визуализируйте форму с помощью шаблона django вместо as_ (ul | table | p) () .

Эта статья показывает, как использовать шаблон для рендеринга CusstomForms вместо as_p () , as_table () ...

Чтобы заставить его работать, измените

  • из django импортируйте новые формы как формы в из форм импорта django
  • из django.newforms.forms импортировать BoundField в из django.forms.forms import BoundField
5
ответ дан 23 November 2019 в 01:14
поделиться

Используйте isapi-wsgi и django-pyodbc для запуска Django в Windows с использованием IIS и SQL Server!

1
ответ дан 23 November 2019 в 01:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: