Страницы

Поиск по вопросам

Показаны сообщения с ярлыком django. Показать все сообщения
Показаны сообщения с ярлыком django. Показать все сообщения

среда, 15 апреля 2020 г.

Кеширование в Django

#python #django

                    
Не получается закешировать данные.
Делаю так (ctype.id=158, objects=[данные в QuerySet формате]):
from django.core.cache import cache
cached_objects = cache.get('top_rating_%s'%ctype.id)   #вынимаем из кеша
if cached_objects is None:  #Если кеш пуст, то...
  #Тут манипуляция данными
  cache.set('top_rating_%s'%ctype.id, objects, time=1800)  #Кладем в кеш значение objects
  return objects #Возвращаем objects
else:
  return cached_objects #Возвращаем значение из кеша

Пробовал перевести данные из типа QuerySet в list:
...
objects = list(objects) #Преобразую
cache.set('top_rating_%s'%ctype.id, objects, time=1800) #Кладу в кеш
...

В обоих случаях в кеш ничего не сохранялось.
Для проверки пробовал просто положить в кеш строку, все отлично сработало, в кеше
значение прожило ровно столько, сколько указал во времени жизни.    


Ответы

Ответ 1



Кеш он глупый, умеет хранить только базовые типы данных. Поэтому сложные структуры которые зависят от классов или типов указанных в приложении нужно сериализовать перед записью в кеш и десериализовать после. Сериализация объектов в Django Также можно воспользоваться модулем pickle

Ответ 2



Видимо, все зависит от бэкенда, т.к. за сериализацию данных каждый бэкенд отвечает сам. К примеру, с memcache, приведенный выше код, должен работать, т.к. memcache не скалярные данные сериализует при помощи pickle. UPD. Проверил на django 1.3, python 2.7 - все бэкенды используемые в django автоматически сериализируют объекты, т.ч., видимо, у вас где-то ошибка.

Вывод группами в django

#шаблоны #django

                    
Необходимо вывести нечто вроде этого:
Из массива вида ['1','2','3','4','5','6','7','8','9']. Как это лучше всего сделать, учитывая то, что количество элементов в массиве может быть любым (от 1 до бесконечности). Спасибо!


Ответы

Ответ 1



Помогло
{% for item in items %} {% if forloop.counter|divisibleby:"3" %}
{% endif %} {% endfor %}


Как правильно сохранить данные в бд

#python #ооп #django

                    
Привет всем, я не понимаю как правильно сделать запись в бд, неправильно не хочу
писать и хочется разобраться. 
Есть пасрер который возвращает список с данными определенного типа, вот эти данные
нужно сохранить, но кто должен сохранять эти данные? Модель? Парсер? или другой объект
специально предназначенный для этого? Прощу написать небольшой пример     


Ответы

Ответ 1



Если вопрос концептуальный, то есть понятно как написать код, но непонятно куда его положить, то я бы посоветовал не прикручивать к парсеру функционал сохранения данных. Можно это сохранение сделать во вьюхе, а совсем хорошо написать отдельный модуль с классом-контроллером, который бы получал данные для сохранения, дальше итерировался по ним и создавал/сохранял модели, сформированные из этих данных (ну там MyModel.objects.create(arg1=arg1, arg2=arg2) и т.д.) В этом случае во вьюхе можно получить данные из парсера и передать их экземпляру контроллера, который их и сохранит. Вся логика по обработке данных будет располагаться в объекте контроллера, что удобно и красиво будет. upd Заведите модуль в директории с приложением, назовем его controllers.py # controllers.py class LessonController(object): def __init__(self, data): super(LessonController, self).__init__() self.data = data def save_parsed_data(self): for item in self.data: Lesson.objects.create( subject=item.subject, teacher=item.teacher, ... ) # views.py from controllers import LessonController def my_view(request): x = Parser("D:/rsp.xls") schedule = x.parse() lesson_ctl = LessonController(schedule) lesson_ctl.save_parsed_data Ну вот что-то в этом духе может вам подойдет.

Ответ 2



Привет. Смутно понятно как-то, но если это то, что я понял, сделайте во вьюшке так, например: from .models import Имятвоеймодели def some_function(request): че-нибудь = Имятвоеймодели() че-нибудь.полемодели = какие-тоданныеотпарсера че-нибудь.save() А вообще подробнее опишите свой парсер, дайте пример кода.

