Pull to refresh

Таймер на Python Django, или как создать очередной велосипед

После праздника хотелось поделится с вами своим опытом создания веб-приложения на Django. Все началось с того, что год назад познакомился с языком Python и понеслась. По проффесии я не программист, но мне это очень нравится.

Приближался 2016 год и я решил создать одностраничный сайт на Джанго: таймер до нового года здесь Разворачивать среду на ПК небыло желания, поэтому воспользовался сервисом: вот

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

Сразу приведу файл urls.py.

from django.conf.urls import patterns, include, url
<anchor>habracut</anchor>
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'dtny.views.home', name='home'),
    url(r'^dtny', 'dtny.views.dtny', name='dtny'),
)

Таймер


Сначала создадим представление.

from django.shortcuts import render

def dtny(request):
    from datetime import datetime, timedelta 

    ny = datetime(2016, 1, 1) #дата нового года

    now = datetime.now() + timedelta(hours=2) #Поправка, временная зона
    nowformat = str(now).split(".")
    diff = ny – now #вычитаем
    diffformat = str(diff).split(".")
    if diffformat[0] == "0:00:00" or "-" in diffformat[0]: #если нулевое или отрицательное время - поздравляем с новым годом
        context = {"left":"Happy New 2016 Year! " + nowformat[0]}
    else: #если нет- таймер обратного времени
        context = {"left":"Until the New 2016 Year in Ukraine: " + diffformat[0]}
    return render(request, 'dtny.html', context)

Вдогонку содержимое файла dtny.html:

{{left}}

Конечно проще было написать на Джаваскрипт, но хотелось именно серверное время. И тут начинаются проблемы. Страничка отобразила время, но оно не идет, только F5 обновляет данные. На помощь приходит get(). Мы просто будем каждую секунду запрашивать страничку dtny с другой страницы в нашем случае home. Не знаю это нормальная практика или нет, но мне кажется что-то я делаю не так.

function show(){
    $.get("http://danilpetrovich.pythonanywhere.com/dtny", function(data) {
    $("#content").html("<h1> " + data + "</h1>");
    });
}

$(document).ready(function(){
    setInterval("show()",1000);
    }); 

Содержимое index.html

<div id="content" class="snow"></div> 

И добавим немного стиля:

#content {
	  position: fixed; 
        top: 66%;
        left: 50%;
        width: 90%;
        height:50%;
        margin: -15% 0 0 -44%;
    }
h1 {
        font-family: 'Times New Roman', Times, serif;
        font-size: 550%;
        position: fixed;
        top: 35%;
        color: #5C3566;
        text-align:center;
    }
.snow {
        text-shadow:
        white 1px 0px,
        white 1px 1px,
        white 0px 1px,
        white -1px 1px,
        white -1px 0px,
        white -1px -1px,
        white 0px -1px,
        white 1px -1px,
        white 0 0 3px,
        white 0 0 3px,
        white 0 0 3px,
        white 0 0 3px,
        white 0 0 3px,
        white 0 0 3px,
        white 0 0 3px,
        white 0 0 3px;
    }


На этом все. Если можно сделать это логичней и красивей жду ваших решений. В следующей статье хотелось бы рассказать про чат, если это будет интересно.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.