- рдореЙрд╕реНрдХреЛ рдореЗрдВ рдЖрдзреА рд░рд╛рдд рдХреЛ, рдмреНрд▓рд╛рдЧреЛрд╡реЗрд╢реНрдЪреЗрдВрд╕реНрдХ рдореЗрдВ рд╕реБрдмрд╣ 6 рдмрдЬреЗ, рд╡реНрд▓рд╛рджрд┐рд╡реЛрд╕реНрддреЛрдХ рдореЗрдВ 7 рдмрдЬреЗ, рдЦрд╛рдмрд░реЛрд╡рд╕реНрдХ, рдпрд╛рдЬрд╝реНрдиреЛ-рд╕рдЦрд╛рд▓рд┐рдВрд╕реНрдХ, рдордЧрд╛рджрд╛рди рдореЗрдВ 8 рдШрдВрдЯреЗ, рдФрд░ рдкреЗрдЯреНрд░реЛрдкрд╛рд╡рд▓реЛрд╡реНрд╕реНрдХ-рдХрд╛рдордЪреИрдЯрд╕реНрдХреА рдореЗрдВ 9 рдШрдВрдЯреЗред
рдПрдХ рдЖрджрдореА рдмреИрдарддрд╛ рд╣реИ, рдмреИрдарддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдарддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЕрдлрд╕реЛрд╕ рдХреЗ рд╕рд╛рде рдХрд╣рддрд╛ рд╣реИ:
- рдУрд╣, рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рджреЗрд╢ рдореЗрдВ рдПрдХ рдЧрдбрд╝рдмрдбрд╝!
рдкрд╛рда рдХреЛ рдордпрдВрдХ рдХреЙрд▓рдЧрд┐рди рдХреА рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП: рдкреЗрдЯреНрд░реЛрдкрд╛рд╡рд▓реЛрд╡реНрд╕реНрдХ-рдХрд╛рдордЪрддреНрд╕реНрдХреА рдореЗрдВ, рдЕрдм рдпреВрдЯреАрд╕реА +11 (рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдпреВрдЯреАрд╕реА + 12 рдореЗрдВ), рдЗрд╕рд▓рд┐рдП рдЕрдм рдордзреНрдпрд░рд╛рддреНрд░рд┐ рдорд╛рд╕реНрдХреЛ рд╕рдордп рдореЗрдВ 9 рдирд╣реАрдВ рдмрд▓реНрдХрд┐ 8 рдШрдВрдЯреЗ рд╣реЛрдВрдЧреЗред
рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЬреАрдПрдордЯреА рд╕рдордп, рд╕рд░реНрд╡рд░ рд╕рдордп рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЕрдХреНрд╕рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА рд╕реЗ рдЕрдкрдирд╛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдЪреБрдирдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЕрд╡рд╕рд░ рд╕реБрдЦрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рд╕рд╛рдЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдмрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UTC рд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╕рдордп рдФрд░ рдЗрдВрдбреЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ XMLHttpRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рд░реНрд╡рд░ рдХреЛ рдпрд╣ рдЗрдВрдбреЗрдВрдЯ рдкрд╛рд╕ рдХрд░реЗрдВред
рдЖрдЧреЗ рдмрдврд╝реЛ, рдХреЛрд╢рд┐рд╢ рдХрд░реЛ
рдПрдХ рдирдпрд╛ Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдЪрд▓реЛ рдЗрд╕реЗ рдЯреИрдк - рдЯрд╛рдЗрдордЬрд╝реЛрди рдкреНрд░рдпреЛрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╣рддреЗ рд╣реИрдВред
django-admin startproject рдЯреИрдк рдХрд░реЗрдВ
рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛрдбрд╝реЗрдВред
рд╕реАрдбреА рдЯреЗрдк /
рдЕрдЬрдЧрд░ рдкреНрд░рдмрдВрдзрди рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛
рдЕрдм рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
рдЖрдпрд╛рдд os
SITE_ROOT = os.path.dirname (os.path.realpath (__ file__))
рдЕрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
TEMPLATE_DIRS = (
os.path.join (SITE_ROOT, 'рдЯреЗрдореНрдкреНрд▓реЗрдЯ'),
)
рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
INSTALLED_APPS = (
'Django.contrib.auth',
'Django.contrib.contenttypes',
'Django.contrib.sessions',
'Django.contrib.sites',
'Django.contrib.messages',
# рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рд░рджреНрдж рдХрд░реЗрдВ:
# 'django.contrib.admin',
'Whattimeisit',
)
рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднреА рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ:
DATABASES = {
'рдбрд┐рдлрд╝реЙрд▓реНрдЯ': {
'рдЗрдВрдЬрди': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3 рдпрд╛' oracle 'ред
рдпрджрд┐ 'sqlite3' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ 'NAME': 'database', # рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдкрдеред
}
}
рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рд╣рдордиреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред
mkdir рдЯреЗрдореНрдкреНрд▓реЗрдЯ /
рдФрд░ syncdb рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
python manage.py syncdb
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, index.html рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдПрдВред
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<script type="text/javascript" src="/static/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var time_zone = (new Date().getTimezoneOffset()/60)*(-1);
var dateoffset = time_zone*60*60*1000;
$('span.please_parse').each(function() {
var date = new Date($(this).text());
date.setTime(date.getTime() + dateoffset);
$(this).text(date.toLocaleString());
});
$.post('/please_set_timezone', { 'offset': time_zone });
});
</script>
</head>
<body>
<p>
{% if local_time %}
<b>{{ local_time }}</b>.
{% else %}
<b><span class="please_parse">{{ time }}</span></b>.
{% endif %}
</p>
</body>
</html>
рдЕрдм рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╛рдЗрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВред
mkdir рдореАрдбрд┐рдпрд╛ /
urls.py рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
from django.conf.urls.defaults import *
import os
from settings import SITE_ROOT
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^tep/', include('tep.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)),
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(SITE_ROOT, 'media')}),
(r'^$', 'whattimeisit.views.index'),
(r'^please_set_timezone$', 'whattimeisit.views.please_set_timezone'),
)
рдЖрдкрдХреЛ jQuery рдХреЛ рдореАрдбрд┐рдпрд╛ / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ jquery-1.4.2.min.js рдХреЛ рдмрдЪрд╛рдпрд╛ред
рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ view.py
# Create your views here.
from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response
from datetime import datetime
from datetime import timedelta
def please_set_timezone(request):
if request.is_ajax():
timezone_offset = request.POST.get('offset', False)
if timezone_offset:
request.session['timezone_offset'] = timezone_offset
message = "OK"
return HttpResponse(message)
return HttpResponseRedirect(reverse('whattimeisit.views.index'))
def index(request):
time = datetime.utcnow()
timezone_offset = request.session.get('timezone_offset', False)
if timezone_offset:
offset = timedelta(hours=int(timezone_offset))
local_time = time+offset
local_time_string = local_time.strftime("%d.%m.%Y %H:%M:%S")
else:
local_time_string = False
time_string = time.strftime("%m/%d/%Y %H:%M:%S")
return render_to_response("index.html", {'time': time_string, 'local_time': local_time_string,})
рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рдЖрдк рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЬрдЧрд░ рдкреНрд░рдмрдВрдзрди Oracle рдЪрд▓рд╛рдиреЗрд╡рд╛рд▓рд╛
рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЪрдпрди рдХреЗ рд▓рд┐рдП рджреЗрд╢реЛрдВ рдФрд░ рд╢рд╣рд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЫреЛрдЯрд╛ рдХрд░реЗрдВред рдмреЗрд╢рдХ, рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде - рдЪреВрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрд╡рдЪрд╛рд▓рди рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕рдордп рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рджреЗрд╢ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рджреЗрд╢ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╢рд╣рд░ред
рдпрд╣ рддрд░реАрдХрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдХреАрдЬрд╝ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рднреА рдЙрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдордп рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреБрдХреАрдЬрд╝ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдкреГрд╖реНрда рд╕реЗ рд╕рд░реНрд╡рд░ рдЦреБрдж рдЙрд╕реЗ рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп рддрд╛рд░реАрдЦ рджреЗрдЧрд╛ред