Ответ 3



А почему бы не импортировать sql драйвер и уже от этого плясать, данные записать в переменные и их передать в базу? import sqlite3 например.

понедельник, 13 апреля 2020 г.

ЧПУ на django

#python #url #django

                    
Поправьте если я не прав:
models.py:
...
def get_absolute_url(self):
    return '/pages/%s' % self.slug

urls.py:
url(r'^pages/(?P.*)/$', 'APP.views.view_page'),

APP.views.py:
def view_page(request, slug):
    page = get_object_or_404(Page, slug=slug)
    return render_to_response('TEMPLATE', {'x': page})

Не могу понять, как работает get-object-or_404, первый параметр это модель, а второй
slug  это поле в модели, принимает переменную из url.py:  и сверяет, если они
равны (читай: часть введеного УРЛа по регулярке совпадает с model.slug) грузит страницу,
а в противном случае 404. Так? А то ужасное описание здесь: get_object_or_404.
get_object_or_404(klass, *args, **kwargs)

Calls get() on a given model manager, but it raises Http404 instead of the model's
DoesNotExist exception.
Required arguments
klass
A Model, Manager or QuerySet instance from which to get the object.
**kwargs
Lookup parameters, which should be in the format accepted by get() and filter().
Example

The following example gets the object with the primary key of 1 from MyModel:
from django.shortcuts import get_object_or_404

def my_view(request):
    my_object = get_object_or_404(MyModel, pk=1)

This example is equivalent to:
from django.http import Http404

def my_view(request):
    try:
        my_object = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404

Note: As with get(), a MultipleObjectsReturned exception will be raised if more than
one object is found.
get_list_or_404
get_list_or_404(klass, *args, **kwargs)

Returns the result of filter() on a given model manager, raising Http404 if the resulting
list is empty.
Required arguments
klass
A Model, Manager or QuerySet instance from which to get the list.
**kwargs
Lookup parameters, which should be in the format accepted by get() and filter().
Example

The following example gets all published objects from MyModel:
from django.shortcuts import get_list_or_404

def my_view(request):
    my_objects = get_list_or_404(MyModel, published=True)

This example is equivalent to:
from django.http import Http404

def my_view(request):
    my_objects = list(MyModel.objects.filter(published=True))
    if not my_objects:
        raise Http404
Questions/Feedback

Having trouble? We'd like to help!
 Try the FAQ — it's got answers to many common questions. 
 Search for information in the archives of the django-users mailing list, or post
a question. 
 Ask a question in the #django IRC channel, or search the IRC logs to see if it has
been asked before. 
 If you notice errors with this documentation, please  open a ticket and let us know!
Please only use the ticket tracker for criticisms and improvements on the docs. For
tech support, use the resources above. 
Search

Version:

Contents
Django shortcut functions
render
Required arguments
Optional arguments
Example
render_to_response
Required arguments
Optional arguments
Example
redirect
Examples
get_object_or_404
Required arguments
Example
get_list_or_404
Required arguments
Example
Browse
Prev: File Uploads
Next: Generic views
Table of contents
General Index
Python Module Index
You are here:
Django dev documentation 
Using Django 
Handling HTTP requests 
Django shortcut functions
Download:

 Offline (development version): HTML | PDF | ePub 
Provided by Read the Docs.

