Это невозможно. 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
абсолютно бесполезна, не упоминайте об этом добавьте дополнительные служебные данные ввода-вывода.
Я просто собираюсь запуститься с подсказки от меня :)
Использование 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 С нуля '.
Не делайте твердого кода Ваши 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
тег .
Не пишите свои собственные страницы входа в систему. Если Вы используете 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'),
)
Когда я начинал, я не знал, что было Paginator, удостоверьтесь, что Вы знаете о его существовании!!
Используйте 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 (такого как перенаправление) будет срывать декоратора и работать, как Вы ожидаете.
Мне нравится использовать отладчик Python pdb для отладки проектов Django.
Это - полезная ссылка для изучения, как использовать его: http://www.ferg.org/papers/debugging_in_python.html
Добавьте assert False
в Вашем коде представления для дампа отладочной информации.
Используйте Jinja2 вместе с Django.
, Если Вы находите шаблонный язык Django, чрезвычайно ограничивающий (как я!) затем Вы не должны застревать с ним. Django гибок, и шаблонный язык слабо связывается к остальной части системы, поэтому просто плагин другой шаблонный язык, и используйте его для рендеринга http ответов!
я использую Jinja2, он почти похож на приводимую в действие версию шаблонного языка django, он использует тот же синтаксис и позволяет Вам использовать выражения в если операторы! больше никакого создания пользовательские если-теги такой как if_item_in_list
! можно просто сказать %{ if item in list %}
, или {% if object.field < 10 %}
.
, Но это не все; это имеет намного больше функций для упрощения шаблонного создания, в котором я не могу пойти хотя все они сюда.
Это добавляет к ответу выше приблизительно имена 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>
django.views.generic.list_detail.object_list - Это обеспечивает всю логику & переменные шаблона для разбиения на страницы (одна из тех I've-written-that-a-thousand-times-now тяжелых работ). Обертывание это допускает любую логику, в которой Вы нуждаетесь. Этот драгоценный камень сохранил меня много часов отладки ошибок диапазона на моих страницах "Search Results" и заставляет представление кодировать инструмент для очистки в процессе.
Установка Django Command Extensions и pygraphviz и затем дает следующую команду для получения действительно симпатичной визуализации модели Django:
./manage.py graph_models -a -g -o my_project.png
При попытке обмениваться данными между Django и другим приложением, request.raw_post_data
хороший друг. Используйте его для получения и пользовательский процесс, скажем, данные XML.
Документация: http://docs.djangoproject.com/en/dev/ref/request-response/
django.db.models.get_model
действительно позволяет получить модель без ее импорта.
Джеймс показывает, насколько это может быть удобно: «Советы Django: напишите улучшенные теги шаблонов - итерация 4 ".
Virtualenv + Python = life saver, если вы работаете над несколькими проектами Django и существует вероятность того, что все они не зависят от одной и той же версии Django / приложения.
Используйте панель инструментов отладки django . Например, он позволяет просматривать все SQL-запросы, выполняемые во время рендеринга представления, и вы также можете просматривать трассировку стека для любого из них.
Приложение для веб-дизайна очень полезно при создании дизайна вашего веб-сайта. После импорта вы можете добавить это, чтобы сгенерировать образец текста:
{% load webdesign %}
{% lorem 5 p %}
Есть набор настраиваемых тегов, которые я использую во всех шаблонах своего сайта. В поисках способа автозагрузки (СУХОЙ, помните?) Я обнаружил следующее:
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'
).
У меня недостаточно репутации, чтобы ответить на рассматриваемый комментарий, но важно отметить, что если вы собираетесь использовать Jinja , он НЕ поддерживает '-' в именах блоков шаблона, а в Django. Это вызвало у меня много проблем и потратил впустую время, пытаясь отследить очень непонятное сообщение об ошибке, которое оно генерировало.
Из документации django-admin :
Если вы используете оболочку Bash, подумайте об установке сценария завершения Django bash, который находится в extras / django_bash_completion
в дистрибутиве Django. Он включает завершение табуляции для команд django-admin.py
и manage.py
, так что вы можете, например ...
django-admin.py
. sql
, затем [TAB], чтобы увидеть все доступные параметры, имена которых начинаются с sql
. Допустим, у вас другая модель пользователя и вы хотите включить это в каждом ответе. Вместо этого:
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 и выполнить его после сохранения.
Я узнал об этом из документации к приложению sorl-thumbnailails . Вы можете использовать ключевое слово «as» в тегах шаблона, чтобы использовать результаты вызова в другом месте вашего шаблона.
Например:
{% url image-processor uid as img_src %}
<img src="{% thumbnail img_src 100x100 %}"/>
Это упоминается вскользь в документации Django templatetag, но относится только к циклам. Они не говорят, что вы можете использовать это где-нибудь еще (где угодно?).
Поскольку «представления» 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),
)
Вместо использования 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}
)
Используйте IPython , чтобы перейти к вашему коду на любом уровне и отладить его, используя возможности IPython. После того, как вы установили IPython, просто поместите этот код туда, где вы хотите отлаживать:
from IPython.Shell import IPShellEmbed; IPShellEmbed()()
Затем обновите страницу, перейдите в окно вашего сервера запуска, и вы попадете в интерактивное окно IPython.
У меня есть настроенный фрагмент в TextMate, поэтому я просто набираю ipshell и нажимаю Tab. Я не мог без этого жить.
Я много работал с компонентами 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/.
Конечно, не используйте его в производственной среде.
Запустите SMTP-сервер для разработки, который будет просто выводить все, что ему отправлено (если вы не хотите устанавливать SMTP на свой сервер)
командная строка:
python -m smtpd -n -c DebuggingServer localhost:1025
PyCharm IDE - удобная среда для программирования и особенно отладки со встроенной поддержкой Django.
Используйте 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'
Он также может обрабатывать связи и коллекции. Мы используем его каждый день в интенсивно используемом производственном коде, поэтому, несмотря на то, что он бета-версия, он очень удобен. Он также имеет хороший набор заглушек, которые вы можете использовать в своих тестах.
(Отказ от ответственности: хотя я не являюсь автором этой библиотеки, теперь я коммиттер, сделав несколько незначительных коммитов)
Визуализируйте форму с помощью шаблона django вместо as_ (ul | table | p) () .
Эта статья показывает, как использовать шаблон для рендеринга CusstomForms вместо as_p ()
, as_table ()
...
Чтобы заставить его работать, измените
из django импортируйте новые формы как формы
в из форм импорта django
из django.newforms.forms импортировать BoundField
в из django.forms.forms import BoundField
Используйте isapi-wsgi и django-pyodbc для запуска Django в Windows с использованием IIS и SQL Server!