• Что приходит в браузер?

    deepblack
    @deepblack
    Вот пример того, что возвращает веб сервер:
    HTTP/1.1 200 OK
    Date: Sun, 18 Oct 2009 08:56:53 GMT
    Server: Apache/2.2.14 (Win32)
    Last-Modified: Sat, 20 Nov 2004 07:16:26 GMT
    ETag: "10000000565a5-2c-3e94b66c2e680"
    Accept-Ranges: bytes
    Content-Length: 44
    Connection: close
    Content-Type: text/html
    X-Pad: avoid browser bug
      
    <html><body><h1>It works!</h1></body></html>


    Прямо так, в текстовом виде.
    Можете проверить воспользовавшись telnet (только без использования https), в зависимости от сервера будут отличаться заголовки.

    Вот тут немного подробнее.

    + ознакомьтесь с RFC 2616
    и в догонку Resources and specifications
    Ответ написан
    3 комментария
  • Как покрасить вкладку сайта в мобильном браузере?

    deepblack
    @deepblack
    Вставлять в <head> туда где основной шаблон, от которого наследуются остальные.
    <meta name="theme-color" content="#4285f4" />

    Но куда конкретно его нужно вставить? У меня не WP, а самописная cms, и файлов html нету.

    Откуда тогда генерится шаблон?
    Давайте линк на GitHub, посмотрим код.

    Ваш вопрос выглядит так:

    В нём не видно CSS, который вы приложили.
    5d6b6cd302941853898869.png

    Ответ написан
    Комментировать
  • Как вызвать оповещение в windows 8.1?

    deepblack
    @deepblack Куратор тега Python
    https://stackoverflow.com/a/15921588/2981702
    spoiler
    from win32api import *
    from win32gui import *
    import win32con
    import sys, os
    import struct
    import time
    
    class WindowsBalloonTip:
        def __init__(self, title, msg):
            message_map = {
                    win32con.WM_DESTROY: self.OnDestroy,
            }
            # Register the Window class.
            wc = WNDCLASS()
            hinst = wc.hInstance = GetModuleHandle(None)
            wc.lpszClassName = "PythonTaskbar"
            wc.lpfnWndProc = message_map # could also specify a wndproc.
            classAtom = RegisterClass(wc)
            # Create the Window.
            style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
            self.hwnd = CreateWindow( classAtom, "Taskbar", style, \
                    0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
                    0, 0, hinst, None)
            UpdateWindow(self.hwnd)
            iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
            icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
            try:
               hicon = LoadImage(hinst, iconPathName, \
                        win32con.IMAGE_ICON, 0, 0, icon_flags)
            except:
              hicon = LoadIcon(0, win32con.IDI_APPLICATION)
            flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
            nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
            Shell_NotifyIcon(NIM_ADD, nid)
            Shell_NotifyIcon(NIM_MODIFY, \
                             (self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\
                              hicon, "Balloon  tooltip",msg,200,title))
            # self.show_balloon(title, msg)
            time.sleep(10)
            DestroyWindow(self.hwnd)
        def OnDestroy(self, hwnd, msg, wparam, lparam):
            nid = (self.hwnd, 0)
            Shell_NotifyIcon(NIM_DELETE, nid)
            PostQuitMessage(0) # Terminate the app.
    
    def balloon_tip(title, msg):
        w=WindowsBalloonTip(title, msg)
    
    if __name__ == '__main__':
        balloon_tip("Title for popup", "This is the popup's message")


    или https://github.com/kivy/plyer
    Ответ написан
    2 комментария
  • Несколько сессий в вк, возможно ли?

    deepblack
    @deepblack Куратор тега Python
    возможно ли авторизоваться под несколькими аккаунтами в вк через api

    возможно
    если да, то как

    Вот тут человеку скучно и он решил себя развлечь
    spoiler
    import json
    import vk
    import vk_api
    from captcha import captcha_handler
    
    with open('accounts.json', 'r') as file:
    	data = json.loads(file.read())
    	accounts = data['accounts']
    	zero_id = int(data['zero_id'])
    
    vk_apis = []
    def init_apis():
    	current_id = 0
    	for account in accounts:
    		vk_session = vk_api.VkApi(account['phone'], account['password'], captcha_handler=captcha_handler)
    		vk_session.auth()
    		vk_apis.append(vk_session.get_api())
    		print('account', current_id, 'successfully inited')
    		current_id += 1
    init_apis()


    Сам пробовал реализовывать через несколько классов в Python, но сессия всё равно одна.

    Жаль что я не могу читать код на расстоянии не видя его.
    Ответ написан
  • Отдельный сервер для поддомена?

    deepblack
    @deepblack
    1. Много, часто неограниченно
    2. да
    Ответ написан
    Комментировать
  • Почему не запускается сервер на Django?

    deepblack
    @deepblack
    Уже отвечал, процитирую ответ:
    spoiler

    Имя хоста написано кириллицей и Python 3.4 или старее?
    Windows: socket.gethostbyaddr(name) fails for non-ASCII hostname
    bugs.python.org/issue26227

    • Обновить Python
    • Переименовать хост
    • Либо запускать Django передав ему ip адрес вместо имени хоста python manage.py runserver 127.0.0.1:8000


    UPD:

    я попробовал воспроизвести подобную ошибку в среде Win 10 (в VirtualBox) и у меня получилось только в случае
    если в файле hosts присутствует алиас с кириллицей и локаль Windows русская.
    spoiler

    5cfb3a55d8bd0793644215.png
    5cfb39ec9a939231168766.png


    Если удалить русский, оставив только английский (на русском только интерфейс системы), то всё ок.

    Так-же не удалось воспроизвести ошибку если при запуске указывать ip хоста как 127.0.0.2
    python manage.py runserver 127.0.0.2:8080
    При условии, что в hosts нет алиаса с кириллицей для него.

    На чистой системе (установлены только Python 3.7.2 и Pycharm Community, русская локаль) подобной ошибки нет.

    Заглянул в исходники socket.py и socketmodule.c
    Скорее всего данная особенность связаны с этой частью исходного кода Python на C, а именно PyUnicode_DecodeFSDefault
    #ifdef MS_WINDOWS
        /* Issue #26227: gethostbyaddr() returns a string encoded
         * to the ANSI code page */
        return PyUnicode_DecodeFSDefault(name);
    #else
        /* Decode from UTF-8 */
        return PyUnicode_FromString(name);
    #endif


    Далее, если имя хоста не написано кириллицей и в hosts нет кириллицы следует вывод, что с высокой долей вероятности дело в стороннем софте(антивирус, кривой кряк и т.д.).


    Итак:
    • Обновить Python
    • Переименовать хост
    • Удалить алиас(ы) в файле hosts
    • Проверить сторонний софт (антивирус, кривой кряк и т.д.)
    • Либо запускать Django передав ему ip адрес вместо имени хоста: python manage.py runserver 127.0.0.1:8000
    • Запустить так: python manage.py runserver 127.0.0.2:8000
    Ответ написан
    3 комментария
  • Как называется этот вариант проверки данных?

    deepblack
    @deepblack
    ternary operator и ещё есть null coalescing operator
    Ответ написан
    Комментировать
  • Как при регистрации проверить занято ли имя в файле txt?

    deepblack
    @deepblack
    if( strpos(file_get_contents("./names.txt"),$_GET['user_name']) !== false) {
      // do stuff
    }

    или
    if( exec('grep '.escapeshellarg($_GET['user_name']).' ./names.txt')) {
      // do stuff
    }
    Ответ написан
    Комментировать
  • Как в python работать с Api Яндекса?

    deepblack
    @deepblack Куратор тега Python
    Вот либа с помощью которой это можно сделать, но на самом деле лучше обойтись без неё.
    пример того как это можно использовать:
    spoiler
    import typing
    
    import requests
    
    from yandex_geocoder.exceptions import (
        YandexGeocoderAddressNotFound,
        YandexGeocoderHttpException,
    )
    
    
    class Client:
        """Yandex geocoder API client.
    
        :Example:
            >>> from yandex_geocoder import Client
            >>> Client.coordinates('Хабаровск 60 октября 150')
            ('135.114326', '48.47839')
    
        """
    
        API_URL = "https://geocode-maps.yandex.ru/1.x/"
        PARAMS = {"format": "json"}
    
        @classmethod
        def request(cls, address: str) -> dict:
            """Requests passed address and returns content of `response` key.
    
            Raises `YandexGeocoderHttpException` if response's status code is
            different from `200`.
    
            """
            response = requests.get(
                cls.API_URL, params=dict(geocode=address, **cls.PARAMS)
            )
    
            if response.status_code != 200:
                raise YandexGeocoderHttpException(
                    "Non-200 response from yandex geocoder"
                )
    
            return response.json()["response"]
    
        @classmethod
        def coordinates(cls, address: str) -> typing.Tuple[str, str]:
            """Returns a tuple of ccordinates (longtitude, latitude) for
            passed address.
    
            Raises `YandexGeocoderAddressNotFound` if nothing found.
    
            """
            data = cls.request(address)["GeoObjectCollection"]["featureMember"]
    
            if not data:
                raise YandexGeocoderAddressNotFound(
                    '"{}" not found'.format(address)
                )
    
            coordinates = data[0]["GeoObject"]["Point"]["pos"]  # type: str
            return tuple(coordinates.split(" "))


    По большому счету это весь её код.
    Ответ написан
    Комментировать
  • Как исправить ошибку яндекс карты апи?

    deepblack
    @deepblack
    Выложите пример скрипта который воспроизводит ошибку на codepen.io
    Тогда можно будет что-то сказать конкретное.
    Ответ написан
    1 комментарий
  • Лучший стек для парсинга excel файла с адресами группированными по листам и отображение этих адресов на карте?

    deepblack
    @deepblack
    Тут как минимум две задачи.
    Первая это парсинг excel файла, удобно реализовать на Питоне.
    Вторая это собственно вывод, тут лучше отталкиваться от того, какой стек вам лучше знаком.
    Хотите на js, хотите на Python.
    Ответ написан
  • Вы когда-нибудь встречались с данной ошибкой?

    deepblack
    @deepblack Куратор тега Python
    Python пытается преобразовать байт byte 0x81 в cp1252 и в результате возникает UnicodeDecodeError.
    Потому что его тут нет.
    spoiler
    Python 3.6 использует Unicode API для ввода/вывода в консоль как упомянутый ниже win_unicode_console пакет (подробнее в PEP 528). По умолчанию поддерживаются произвольные Unicode символы. Простой print(unicode_string) теперь работает без установки дополнительного ПО (консольный шрифт, поддерживающий желаемые символы, по прежнему нужно настраивать).

    На границе с Windows-консолью используется Unicode, внутри sys.stdin, sys.stdout, sys.stderr используют utf-8 кодировку. Это может сломать код, который использовал двоичный интерфейс для вывода в консоль и соответственно использовал OEM codepage, к примеру cp866 кодировку. cp866 не совместима с utf-8, можно получить кракозябры в таком случае. Необходимо либо исправить код, чтобы он текст, а не байты в консоль выводил, либо выставить %PYTHONLEGACYWINDOWSIOENCODING% переменную окружения, чтобы старое поведение восстановить.

    https://ru.stackoverflow.com/a/359348/290600

    Это часто под виндой встречается.

    1. Обновите pip, setuptools ,virtualenv до последних версий
    2. Если не поможет, попробуйте Python 3.7.x
    Ответ написан
    Комментировать
  • Можно ли вывести на сайте баланс смарт-контракта?

    deepblack
    @deepblack
    Можно взять этот API: https://github.com/EverexIO/Ethplorer/wiki/Ethplor...

    Пример:
    /getAddressInfo/{address}
    api.ethplorer.io/getAddressInfo/0x32Be343B94f86012...
    spoiler
    {
      "address": "0x32be343b94f860124dc4fee278fdcbd38c102d88",
      "ETH": {
        "balance": 2.0542680760545484
      },
      "countTxs": 2446019,
      "tokens": [
        {
          "tokenInfo": {
            "address": "0x2bdc0d42996017fce214b21607a515da41a9e0c5",
            "name": "SkinCoin",
            "decimals": "6",
            "symbol": "SKIN",
            "totalSupply": "388183000000000",
            "owner": "0x6f2010d0fbaf8b7dbc13ee7252ff8594a2be3c51",
            "lastUpdated": 1566777665,
            "issuancesCount": 0,
            "holdersCount": 4167,
            "image": "https://ethplorer.io/images/skincoin.png",
            "description": "First Universal Cryptocurrency based on Ethereum for instant trading CS:GO, Dota 2 skins, and making bets on eSports events\n\nhttps://skincoin.org\nhttps://www.facebook.com/skincoin/\nhttps://twitter.com/skincoin_org",
            "ethTransfersCount": 29,
            "price": {
              "rate": 0.000476030266457,
              "diff": -11.51,
              "diff7d": -0.26,
              "ts": 1566827043,
              "marketCapUsd": 41978.00690959633,
              "availableSupply": 88183483,
              "volume24h": 1571.26022094368,
              "diff30d": -33.46333000860204,
              "currency": "USD"
            }
          },
          "balance": 186088535060,
          "totalIn": 11474050000,
          "totalOut": 0
        },
        {
          "tokenInfo": {
            "address": "0xa4ec83c8907888d006a37debf755ee39766f38ae",
            "name": "Global Currency Unit",
            "decimals": "18",
            "symbol": "GCU",
            "totalSupply": "88888888000000000000000000000",
            "owner": "0x5d01bad722f5b6856c34851f16a22f7d967c39c5",
            "lastUpdated": 1566825626,
            "issuancesCount": 0,
            "holdersCount": 27547,
            "price": false
          },
          "balance": 2.5e+22,
          "totalIn": 0,
          "totalOut": 0
        }
      ]
    }
    Ответ написан
    1 комментарий
  • Как реализовать нестрогий поиск на php?

    deepblack
    @deepblack
    $search_text = 'лист';
    
    array_filter($array, function($el) use ($search_text) {
            return ( strpos($el['text'], $search_text) !== false );
        });


    https://github.com/loilo/Fuse
    spoiler
    <?php
    require_once 'vendor/autoload.php';
    
    $fuse = new \Fuse\Fuse([
      [
        "title" => "Old Man's War",
        "author" => "John Scalzi"
      ],
      [
        "title" => "The Lock Artist",
        "author" => "Steve Hamilton"
      ],
      [
        "title" => "HTML5",
        "author" => "Remy Sharp"
      ],
      [
        "title" => "Right Ho Jeeves",
        "author" => "P.D Woodhouse"
      ],
    ], [
      "keys" => [ "title", "author" ],
    ]);
    
    $fuse->search('hamil');
    
    /*
    Array
    (
      [0] => Array
        (
          [title] => The Lock Artist
          [author] => Steve Hamilton
        )
      [1] => Array
        (
          [title] => HTML5
          [author] => Remy Sharp
        )
    )
    */
    Ответ написан
    Комментировать
  • Как можно перевести jQuery в javascript?

    deepblack
    @deepblack
    https://gist.github.com/dorokhin/8d47e91676a39c045...
    overapi.com/javascript
    document.querySelector(".button").addEventListener("click", (e) => { /* ... */ });
    /* и т.д. в таком же духе */


    Учите JS и переделывайте, по ссылке можете посмотреть примеры.
    Ответ написан
    Комментировать
  • Как сделать, чтобы форма регистрации и авторизации была на одной странице сайта?

    deepblack
    @deepblack
    Первая ссылка в Google:
    https://stackoverflow.com/a/45599302/2981702

    spoiler
    <!-- Sign In Form -->
    <form>
       <button type='submit' name='submit' value='sign_in'></button>
    </form>
    <!-- Sign Up Form -->
    <form>
       <button type='submit' name='submit' value='sign_up'></button>
    </form>


    #views.py
    def index(request):
        if request.method == "POST":
            if request.POST.get('submit') == 'sign_in':
                # your sign in logic goes here
            elif request.POST.get('submit') == 'sign_up':
                # your sign up logic goes here


    P.S. Вы уж определитесь CBV у вас или FBV.
    Ответ написан
    6 комментариев
  • Как отследить новые сессии Django?

    deepblack
    @deepblack
    Показывайте сообщение всем у кого не установлена cookie, соответственно вместе с просмотром устанавливайте её.
    Ответ написан
    Комментировать
  • Как вывести количество дочитываний статьи в Вордпрессе?

    deepblack
    @deepblack
    Внизу каждой статьи разместить элемент (или привязаться к уже существующему), и на JS проверять его нахождение во viewport,
    если элемент входит во viewport, уведомлять об этом сервер, на кастомный роут.
    + можно дабавить проверку того, сколько пользователь находился на странице (для того чтобы отсеять пролистывание вниз сразу после открытия страницы).
    Т.е. если время чтения материала 9 минут (в среднем), убираем 20-30 % (кто-то может и быстрее читать),
    и далее совмещаем с проверкой нахождения во viewport.

    JavaScript: Is element in viewport?
    /*
    No jQuery necessary.
    Thanks to Dan's StackOverflow answer for this:
    http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
    */
    
    function isElementInViewport(el) {
      var rect = el.getBoundingClientRect();
      return (
        rect.top >= 0 &&
        rect.left >= 0 &&
        rect.bottom <= (window.innerHeight || document. documentElement.clientHeight) &&
        rect.right <= (window.innerWidth || document. documentElement.clientWidth)
      );
    }
    Ответ написан
    Комментировать
  • Почему вылезает ошибка валидности?

    deepblack
    @deepblack
    Причем ошибка появляется что символов больше 50 а именно 51

    Подозреваю что у модели в одном из полей указано max_length=50

    CharField.max_length
    The maximum length (in characters) of the field. The max_length is enforced at the database level and in Django’s validation using MaxLengthValidator.

    UPD 1
    models.CharField(max_length=50, db_index=True)
    как я и предполагал.
    UPD 2
    И можно решить эту проблему не убирая max_length или не делая max_length=None

    Насчёт базы данных надо или нет но использую sqllite

    Т.к. в SQLite VARCHAR не имеет ограничения по длине, и технически можно обойти ограничение в Django переопределив атрибуты TextInput
    class MyCustomForm(forms.ModelForm):
    
        var1 = forms.CharField(
            widget=forms.TextInput(attrs={
                # override/add custom HTML attributes in this dictionary
                'maxlength': '70',
            })
        )


    Но это плохое решение.
    Ответ написан
  • Как ограничить скачивание документов в ВК. Сделать доступными только для подписчиков?

    deepblack
    @deepblack
    Нет.
    К документам доступ для всех, они видны в поиске и доступны по ссылке.
    Ответ написан
    1 комментарий