Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2008 06:50:57

Cool-Di
От:
Зарегистрирован: 2008-12-13
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Код моей главной страницы.

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

def index(request):
val = {} #Список, который я буду отправлять на шаблон.
user = request.user
#MainFunc вовзращает различную информацию о пользователе: профайл, новые сообщения, уровень доступа.
userinit = MainFunc(user, FotoCom, ChatCom, Ls, MySiteProfile, request)
user2 = userinit.user2 #Профайл пользователя
val['main'] = userinit #На шаблон, тут Новые Личные сообщения и новые комментарии
news = News.objects.all().order_by('-id') #Новости
#Добавление новостей
if request.method == 'POST':
form = NewsForm(request.POST)
if form.is_valid():
new_news = form.save(commit=False)
new_news.user_id = user.id
new_news.save()
else:
form = NewsForm()
#Проверка условия на наличие 14 лет, зависит какие последние темы форума(или "чат") будут видны
if val['main'].is_big == 1:
val['chat'] = Chat.objects.select_related().all().order_by('-id')[:5]
else:
val['chat'] = Chat.objects.select_related().filter(subsection__age__lt=14).order_by('-id')[:5]
#5 последний фотографий
val['foto'] = Foto.objects.select_related().all().order_by('-id')[:5]
#6 случайных фото
val['random'] = Foto.objects.select_related().all().order_by('?')[:6]
#конкурсы, в поторых началась регистрация
val['contest_reg'] = Contest.objects.select_related().filter(start_date__gte=datetime.datetime.now()).order_by('id')
#добавляет к конкурсам переменную, в которой подсчитывается количество дней до начала
for contest in val['contest_reg']:
contest.days = (datetime.date(contest.start_date.year, contest.start_date.month, contest.start_date.day) - datetime.date.today()).days
#конкурсы которые уже начались
val['contest_start'] = Contest.objects.select_related().filter(start_date__lte=datetime.datetime.now(), finish_date__gte=datetime.datetime.now()).order_by('id')
#пользователи онлайн
val['online'] = MySiteProfile.objects.filter(last_req__gte=datetime.datetime.now() - timedelta(minutes=3)).order_by('-last_req')
#if val['online'].count() > 30:
# val['no_random'] = 1
#количество пользователей посетивших сегодня
val['today'] = MySiteProfile.objects.filter(last_req__gt=datetime.date.today()).count()
return render_to_response('index.html', {'user': user, 'user2': user2, 'news': news, 'form': form, 'val': val})


class MainFunc():
def __init__(self, user, FotoCom, ChatCom, Ls, MySiteProfile, request):
self.supermoder = 0
self.admin = 0
self.moder = 0
self.is_big = 0
self.ip = request.META['REMOTE_ADDR'] #ИП адресс
#проверяет на наличие бана
self.ban = BanList.objects.select_related().filter(userip__ip=self.ip, ban_date__gt=datetime.datetime.now()).count()
if self.ban > 0:
logout(request)
self.ban_mesage = 1 #вывести сообщение о том что забанен
#если юзен не аноним, берем его профайл, и сохраняем вермя последней активности
if not user.username == '':
self.user2 = user.get_profile()
self.user2.last_req = datetime.datetime.now()
self.user2.save()
age = (datetime.date.today() - datetime.date(self.user2.birth_date.year, self.user2.birth_date.month, self.user2.birth_date.day)).days / 365
if (age > 13) and (age < 50):
self.is_big = 1 #нет 14 лет
else:
self.user2 = User2Init() #тут анониму добавляю необходимые переменные, без которых вылазят ошибки
#Количество новых коментов на фото, форуме, ЛС, личном чате
self.newfoto = FotoCom.objects.filter(status=0, foto__profile=self.user2.id).count()
self.newchat = ChatCom.objects.filter(status=0, chat__mysiteprofile=self.user2.id).count()
self.newls = Ls.objects.filter(status=0, touser=self.user2.id).count()
self.newprivate = PrivateCom.objects.filter(status=0, touser=user.id).count()
#назначение прав ползователя
if self.user2.rank == 1:
self.supermoder = 1
self.admin = 1
self.moder = 1
if self.user2.rank == 2:
self.supermoder = 1
self.moder = 1
if self.user2.rank == 3:
self.moder = 1



Офлайн

#2 Дек. 14, 2008 09:43:44

maxp
От:
Зарегистрирован: 2008-07-03
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Код моей главной страницы.

Как-то хочется видеть более структурированный код с более явным разделением по задачам, чтобы определение прав
if self.user.rank
логически не мешалось с выборкой фото и прочих других данных.
Аналогично для if POST .



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version