Цель задачи: необходимо, чтобы вместо "127.0.0.1:8080" можно набить в адресной строке http://test, те http://127.0.0.1:8080=http://test
127.0.0.1 test
. Так вы решите вопрос с именем хоста (test вместо IP 127.0.0.1)docker run --publish 80:8080 ...
- здесь как бы написано: "связать внутренний порт контейнера 8080 с внешним портом хост-машины 80" (в вашем случае вроде как оба порта будут 80, и внутренний, и внешний).и есть html файл который определяет по ссылке какое приложение сейчас используется.
import re
reg = re.compile(rb'([0-9]*)\>([0-9]{4}\-[0-9]{2}\-[0-9]{2}\ [0-9]{2}\:[0-9]{2}\:[0-9]{2}\ \+[0-9]{4})\ (.*)')
with open('1933.log', 'rb') as f:
for s in f:
s = s.strip(b'\r\n')
l = re.split(reg, s)
chunks = [e for e in l if e] # не силён в регулярках, в массиве почему-то оказываются пустые строки
if len(chunks) != 3:
continue
code, datetime, payload = chunks
print(code, datetime, payload)
import datetime
MY_UTC_EPOCH_START = 1262304000 # 00:00:00 01.01.2010 UTC
def my_utcfromtimestamp(ts):
return datetime.datetime.utcfromtimestamp(ts + MY_UTC_EPOCH_START)
datetime.datetime.utcfromtimestamp
, только лишь применяя поправку на начало вашей "UTC эпохи" (полночь 1 января 2010 по Гринвичу):>>> my_utcfromtimestamp(1)
datetime.datetime(2010, 1, 1, 0, 0, 1)
>>> my_utcfromtimestamp(123)
datetime.datetime(2010, 1, 1, 0, 2, 3)
>>> my_utcfromtimestamp(3600)
datetime.datetime(2010, 1, 1, 1, 0)
в нём есть некоторый шаблон, подставляются значения из самой базы
def save_model(self, request, obj, form, change):
r = requests.get(url, stream=True)
r.raw.decode_content = True
obj.image.save(os.path.join('img', '{}.jpg'.format(slugify(unidecode(obj.title)))), r.raw)
obj.save()
os.path.join
формирует путь из директорий и имени файла, но имя отдельно взятой папки или файла им формировать не нужно. from PIL import Image, ImageGrab, ImageFont, ImageDraw
tatras = Image.open("screen.png")
rotated = tatras.rotate(-30, resample=Image.BICUBIC, expand=True)
rotated.save('tatras_rotated.jpg', quality=90)
rotate
(не все фильтры могут быть использованы для операции поворота изображения, BICUBIC вроде самый лучший) и параметрами save
для оптимального "размер-качество".rotated.save('tatras_rotated.png')
Как наиболее просто
freeze_time
число секунд, так будет удобнее хранить в БД и оно удобно конвертируется в/из timedelta, который уже можно прибавлять к datetime
.>>> from datetime import datetime, timedelta, now
>>> begin_date = datetime(2017, 9, 1, 0, 0, 0)
>>> end_date = datetime(2017, 9, 30, 0, 0, 0)
>>> freeze_time = end_date - now()
>>> freeze_time
datetime.timedelta(2, 17264, 411894)
>>> freeze_time.total_seconds()
190064.411894
>>> freeze_time = int(freeze_time.total_seconds())
>>> freeze_time
190064
>>> now() + timedelta(seconds=freeze_time)
datetime.datetime(2017, 9, 30, 0, 1, 1, 371159)
replace
возвращает новую строку. Строго говоря, замена происходит, но только последнего элемента из ngreplacement
.self.tableWidget.setCellWidget(a1, 3, self.Btn)
self.Btn
, которая была где-то предварительно создана, перед вашим циклом. То есть, вы в N ячеек размещаете одну и ту же кнопку, вместо того, чтобы создавать кнопку для каждой строки.self.Btn.clicked.connect(lambda: self.DownloadProcessDef(a1))
SELECT SUM(bonus), nlevel(tree) - nlevel('2.383') AS level
FROM "user"
INNER JOIN "bonus_item"
ON user_from = "user".id
AND user_to = 383
WHERE (tree ~ '2.383.*{0,5}')
AND ("mounth" = '9:2017')
GROUP BY (nlevel(tree) - nlevel('2.383'))
order by nl;
$ pip install virtualenvwrapper
$ export WORKON_HOME=~/Envs
$ source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv my-venv
$ workon my-venv
from django.utils.datastructures import OrderedSet
a = ['Мышь', 'Дом', 'Home', 'Лом', 'a', 'z']
b = ['Мышь', 'Лом', 'z', 'jo']
OrderedSet(a) & OrderedSet(b)
OrderedSet(['Мышь', 'Лом', 'z'])
string = 'foo.bar.test.ru'
length = len(string.split('.'))
print(length)
str
) {% extends 'admin/base_site.html' %}
{% extends 'admin/base_site.html' %}
{% load js_storage %}
{% load admin_static %}
{% load i18n %}
{% load pipeline %}
{% block extrastyle %}
{{ block.super }}
{% stylesheet 'Jcrop' %}
{% stylesheet 'admin-core' %}
{% endblock %}
{% block extrahead %}
{{ block.super }}
{% js_storage_out %}
{% endblock %}
{# Из заголовка удалили конкретную для страницы крошку, оставив только site_title #}
{% block title %}{{ site_title|default:_('Django site admin') }}{% endblock %}
{# Добавили логотип #}
{% block branding %}
<img src="{% static "images/logo_50.png" %}" class="logo" />
{{ block.super }}
{% endblock %}
{# Убрали приветствие пользователя #}
{% block welcome-msg %}
{% endblock %}
{# Убрали ссылку View Site #}
{% block userlinks %}
{% if user.is_active and user.is_staff %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
{% endif %}
{% endif %}
{% if user.has_usable_password %}
<a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
{% endif %}
<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
{% endblock %}
{% block footer %}
{{ block.super }}
{% javascript 'jquery-mousewheel' %}
{% javascript 'js-cookie' %}
{% javascript 'Jcrop' %}
{% javascript 'plupload' %}
{% javascript 'admin-core' %}
{% endblock %}
users
, в нём есть модель user
, и для неё мне нужно кастомизировать шаблон списка объектов, то я создаю файл templates/admin/users/user/change_list.html
и делаю там, что мне нужно{% extends 'admin/change_list.html' %}
{% block extrahead %}
{{ block.super }}
<script type="text/javascript">
var url = js_storage.url_users_user_show_user_password;
(function($) {
$(document).ready(function($) {
$('#result_list td.field-rawpassword').click(function(event){
var $target = $(event.currentTarget);
var user_id = $target.closest('tr').find('td.action-checkbox input[type=checkbox]').val()
if(!$target.data('shown')){
$.get(url, {user_id: user_id}, function(data, status, xhr){
$target.html('<span style="font-family: Monospace">' + data.raw_password + '</span>');
$target.data('shown', true);
});
}
});
});
})(django.jQuery);
</script>
{% endblock %}