© 2005-2012 Django Software Foundation unless otherwise noted. Django is a registered
trademark of the Django Software Foundation. Linux Web hosting graciously provided
by Media Temple. ](https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#get-object-or-404)

Если я все реализовал ЧПУ как правильно и ошибок у меня нет, то прошу совета как
элегантно добавлять .html без / в конце урла, не прописывая .html в шаблоне.    


Ответы

Ответ 1



def get_absolute_url(self): return '/pages/%s.html' % self.slug url(r'^pages/(?P.*)\.html$', 'APP.views.view_page'),

Как вывести в админке django столбец из связи многие ко многим?

#python #django

                    
Здравствуйте! Подскажите, пожалуйста, как вывести в админке django столбец из связи
многие ко многим?
Пример:
Есть модель  books и author:
class books(models.Model):
    name = models.CharField(max_length=50, verbose_name=u'Название книги')
    year = models.IntegerField(max_length=10, verbose_name=u'Год выпуска')
    author = models.ManyToManyField(author)

class author(models.Model):
    full_name = models.CharField(max_length=50, verbose_name=u'Автор')

Содержание admin.py:
from django.contrib import admin
from support.models import books, author

class BooksAdmin(admin.ModelAdmin):
    list_display = ('name', 'year', 'ЧТО_ТУТ_НАПИСАТЬ?')

admin.site.register(books, BooksAdmin)

Что нужно написать, что бы появился третий столбец, в котором будут отображаться
авторы книга (через перенос строки).    


Ответы

Ответ 1



Чтобы появился третий столбец, в котором будут отображаться авторы книги через запятую. #models.py class Books(models.Model): name = models.CharField(max_length=50, verbose_name=u'Название книги') year = models.IntegerField(max_length=10, verbose_name=u'Год выпуска') authors = models.ManyToManyField(Author) def author_names(self): return u" %s" % (u", ".join([author.full_name for author in self.authors.all()])) author_names.short_description=u'Авторы' def __unicode__(self): return self.name class Author(models.Model): full_name = models.CharField(max_length=50, verbose_name=u'Автор') def __unicode__(self): return self.full_name #admin.py: from django.contrib import admin from support.models import books, author class BooksAdmin(admin.ModelAdmin): list_display = ('name', 'year', 'author_names') admin.site.register(books, BooksAdmin)

Ответ 2



Напрямую - никак ManyToManyField fields aren’t supported, because that would entail executing a separate SQL statement for each row in the table. If you want to do this nonetheless, give your model a custom method, and add that method’s name to list_display. (See below for more on custom methods in list_display.)

Ответ 3



#models.py python3 django 1.11 from django.db import models class Author(models.Model): full_name = models.CharField(max_length=50, verbose_name='Автор') def __str__(self): return self.full_name class Books(models.Model): name = models.CharField(max_length=50, verbose_name='Название книги') year = models.IntegerField( verbose_name='Год выпуска') authors = models.ManyToManyField(Author) def __str__(self): return self.name #admin.py from django.contrib import admin from .models import Books, Author from itertools import chain class BooksAdmin(admin.ModelAdmin): def author_names(self, obj): a = obj.authors.values_list('full_name') return list(chain.from_iterable(a)) list_display = ('name', 'year', 'author_names') admin.site.register(Books, BooksAdmin) admin.site.register(Author)

Несколько доменов

#python #django

                    
Необходимо чтобы по поддомену выполнялся своё приложение.

Есть site.com, нужно чтобы по main.site.con вызывалось приложение 'apps.views.main'

Попробовал сделать это через middleware:  

class SomeDomainMiddleware(object):
    def process_request(self, request):
         if request.META['HTTP_HOST'] == 'main.site.con':
            return HttpResponseRedirect('/main/')
         else:
            return HttpResponseRedirect('/')


Пробовал через return HttpResponseRedirect(reverse('apps.views.main')), но ругается
что не передал args и kwargs, хотя кроме request там ничего и не нужно.

Пробовал на уровне lighttpd разделить поддомен, но тут тоже проблема, спрашивал тут,
но увы никто не помог.

P.S. не хочется через SITE_ID делать это, так как по сути сайт один, просто приложение
такое себе на поддомене.
    


Ответы

Ответ 1



По перебирал варианты, найдя точки остановок, вывел такой код: class SomeDomainMiddleware(object): def process_request(self, request): if request.META['HTTP_HOST'] == 'main.site.com': if request.META['REQUEST_URI'] == '/': return HttpResponseRedirect('/main/') else: if request.META['REDIRECT_STATUS'] != '200': return HttpResponseRedirect('/') Конструкции request.META['REDIRECT_STATUS'] != '200' и if request.META['REQUEST_URI'] != '/main/' нужны, чтобы были точки остановки, без них редирект будет бесконечным, а точнее то ограниченное чисто рас, сколько сервер разрешит, после чего будет выдано - ничего, как-то так. А эти ограничения говорят нам что редирект уже был и нужно пропустить редирект. Если кто-то имеет элегантнее способ, прошу все же поделится, так как понимаю что мой способ похож на грабли, хотя имеет место на жизнь.

Ответ 2



Можно на поддомен положить свой .wsgi, который будет сразу запускать Ваше приложение. Если нужна какая-то интеграция с основным сайтом, то в .wsgi можно указать другой файл settings, например, subdomain_settings.py, в который импортировать основные settings: from settings import * А затем перекрыть требуемые элементы, например: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'ANOTHER_DB', 'USER': 'ANOTHER_USER', 'PASSWORD': 'ANOTHER_PASS', 'HOST': '127.0.0.1', 'PORT': '', } } MEDIA_ROOT = '/home/user/media' MEDIA_URL = '/media/'

