स्वचालित रूप से उपयोगकर्ता समय क्षेत्र का पता लगाएं

एक आदमी बैठता है, रेडियो सुनता है।
- मॉस्को में आधी रात को, ब्लागोवेश्चेंस्क में सुबह 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 चलानेवाला

लेकिन तुरंत एक और विचार। स्वचालित रूप से निर्धारित समय क्षेत्र के आधार पर, चयन के लिए देशों और शहरों की सूची को छोटा करें। बेशक, एक पूरी सूची प्रदर्शित करने की क्षमता के साथ - चूंकि, सबसे पहले, स्वचालन गलत हो सकता है (यदि, उदाहरण के लिए, उपयोगकर्ता के कंप्यूटर पर समय गलत तरीके से सेट किया गया है), और दूसरी बात, उपयोगकर्ता केवल अस्थायी रूप से किसी अन्य देश या किसी अन्य देश में हो सकता है शहर।

यह तरीका अच्छा है क्योंकि यदि उपयोगकर्ता कुकीज़ स्वीकार नहीं करता है, तो भी उसे जावास्क्रिप्ट का उपयोग करके अपने समय क्षेत्र में समय दिखाया जाएगा। यदि उसके पास कुकीज़ सक्षम है, तो दूसरे पृष्ठ से सर्वर खुद उसे अपनी स्थानीय तारीख देगा।

Source: https://habr.com/ru/post/In102506/


All Articles