Руководство по Python Bottle (Перевод) Часть 5 - Request Data (данные в запросе)

В предыдущей части (Руководство по Python Bottle (Перевод) Часть 4 — Создание контента) мы рассмотрели основные аспекты относящиеся к передаваемому контенту, в этой части мы рассмотрим данные передаваемые в запросах.

Файлы Cookie, HTTP-заголовки, поля HTML форм и другие данные запроса доступны через глобальный объект request. Этот специальный объект всегда ссылается на текущий запрос, даже в многопоточных средах, где одновременно обрабатываются сразу несколько клиентских подключений:

from bottle import request, route, template

@route('/hello')
def hello():
    name = request.cookies.username or 'Guest'
    return template('Привет {{name}}', name=name)


Объект request является подклассом от BaseRequest и имеет очень богатый API для доступа к данным. Здесь будут рассмотрены только наиболее часто используемые функции, этого должно быть достаточно для начала.

Подробнее

Ссылочные локальные переменные в C# 7

Начиная с версии C# 7 в языке появилась возможность, позволяющая объявить локальную переменную, ссылающуюся на элемент массива или на поле в объекте:

int[] simpleArray = {0, 1, 2, 3, 4, 5, 6, 7, 8};
ref int simpleElementRef = ref simpleArray[3];


В примере выше simpleElementRef — ссылка на simpleArray[3]. Изменение simpleElementRef приводит к изменению элемента массива:

simpleElementRef *= 15;
Console.WriteLine(simpleElementRef);      // 15
Console.WriteLine(simpleArray[3]);        // 15


В качестве цели ссылочной локальной переменной может быть указан элемент массива, поле, или обычная локальная переменная. Целью не может быть свойство.

Подробнее

Пример POST запроса через WebRequest C#

Пример POST запроса к сервису с использованием WebRequest на C#:

using System;
using System.Net;
using System.IO;

namespace Tester
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("RUN Tests for Service:");

            //Выполняем тестовый POST запрос к службе.               
            SendTestPostRequest(@"URL - сервиса", "Текст запроса");

            Console.WriteLine("Press any key for exit...");
            Console.ReadKey();
        }

        //Метод выполяющий запрос по указанному адресу и получающий ответ.
        static void SendTestPostRequest(string url, string data)
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.Method = "POST";
                string postData = data;
                request.ContentType = "application/x-www-form-urlencoded";
                System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                byte[] postByteArray = encoding.GetBytes(postData);
                request.ContentLength = postByteArray.Length;

                System.IO.Stream postStream = request.GetRequestStream();
                postStream.Write(postByteArray, 0, postByteArray.Length);
                postStream.Close();
                HttpWebResponse response = (HttpWebResponse) request.GetResponse();
                Console.WriteLine("Response Status Description: " + response.StatusDescription);
                Stream dataSteam = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataSteam);
                string responseFromServer = reader.ReadToEnd();
                Console.WriteLine("Response: " + responseFromServer);
                reader.Close();
                dataSteam.Close();
                response.Close();
            }
            catch(Exception ex)
            {
                //Если что-то пошло не так, выводим ошибочку о том, что же пошло не так.
                Console.WriteLine("ERROR: "+ex.Message);
            }
        }

    }
}
Подробнее

Получаем программно серийный номер на ТСД Cipher 9300 C#

 У терминалов сбора данных Cipher с Windows CE — есть одна особенность, в отличие от всех других ТСД (во всяком случае Motorola(Symbol) и Datalogic) стандартными способами получить серийный номер не получится. Получить то он получится — но будет на всех устройствах одинаковый, что лично меня не устраивает. 

Однако этот глюк можно обойти и получить серийный номер при помощи API с библиотекой SystemApi_Ce_Net.DLL которая поставляется на диске с терминалом.

Ниже маленький примерчик кода — как это сделать:

using Cipherlab.SystemAPI;


int err = 0;

DataType.DataStruct.SYSINFO sysinfo = new DataType.DataStruct.SYSINFO();
            
err = SystemAPI.Function.GetSysInfo(ref sysinfo);

string serial = Encoding.UTF8.GetString(sysinfo.SerialNum,0,sysinfo.SerialNum.Length);


Полагаю комментарии излишни, и так всё достаточно просто и понятно.

Подробнее

Динамический вывод картинок в отчётах Crystal Report на C#

В данной публикации я расскажу каким образом в отчёт Crystal Report можно вывести требуемое количество изображений (например из базы данных).

!!! Для того чтобы публикация была понятна, рекомендуется к обязательному прочтению предыдущая статья Используем Crystal Report в C#.