суббота, 11 апреля 2020 г.

Загрузка файлов в Django

#python #django

                    
setting.py

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')


MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 

STATIC_URL = '/static/'


форма

{% csrf_token %} {{ form }}
views.py def uploads(request): if request.method == 'POST': form = upload(request.POST, request.FILES) return HttpResponse(request.FILES['file'].temporary_file_path) else: form = upload() return render_to_response('ff.html', {'form': form}) request.FILES['file'].temporary_file_path должен возвращать путь к временному файлу.В папке media файл отсутствует, а в браузере отображается только знак > в модели формы только поле FileField(). При добавлении в него upload_to в консоли выдается ошибка __init__() got an unexpected keyword argument 'upload_to'


Ответы

Ответ 1



Кратко: файл, загружаемый через форму, необходимо обработать, чего ваша программа не делает. Когда вы загружаете файл, Django сперва помещает его во временно хранилище. Маленькие файл размещаются в памяти, большие — в системной временной директории (на Linux это /tmp/). Пример (UploadFileForm — форма, содержащая поле file типа FileField): def upload_file(request): # Если метод POST if request.method == 'POST': # Заполняем форму полученными данными form = UploadFileForm(request.POST, request.FILES) # Если данные валидны if form.is_valid(): # обрабатываем файл handle_uploaded_file(request.FILES['file']) # перенаправляем на другую страницу return HttpResponseRedirect('/success/url/') # Если другой метод (обычно GET) else: form = UploadFileForm() # Выводим форму загрузки return render_to_response('upload.html', {'form': form}) Перенаправление делают для того, чтобы при обновлении страницы файл не загружался повторно. handle_uploaded_file — функция обработки файла, её нужно писать самому. Пример копирования содержимого полученного файла в файл /srv/media/data.txt: def handle_uploaded_file(f): with open('/srv/media/data.txt', 'wb+') as dest: for chunk in f.chunks(): dest.write(chunk) Нужно использовать chunks, так как копирование по частям меньше нагружает систему. Просто копирование из временной папки тоже не подходит, так как файл может быть загружен в память. Путь, по которому будет сохраняться файл можно сформировать самому из MEDIA_ROOT и имени загруженного файла с помощью os.path.join. Обрабатывать файл можно по-разному. Можно прочитать его содержимое целиком при помощи метода read() или по частям с помощью метода chunks() и что-то с ним сделать. Но чаще всего файл просто сохраняют в какую-либо директорию, где он будет в дальнейшем хранится. Также Django предоставляет удобный способ. Если файл также хранится в модели, то его можно сохранить в указанное место одним вызовом. Для этого в модели вы создаёте поле типа FileField с аргументом upload_to, содержащим путь, по которому будет размёщён файл. Если вы создавали форму на основе модели (то есть, с помощью ModelForm), то достаточно команды form.save() для сохранения файла в указанное место. Также вы сможете загружать файлы через админку. Загрузка файлов в Django

Может ли Apache работать одновременно с php5_module и module_wsgi?

#python #apache #django #freebsd

                    
Добрый день! Можно ли настроить апач таким образом, чтобы он обрабатывал как страницы,
генерируемые php, так и django? Имеются сайты, сделанные на Drupal 7, теперь вот есть
необходимость разработать сайт на Django. Я буду очень признателен за толковые ответы,
которые направят мой мыслительный процесс в правильное русло.

Обновление

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


Ответы

Ответ 1



Подобные вопросы были заданы на англояычных сайтах: раз, два. Там в ответах есть примеры конфигов. Если коротко, то нужно выделить для wsgi определенный путь/алиас, а не отдавать ему на обработку все запросы в иерархии сайта.

Ответ 2



