2010-08-19 5 views
0

Вот что я хотел бы сделать, и я хочу знать, как некоторые люди, имеющий опыт работы в этой области сделать это:как реализовать тонкое клиентское приложение с PyQt

С три запроса POST я получаю от сервера HTTP :

  1. виджеты и раскладка
  2. , а затем приложение логики (минимальные)
  3. данные

Или, может быть, это лучше совместить первые два или все три. Я думаю использовать pyqt. Я думаю, что могу загрузить файлы .ui. Я могу анализировать данные json. Я просто думаю, что было бы довольно опасно передавать код по сети, которая будет выполнена на клиенте. Если кто-то может заблокировать соединение или может изменить настройки приложений для доступа к фиктивному серверу, это неприятно.

Я хочу сделать это так, потому что он постоянно обновляет всех клиентов. Это похоже на webapp, но проще из-за Qt. По сути, «тонкое» приложение - это всего лишь минимальный скомпилированный файл python, который загружает данные с сервера.

Как это сделать без возникновения проблем безопасности на клиенте? Достаточно ли https? Есть ли способ заставить pyqt работать в виде песочницы?

PS. Я не застрял на Qt или python. Мне нравится концепция. Я действительно не хочу использовать Java-сервер или клиентскую сторону.

ответ

1

Ваше желание отправить «логику приложения» с сервера на клиент без отправки «кода» само по себе является самопротиворечивым, хотя вы еще не можете этого понять - даже если «логика», которую вы отправляете, находится в некоторый упрощенный ad-hoc «язык» (который вы даже не думаете как язык ;-), во всех смыслах и целях ваш код Python будет , интерпретируя этот этот язык и тем самым выполнять это код. Вы можете в некоторой степени «изолировать» вещи, но, в конце концов, это то, что вы делаете.

Чтобы избежать угонов и других трюков, используйте HTTPS и проверьте сертификат сервера на своем клиенте: это защитит вас от всех проблем, о которых вы беспокоитесь (если кто-то может редактировать приложение достаточно, чтобы победить сертификат HTTPS проверки, они могут редактировать его достаточно, чтобы заставить его запускать любой код, который они хотят, без необходимости отправлять этот код с сервера ;-).

После того, как вы используете https, сервер отправляет модули Python (в исходной форме, если вам нужно поддерживать несколько версий Python на клиентах, иначе байт-код в порядке), и клиент тем самым сохраняет их на диск и импортирует/перезагружает их, будет хорошо. Вы в основном будете делать вариант классической «архитектуры плагинов», где «плагины» фактически отправляются с сервера (вместо того, чтобы быть найденным на диске в определенном месте).

+0

Таким образом, было бы пустой тратой времени, чтобы попробовать реализовать какую-то систему или язык шаблонов, которые будут обрабатываться на стороне клиента, а не выполнять чистый код на Python? Я не хочу, чтобы клиент мог делать такие вещи, как remove(). Даже зная, что это возможно, меня отвлекают. Так как он по сути похож на поведение с webapp, можно ли прикрепить «действия» к виджетам в файле .ui и заставить приложение интерпретировать действия? Я заметил, что в Designer я могу добавить динамические свойства. Могут ли динамические свойства достичь этого? –

+0

@sims, система/язык шаблонов была бы чем-то вроде пустой траты времени, но вы должны использовать существующую («Мако» очень близок к Python и, следовательно, то, что я бы пересчитал, 'jinja2' больше похож на Django, но может быть скомпилирован в код Python и т. Д.) - изобретать колесо не стоит! (Если только ваша настоящая цель - обнаружить, как работают колеса, процитировать Atwood ;-). Тем не менее, шаблоны - это больше о логике вида, чем о бизнес-правилах, используемых в приложении. Что касается проблемы «удалить», решите, какие модели угроз вы защищаете от сумасшедших пользователей? ваши ошибки? & Гр. –

+0

Я беспокоюсь о тонкой возможности угона и т. Д., Как упоминалось выше. Я хочу придерживаться аналогичной позиции для браузеров (IE исключен), чтобы приложение не влияло на ОС хоста и FS. Как я уже упоминал Эйку, я не хочу показывать данные в браузере. Эта часть приложения завершена и работает хорошо. Думаю, я поеду с динамическими свойствами. Думаю, мне просто нужно выяснить, как их читать после загрузки .ui. Видя, что вы гуру-питон, я, вероятно, должен задавать более подробные вопросы в другом месте. Конечно, скажите, пожалуйста, мой подход не сработает или если есть лучший способ. –

1

Использование веб-браузера - это хорошо документированная система, которая делает все, что вы хотите. Также довольно быстро создавать простые графические приложения в браузере. Примеры моих рассуждений:

  • Sage математики среда построены их graphical client как приложение, которое запускается в браузере, а также локальный веб-сервер.

  • Существует проект Pyjamas, который компилирует Python в Javascript. Это ИМХО стоит попробовать.

Edit:

  • Вы можете попробовать PyPy «s sandbox interpreter, как безопасный интерпретатор Python для кода, который был передан по сети.

  • А вот самое простое решение: просто отправьте модули Python по сети, но запишите и/или зашифруйте их. Так работают все дистрибутивы Linux. Вы храните криптографический токен на локальном компьютере. Сервер подписывает/шифрует код перед его отправкой с соответствующим токеном. GPG должен уметь это делать.

+0

Браузер - это минное поле gotchas и медленное время загрузки. Версия webapp для моего приложения предназначена для мобильных телефонов. Я хочу хороший интерфейс для рабочего стола. Я не хочу тратить свое время на браузер. Я реализовал часть приложения как AJAX и классный Dijits и весь этот джаз, и потребовалось ок. В 10 раз дольше, чем простые HTML-формы. Обычные HTML-формы для телефонов, реальные виджеты для рабочего стола. –

+0

У Javascript есть хотя бы рабочий механизм песочницы. В качестве гораздо более простого решения вы можете отправить подписанные куски кода Python, аналогичные тому, что делают дистрибутивы Linux. А потом есть интерпретатор песочницы Pypy. – Eike

+0

Спасибо за информацию о pypy. Я займусь этим. –

Смежные вопросы