Собственно, перепробовав много методов (в основном описанных на зарубежных сайтах — в Ру-нете как то не особо изучен этот вопрос), нашёл действительно работоспособный и эффективный метод вывода изображений в отчёт Crystal Report, который заключается в передаче изображений в отчёт через источник данных.

Подробнее

Убираем панель задач на .NET CF 2.0 (делаем Full Screen) C#

Недавно столкнулся с проблемой, что FormWindowState.Maximized не везде работает. Например у меня на одном из устройств с Windows CE 6.0 — отказалось работать, и ни какие танцы с бубнами не помогали. Долго копался в интернете, в русскоязычном ничего не нащёл, набрёл на руководство на одном англоязычном сайте.

Сделал у себя, заработало!

Итак, проблема решается тремя функциями из coredll.dll:

//Отображает тем или иным способом окно (в том числе и скрывает его).
[DllImport("coredll.dll", CharSet = CharSet.Auto)]
public static extern bool ShowWindow(int hwnd, int nCmdShow);

//Делает окно доступным либо недоступным (убрать с экрана либо показать).
DllImport("coredll.dll", CharSet = CharSet.Auto)]
public static extern bool EnableWindow(int hwnd, bool enabled);

//Находит нужное окно по наименованию.
[DllImport("coredll.dll")]
public static extern int FindWindow(string className, string windowName);
Подробнее

Свой сервер и клиент к нему при помощи TcpListener и TcpClient C#

Не так давно, наткнулся на одну статейку на Хабре, по поводу TcpListener — там с его помощью делался Web-сервер. Поскольку есть некоторые задачи требующие создания подобного приложения, было решено изучить вопрос и попробовать воссоздать увиденное. Переписал что было в публикации в приложение (всегда так делаю прежде чем скачать исходник — лучше для понимания) запустил, не работает. Точнее работает но через раз — как то кривенько и для реально рабочего приложения не годится. Скачал исходники — тоже самое, работает но через раз. Здесь работает через раз — означает что клиент то цеплялся то не цеплялся к серверу. Решил изучить вопрос с ноля. Накопал некоторый материал в интернете, всё это переработал — получилось тестовое рабочее приложение.

Начну с того, что я хотел сделать: пример состоит из двух приложений — сервера и клиента. (Мне Web-сервер не особо интересен, хотя пример можно достаточно просто переделать в него.)

Подробнее

Программируем лазерный считыватель на терминалах сбора данных Cipher (9300) C#

Программируем лазерный считыватель на CipherПришло время написать вторую публикацию по программированию считывающих устройств терминалов сбора данных. В этой публикации я приведу пример программирования лазерного считывателя на терминалах Cipher 9300.
Здесь я приведу простой пример создания программы на Windows CE, которая будет работать со считывателем на терминалах Cipher 93XX. В целом, исходный код данной программы будет основан на примерах, которые приведены в руководстве по программированию, но с небольшим своим усовершенствованием. Вообще удивительно, почему те кто составлял руководство и SDK для разработчиков к этому устройству, не озаботились выложить хотя бы парочку рабочих примеров.

Итак, по порядку. Начнём с того что нам потребуется для разработки.

Как я уже говорил, нам потребуется SDK, по сути нам будут нужны 3 библиотеки, две под .NET, и одна для считывателя которая просто должна быть с проектом: Reader_Ce_Net.DLL, SystemApi_Ce_Net.DLL, ReaderDll_CE.dll.

Подробнее

Программируем лазерный считыватель на терминалах сбора данных Motorola (Symbol) C#

Давно хотел написать такое руководство к действию, но как-то всё руки не доходили, и вот наконец написал, всего делов то было…
Любители впихнуть везде и всюду 1С-ку (даже на терминал) с использованием DataWedge (это такая утилита для отправки того что считал сканер в буфер клавиатуры только специализированная для ТСД Symbol) могут дальше не читать, а заниматься и дальше тем что больше нравится. Обращать в свою веру никого не буду :).
Итак, что же я здесь продемонстрирую?.. Я приведу маленький пример того, как задействовать считывающее устройство на терминале сбора данных (Symbol Motorola) из вашего приложения, расскажу что для этого необходимо и приведу пример кода.

Подробнее

Программно отменяем выключение КПК и подсветки в Win Mobile на C#

Наверное многие сталкивались с этой проблемой, когда написанное приложение хорошо и замечательно работает, до тех пор пока КПК не уйдёт в спящий режим. Либо когда необходимо долго не прикасаясь к экрану карманного компьютера хорошо и чётко видеть что у него на экране (в случае например если вы делаете что-то своё для навигации, а почему бы и нет) а устройство спустя секунд 20-30 выключает подсветку экрана. Вот и я столкнулся с такой проблемой и необходимостью заставить устройство не выключаться не при каких условиях, пока я этого не захочу, либо не сядут аккумуляторы.

Подробнее