да, конечно, можно загрузить и использовать оба модуля, если под вторым имелся в виду модуль wsgi. обновление по приведённой ссылке, насколько я вижу, не сказано о том, что предлагаемые строки конфигурации надо вносить в отдельный virtualhost. вероятно, имеет смысл дополнить ваш вопрос информацией вида: есть virtualhost такого-то содержания, добавляю virtualhost такого-то содержания и от первого virtualhost-а в логе появились такие-то ошибки.

вторник, 7 апреля 2020 г.

Расскажите, кто как работает в django с формами? [закрыт]

#django

                            
             
                
                    
                        
                            Закрыт. На этот вопрос невозможно дать объективный ответ.
Ответы на него в данный момент не принимаются.
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.
                        
                        Закрыт 4 года назад.
                    
                
        

Добрый день, тут хочу для себя разьяснить что лучше, точнее предпочтительнее, "рисовать"
самому форму или просто воспользоваться from django import forms, а в html просто вывести
{{ form }}, т.к. и ежу понятно, что если у тебя всего пара полей, то можно особо не
выдумывать и вывести через {{ form }}, а если у меня десяток полей, где надо ввести
и числа и строки и сделать выбор из селектов....
    


Ответы

Ответ 1



Возможностей для кастомизации форм довольно много. В forms можно указать нужные виджеты для полей. В темплейтах можно использовать встроенные методы для форм {{ form.as_p }} {{ form.as_table }} Можно обращаться к определенным полям и добавлять их в нужные теги

{{ form.some_field }}

Можно использовать батарейки, как crispy_forms Лучше всего почитать документацию по формам и выбрать что то подходящее для вашей проблемы.

вторник, 31 марта 2020 г.

Oшибка “GET /favicon.ico HTTP/1.1” 404 2255 и как её исправить?

#python #django


При запуске Django сервера и выполнения каких-то действий в логах всплывает ошибка


  "GET /favicon.ico HTTP/1.1" 404 2255


Можете подсказать, из-за чего она возникает, и как её исправить?
    


Ответы

Ответ 1



favicon.ico - это обычно значок сайта во вкладках браузера и при открытии страницы его браузер его пытается запросить (дефолтно). Добавьте в блок вашей страницы следующее: Либо вы можете убрать из логов nginx'а: # skip favicon.ico # location = /favicon.ico { access_log off; return 204; } Такой-же вопрос на английском с развернутым ответом.

пятница, 20 марта 2020 г.

Принцип и работа CSRF в Django

#django


Люди добрые, объясните на пальцах, каким образом работает и как использовать самому CSRF?
Я думал, что подключил middleware, добавил {% csrf_token %} в каждую post-форму +
подвесил context_instance=RequestContext(request) и все, но это счастье выдает 403
- CSRF verification failed. Уже голову сам себе задурил этой ерундистикой, объясните
мне как нубу, что как и куда :)    


Ответы

Ответ 1



Вроде бы все правильно. А попробуй включить не глобально, а оберни нужную вьюху в декоратор django.views.decorators.csrf.csrf_protect Ну и протестируй.

Ответ 2



Иногда, когда надо просто сделать и думать особо не хочется, а тем более копаться, я делаю просто, как в документации. Конкретно у меня так, во вьюхе: from django.core.context_processors import csrf Затем в самой вьюхе, перед тем как передается словарь в обработчик (у меня это делается через декоратор @render_to('template.html'), делаем так: ctx = { 'a': a, 'b': b, } ctx.update(csrf(request)) return ctx Тем самым дополняем наш словарь ctx, чем то, что нам не особо нужно знать. После этого в форму в шаблоне пишем:
{% csrf_token %} ....
Ну и если любопытно, то смотрим исходник, что за зверь это токой и что реально в html-коде страницы сгенерировалось.

Загрузка файлов через админку

#django


Добрый день, имеется модель вида
class Image(models.Model):
    image = models.ImageField(..)
    info = models.TextField(..)

т.е. обычное изображение с каким-то описанием. Заливка производится через админку.
Заливать поштучно - не удобно. Можно ли как-то запилить модель и заливать через админку
сразу по несколько изображений, на примере инлайнов? Желательно без подключения сторонних
js-библиотек :)    


Ответы

Ответ 1



Ну сделайте еще одну модель, типа ImageSet, в Image добавьте ForeignKey на неё, и подключив Inline, - можете заливать сразу кучу картинок.

Ответ 2



Я думаю что лучше всего использовать все-таки библиотеки, т.к они написаны хорошо и имеют хорошее время выполнения! Вот что вам понадобится jQuery Multiple File Upload Plugin v1.31 тута (сам плагин) Query Form Plugin v2.18 тута (Плагин для ajax работы с формами.) jQuery BlockUI Plugin v2.14 тута (для ошибок) ну JQuery найдете сами)) Апишки довольно простые, написать не сложно) Как и что делать дальше можно прочитать вот тута

Ответ 3



Вот в этой книге "Django Разработка веб-приложений на Python", в главе - создание галереи, там подробно всё описано и там как рас применяется метод загрузки одновременно нескольких картинок. Качайте книгу и за 10 минут разберётесь с первоисточника.

четверг, 19 марта 2020 г.

Описание “дерева” Oracle в Django models.py

#oracle #python #дерево #django


Доброго времени суток. Помогите, пожалуйста, со следующим вопросом.
Необходимо описать модель дерева в Django. Используемая БД - Oracle.
Описываю так:
class TelDivisions(models.Model):
    parent = models.ForeignKey('self')
    name = models.CharField(max_length=50, blank=True)
    class Meta:
        db_table = u'tel_divisions'

но таким образом parent ссылается сам на себя. Каким образом сделать так, чтобы он
ссылался на столбец id данной таблицы?
Думал может получиться вот так:
class TelDivisions(models.Model):
    parent = models.ForeignKey(TelDivisions, db_column='id', blank=True)
    name = models.CharField(max_length=50, blank=True)
    class Meta:
        db_table = u'tel_divisions'

но команда python manage.py validate выявила:
parent = models.ForeignKey(TelDivisions, db_column='id', blank=True)
NameError: name 'TelDivisions' is not defined

Что, собственно, логично. Как же быть?
Спасибо.    


Ответы

Ответ 1



Рекомендую Вам использовать django-mtpp. Она была создана как раз для отображения древовидных структур в реляционной модели. А что касается вашего вопроса: parent = models.ForeignKey('self', db_column='id', blank=True) И всё должно заработать. Ссылаться надо на самого себя через self. Данный пример описан в django docs. И ещё одно. Если не укажите null = True, то не сможете создать ни одного корновего экземпляра (т.е. такого, у которого нет родителя). Итого: parent = models.ForeignKey('self', db_column='id', blank=True, null = True) db_column='id' можно не указывать, т.к. он и так будет ссылаться по умолчанию на ключевое поле таблицы, т.е. id.

Ответ 2



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

Реализация представления в Django ORM

#python #orm #django


Здравствуйте.
Как можно реализовать вьюху (представление в mysql) в Django ORM.
Например, есть класс Группы, нам надо вытащить студентов (группы:'студенты', 'преподаватели')
class People:
    name = models.CharField(u'Название', max_length=150)
    describe = models.CharField(u"Описание", max_length=150 )

Т.е. нам надо создать представление для того, чтобы потом связывать с этой моделью
с полем id_stident
class Group_stud:
    id_student = ForeignKey(Student)

Вот модель Student'a нам нужна! 
Как сделать не знаю, в mysql можно было бы создать представление с фильтром и все
было бы гуд, а у нас ORM, так не пойдет. Можно как нибудь такое реализовать?    


Ответы

Ответ 1



Конечно не то, что хотел, но этим можно обойтись. Реализовал с помощью class Manager подсказал @rnd_d class StudentManager(models.Manager): def get_query_set(self): return super(StudentManager, self).get_query_set().filter(groups__name='Students') # в User есть поле groups и идет фильтр по полю name class User(User): students = StudentManager() Выходные данные >>> from main.models import User >>> User.students.all() []

Ответ 2



Related objects reference

Использование шаблонной системы Django

#django


Доброго времени суток!
Подскажите, пожалуйста, возможно ли использовать (если да, то как) в своем cgi-скрипте
шаблонную систему Django. Сам фреймворк установлен.    


Ответы

Ответ 1



Да. Можете. Причём где угодно: >>> from django.template import Template, Context >>> from django.conf import settings >>> settings.configure() >>> t = Template(u'Меня зовут {{ my_name }}.') >>> c = Context({'my_name': 'SkyFox'}) >>> t.render(c) u'Меня зовут SkyFox.' В официальной документации это тоже описано: https://docs.djangoproject.com/en/dev/ref/templates/api/#configuring-the-template-system-in-standalone-mode, но, правда, сложно найти.

Ответ 2



да. ты просто в urls пишешь что тебе надо вернуть файл с разширением cgi, и указываешь вьюху в которой рендришь все что тебе надо. например что-то в таком духе: urlpatterns = patterns('search.views', url(r'^my.js$','my_js',name="my_js"), ) def my_js(request): return render_to_response('search/my.js',{ 'metros':Metro.objects.filter(type=MetroType[0][0]).distinct(), 'towns':BaseModel.objects.values('town').distinct().order_by('town') , } ,mimetype="application/x-javascript")

Разница между двума датами в секундах в Django

#python #django #дата


Хочу получить разницу (в секундах) между двумя датами: текущей и даты, взятой из базы:

models.py:

class Tasks(models.Model):
    dateAdded = models.DateTimeField(auto_now_add=True)


в консоле:

from phone_book.models import Tasks   
this = Tasks.objects.get(id = 50).dateAdded.replace(tzinfo = None)    
import datetime   
now = datetime.datetime.now()    # судя инструкции разница между now и this должна
дать мне необходимую разницу  
delta = now - time  


В результате объект delta возвращает datetime.timedelta(1, 4451, 467165),
у которого есть аргумент seconds, но почему-то в результате delta.seconds выводится
значение 4451, которое значительно отличается от фактической разницы между двумя датами.

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

Спасибо!
    


Ответы

Ответ 1



>>> import datetime >>> a = datetime.datetime.now() >>> a datetime.datetime(2012, 8, 7, 14, 34, 14, 63000) >>> b = datetime.datetime(2012, 8, 7, 14, 50, 00) >>> b datetime.datetime(2012, 8, 7, 14, 50) >>> c = b - a >>> c datetime.timedelta(0, 945, 937000) >>> c.seconds 945 >>> c.seconds / 60 15 вроде верно все

Ответ 2



Используйте USE_TZ=True, чтобы django использовала бы время, включающее информацию о часовой зоне. Иначе, вычитая наивные datetime объекты, вы можете ошибку на тысячи секунд получить (к примеру, в районе перехода на летнее время). Чтобы получить текущее время: from django.utils import timezone now = timezone.now() datetime.now() возвращает наивный datetime объект -- не используйте его. Имея datetime с установленным правильным tzinfo, можно уже напрямую вычитать: now - then.

среда, 18 марта 2020 г.

Макет в несколько столбцов с содержимым разной высоты

#html #css #django


Здравствуйте!

Такая проблема:

Из базы данных приходит список новостей. Каждая новость — это картинка, заголовок
и поясняющий текст. Все новости помещаются в несколько колонок (от 1 до 3 в зависимости
от ширины окна). Все новости одинаковой ширины но разной длинны.

Нужно сверстать примерно такой макет:


При этом нужно сохранить порядок новостей.

И вот не могу придумать, как такое сделать... Очень хочется без js. Используется
django, шаблонизатор родной.

UPD: Если все-таки JS — к сайту прикручен JQuery.
    


Ответы

Ответ 1



А как насчет варианта с таблицами? Внешняя таблица имеет 3 столбца, а в эти столбцы добавляйте содержимое как хочется?

Ответ 2



На форуме htmlbook нашелся еще один вариант: .wrapper { line-height: 1em; columns: 200px auto; -moz-columns: 200px auto; -webkit-columns: 200px auto; break-after: column; } .wrapper div { width: 250px; display: inline-block; background: #303; margin: 10px 20px; vertical-align: top; } .small { height: 200px; } .medium { height: 300px; } .big { height: 350px; }
Пример на jsfiddle Прядок новостей, правда, не сохраняется, но использовать можно. Спасибо zlodeev.

Ответ 3



Почему бы не воспользоваться каким-нибудь css фреймворком? Например, foundation. Вот как это сделать при помощи этого фреймворка:
Блок 1
Блок 4
Блок 7
Блок 2
Блок 5
Блок 8
Блок 3
Блок 6


PyCharm, удалённый проект и окружение.

#python #pycharm #django #ssh #sftp


Всем доброе время суток.
Есть удалённый проект на Django. Я настраиваю PyCharm для работы с ним по SFTP. При
этом изменения в файлах отражаются на сервере (копируются при изменении).
Вопрос. Как мне читать окружение с сервера и запускать проект тоже на сервере?
Например, на сервере есть модуль, который не установлен на локальной машине. Как
мне сделать, чтобы для этого модуля было автодополнение кода и чтобы не ругался на
него? Можно ли сделать, чтобы PyCharm думал, что он на сервере, а не на моей машине.
Так как от SFTP мне на данный момент пользы как кот наплакал (только копирование кода
автоматическое).
Спасибо.    


Ответы

Ответ 1



Для этого существуют Remote Interpreters: http://blog.jetbrains.com/pycharm/2013/03/how-pycharm-helps-you-with-remote-development/ http://www.jetbrains.com/pycharm/quickstart/configuring_interpreter.html#remote_ssh

вторник, 17 марта 2020 г.

ASP.NET MVC или Python Django

#c_sharp #aspnet #mvc #python #django


Добрый вечер. Я собираюсь создать веб приложение с повышенной нагрузкой. И сейчас
у меня стоит выбор инструмента, но определиться я не как не могу. Обе технологии я
знаю на должном уровне, и обе отлично подходят под мою задачу. Скрипт приложения будет
стоять на разных сайтах, получая код из моего скрипта из бд. В качестве базы данных
я буду использовать Postgresql(даже в случае ASP.NET), так как Sql server по началу
в финансах не потяну (но хотелось бы и по этому поводу что-нибудь услышать). В качестве
серверной ОС скорее всего будет использоваться Windows Server 2008 R2(даже в случае
с Python Django), возможно и линукс подобные, пока не решил точно. Подскажите пожалуйста
плюсы и минусы. Спасибо.     


Ответы

Ответ 1



Есть несколько "сравнений", типа этого: http://www.pythondiary.com/blog/Apr.11,2012/comparing-django-aspnet-mvc.html, но конкретики в них мало, да и сравнивать совершенно разные платформы сложно. Точно можно сказать, что windows выйдет дороже. Дороже лицензия, дороже саппорт (Вы же не собираетесь нагруженный проект поддерживать сами вручную?). Абсолютно точно деплой python на винде будет неудобным и глючным (а деплоя asp на линуксе вообще не будет). В остальном - берите то, что лучше знаете, что больше нравится, и для чего лучше представляете себе могущие возникнуть сложности. Хуже нет на большом проекте, чем упереться в неочевидный косяк технологии, которая выбрана маркетологами из-за "низкого ТСО".

Ответ 2



Предложение: python + django (вместе с gunicorn), ngnix, postgresql. ОС - можно хоть убунту взять на первом этапе (несложная настройка). Если опишете задачу подробнее - можно порекомендовать какие-нибудь NoSQL БД (как правило, под конкретную задачу можно выбрать удачное решение).

Ответ 3



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

Как сделать что бы Django распознавал кириллицу?

#django


Если в коде встречается кирилличные символы, или что то задокументировано в кириллице
то выдает ошибку, как это исправить глобально для всего проекта, а не только для одного
документа.    


Ответы

Ответ 1



В начале файла # -*- coding: UTF-8 -*- И использовать юникодные строки: str = u'Моя строка'

Ответ 2



Traceback: File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 114. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in wrapper 432. return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func 52. response = view_func(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py" in inner 198. return view(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapper 29. return bound_func(*args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view 99. response = view_func(request, *args, **kwargs) File "C:\Python27\lib\site-packages\django\utils\decorators.py" in bound_func 25. return func(self, *args2, **kwargs2) File "C:\Python27\lib\site-packages\django\db\transaction.py" in inner 339. return func(*args, **kwargs) File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in change_view 1232. change_message = self.construct_change_message(request, form, formsets) File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in construct_change_message 811. 'object': force_text(added_object)}) File "C:\Python27\lib\site-packages\django\utils\encoding.py" in force_text 108. s = six.text_type(bytes(s), encoding, errors) Exception Type: UnicodeEncodeError at /admin/polls/poll/2/ Exception Value: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)