Go создание веб-приложения с помощью Beego


Оглавление (нажмите, чтобы открыть):

Создаем свое первое веб-приложение при помощи Django

Django — это Open Source фреймворк для создания веб-приложений различной сложности. Одним из основных преимуществ Django является то, что вам нужно позаботиться только о логике вашего будущего приложения, остальное сделает Django.

Мы создадим веб-приложение, у которого будет панель администратора и возможность загружать загадки, а у пользователей, соответственно, возможность отвечать на них. Во время разработки будут использоваться Python 3.4.3 и Django 1.9.1.

Устанавливаем Django

Делается это очень просто, в командной строке нужно написать: pip install Django==1.9.1 .

Создаем проект

Если вы правильно установили Django, то после запуска django-admin —version вы увидите текущую версию фреймворка. Теперь создадим проект. Это можно сделать следующим образом: django-admin startproject django_example .

Как только создание проекта будет завершено, взглянем на директорию нашего проекта:

  • django_example/__init__.py — пустой файл, который говорит Python, что данная директория должна восприниматься в качестве пакета.
  • django_example/settings.py содержит конфигурацию нашего проекта.
  • django_example/urls.py — здесь объявляются URL.
  • django_example/wsgi.py — с помощью него приложение может работать с веб-сервером по протоколу WSGI.
  • manage.py позволяет взаимодействовать с проектом.

Теперь пришло время запустить наше приложение. Для этого в командной строке нужно написать python manage.py runserver . После этого в адресной строке браузера нужно написать: http://127.0.0.1:8000/ . Если вы увидели «You have unapplied migrations; your app may not work properly until they are applied.», то не волнуйтесь, мы вернемся к этому чуть позже.

Создаем приложение

Определим различие между проектом и приложением. Приложение — это программа, которая что-то делает, а проект — это группа приложений.

Итак, приступим к созданию приложения. Это делается следующим образом: python manage.py startapp riddles .
Как только приложение создано, давайте напишем простой вид, по правилам Django все виды должны храниться в файле views.py .

Теперь, чтобы привязать наш вид к URL, создадим файл urls.py .

В urls.py мы должны написать следующее:

Теперь, если мы запустим наше приложение http://127.0.0.1:8000/riddles/ , мы увидим «Hello, World!».

Установка базы данных

По умолчанию в Django используется SQLite, если она вас не устраивает, то вы можете ознакомиться с нашей статьей, в которой мы рассказываем, как безболезненно перейти с SQLite на MySQL.

«Росбанк», Москва, до 60 000 ₽ (до налогов)

Теперь откроем django_example/settings.py и взглянем на переменную INSTALLED_APPS , она хранит все приложения, которые активны в текущем проекте. По умолчанию она содержит:

  • django.contrib.admin — админка, скоро мы ей воспользуемся.
  • django.contrib.auth — система аутентификации.
  • django.contrib.contenttypes — фреймворк для content types.
  • django.contrib.sessions — сессионный фреймворк.
  • django.contrib.messages — фреймворк для отправки сообщений.
  • django.contrib.staticfiles — фреймворк для работы со статичными файлами.

Некоторые из этих приложений используют базы данных, но они еще не установлены, поэтому мы и видели «You have unapplied migrations; your app may not work properly until they are applied.». Поправить это можно следующим образом: python manage.py migrate . Вы должны увидеть следующее:

Теперь создадим нашу модель. Для начала создадим Riddle и Option . В Riddle будет содержаться загадка, в Option — один из возможных ответов на нее.

Данная модель обеспечивает Django информацией, необходимой для создания схемы базы данных и database-access API для доступа к объектам. Теперь нам нужно привязать наше приложение к нашему проекту, делается это следующим образом:

После этого нужно сделать миграцию: python manage.py makemigrations riddles . Вы должны увидеть следующее:

Так мы говорим Django, что в моделях были сделаны некоторые изменения, и их нужно сохранить в качестве миграции.

Проверить, что сделает миграция, можно так: python manage.py sqlmigrate riddles 0001 (0001 — версия миграции, которую мы хотим проверить). На выходе мы получим:

Заметьте, что команда sqlmigrate нужна только для проверки, каждый раз ее запускать необязательно.


Теперь мы можем начать пользоваться панелью администратора. Но для этого нам нужен пользователь. Создать его можно следующим образом: python manage.py createsuperuser . После этого запускаем сервер, если он не запущен, и переходим на http://127.0.0.1:8000/admin/ . Вы увидите следующее:

Теперь дадим админу возможность изменять наши модели. Делается это так:

Вот что получится в итоге:

Возьмите небольшую паузу и поиграйтесь с панелью администратора. Вы будете приятно удивлены тем, что умеет Django.

Главная страница

Что нам нужно для создания главной страницы?

  • Templates: скелет нашей страницы.
  • Views: функция на Python для отображения контента.

Начнем с шаблонов. Создадим папку templates внутри папки riddle , а в ней создадим index.html .

Теперь создадим макет для ответов:

Здесь мы используем csrf_token , он нужен для защиты от межсайтовой подделки запроса, каждая внутренняя форма должна его использовать. Теперь напишем виды для рендеринга наших шаблонов:

Давайте пройдемся по каждой функции отдельно:

  • index: Index использует функцию render . На вход она получает HttpRequest, местонахождение шаблона и его содержимое, а возвращает HttpResponse с окончательным html.
  • detail: Detail делает практически то же самое, но только функция get_object_or_404 возвращает HttpResponse404, если нужный объект не был найден.
  • answer: Answer ищет предоставленную загадку (и возвращает 404, если она не найдена) и проверяет правильность ответа.

Теперь добавим наши функции в urls.py :

Добавим немного стилей

Для начала создадим директорию static , а в ней создадим файл main.css .

Немного изменим наши шаблоны:

Первая строка загружает статические файлы, потом мы используем <% static '#' %>, где # — путь к вашему файлу. Аналогичная процедура проводится и для JavaScript.

Теперь вы можете создавать свои собственные приложения на Django.

Исходный код нашего приложения можно скачать по этой ссылке.

Основы веб-программирования в Go

Особую сферу разработки на Go занимает веб-программирование, которое представляет создание различных веб-приложений, в том числе различных веб-сайтов, веб-сервисов. Изначально Go не предназначался для веб-программирования и более того даже не рассматривался разработчиками в данной роли, и потребовалось некоторое время, прежде чем Go стал применяться в этой области. В то же время это не значит, что Go подойдет для всех веб-проектов. Многие веб-фреймворки содержат кучу готового функционала из коробки, который облегчает создание приложений. В Go подобного нет. Go предоставляет в основном только самые базовые вещи, на основании которых можно строить более сложные конструкции. Go в плане веб-разработки подойдет прежде всего для таких проектов, которые требуют очень высокой производительности, либо когда важны какие-то определенные возможности Go, например, параллельная обработка запросов.

Первое веб-приложение

Основной функционал для создания веб-приложений в Go расположен в пакете net/http . В частности, чтобы запустить веб-приложение, которое могло бы принимать входящие запросы, достаточно вызвать функцию http.ListenAndServe :

Первый параметр указывает, запросы по какому пути будут обслуживаться веб-приложением. Второй параметр определяет обработчик запроса в виде интерфейса Handler. Этот интерфейс определяет функцию ServeHTTP :

Функция ServeHTTP принимает два параметра. Первый параметр — объект ResponseWriter представляет поток ответа, в который мы моем записать любые данные, которые мы хотим отправить в ответ пользователю. Второй параметр — Request инкапсулирует всю информацию о запросе.

Мастер Йода рекомендует:  Как создать видеоплеер на HTML5 с нуля

Например, определим простейшее веб-приложение. Для этого создадим на жестком диске каталог для хранения файлов с исходным кодом на языке Go, допустим, он будет называться golang . И определим в этом каталоге файл server.go со следующим кодом:

В данном случае определен кастомный тип msg на основе типа string, который реализует метод ServeHTTP интерфейса Handler. В самом методе с помощью вызова fmt.Fprint(resp, m) в поток ответа resp пишется сообщение, которое хранится в строке m. Таким образом, пользователю отправляется ответ.


В функции main определяется объект msgHandler:

По сути это строка, но тем не менее этот объект реализует интерфейс Handler.

Далее для обработки запросов передаем этот объект в качестве второго параметра в функцию http.ListenAndServe:

Первый параметр указывает, что веб-приложение будет запускаться по адресу localhost:8181 . Номер порта необязательно должен быть 8181. Это может быть любой незанятый порт.

Часть 2. Разработка Web-приложений

Серия контента:

Этот контент является частью # из серии # статей: Язык программирования go

Этот контент является частью серии: Язык программирования go

Следите за выходом новых статей этой серии.

Вторая статья из данного цикла продолжает знакомить с языком программирования go. В этой статье освещается использование языка go в одном из самых перспективных направлений – Web-программировании. В качестве примера будет описана разработка простейшего Web-сервера, также в статье будут рассматриваться некоторые стандартные пакеты.

Огромное количество разработчиков занимается созданием приложений, основанных на возможностях, предлагаемых компьютерными сетями. К данному типу приложений относятся Web-приложения и клиент-серверные системы, а для их разработки было создано огромное количество всевозможных инструментов. Современные языки и технологии позволяют, используя стандартные и хорошо отлаженные средства, создавать приложения со сложной внутренней структурой. При этом получившаяся структура остается скрытой для программиста, и поэтому от разработчика не требуется высокой квалификации. Подобный подход не означает снижения требований к программистам, а, напротив, предполагает, что опытный специалист сможет создать еще более качественное приложение. На практике же это дает разработчикам шанс не увязнуть в сложной логике приложения. К таким средствам относится и язык go. Хотя за его основу и был взят язык С++, однако у языка go есть свои уникальные черты и возможности. Неполноценная реализация объектно-ориентированной парадигмы делает язык go «средним арифметическим» между языками С и С++. Очевидно создатели не разделяют чаяний индустрии относительно ОО подхода.

Создание Web-сервера

Язык go появился в эпоху Интернет, а в это время любой претендующий на место под солнцем язык программирования должен предоставлять богатые возможности для создания распределенных приложений. Эти средства представлены в go пакетами http, net и websocket, также имеются и пакеты для работы с html и xml. Наличие подобной функциональности говорит о серьезных намерениях языка закрепиться в качестве платформы для разработки корпоративных приложений. Однако отсутствие полноценной поддержки платформы MS Windows может помешать этому.

Web-версия самой известной программы на языке go будет выглядеть следующим образом.

Листинг 1. Простейшее Web-приложение

Перед подробным анализом исходного кода приложения необходимо описать, как собрать и запустить приложение, а также принцип его работы. Для компиляции приведенный выше код необходимо сохранить в файле hello.go и выполнить две команды:

После этого приложение надо запустить и проверить его работоспособность. Для этого потребуется открыть Web-браузер и ввести в его адресной строке URL: localhost:8080. Если все действия были выполнены успешно, то в окне браузера отобразится строка Hello, world. Если же строка не отобразилась, то следует проверить наличие брандмауэра и, если таковой имеется, то разрешить в нем активность на порту 8080. Также причиной ошибки может быть другое приложение, уже запущенное на этом порту.

После успешного запуска примитивного Web-сервера можно переходить к анализу его исходного кода. Функция main является точкой входа в программу, и в ней происходят вызовы двух функций из пакета http. Первый вызов устанавливает обработчик для подключившихся клиентов (функция requestHandler), а вторым вызовом на указанном порту запускается сервер, так что все запросы, поступающие на порт 8080, будут обрабатываться функцией requestHandler. Для этой функции также будет доступен контекст соответствующего запроса в виде объектов http.Request и http.ResponseWriter.

Создание файлового Web-сервера

В примере, представленном в листинге 2, приведен исходный код другого Web-сервера, обладающего большим набором функциональности. На данном варианте Web-сервера можно будет размещать любые файлы, например, HTML-страницы, графические изображения и архивы. Также в примере будет предусмотрена обработка 404-ой ошибки (файл не найден) и поддержка индексного файла. Однако, несмотря на все это, пример не предназначен для использования в «рабочей» среде и поэтому содержит ряд упрощений. Эти упрощения сделаны намеренно для обеспечения ясности кода и уменьшения его объема. Весь Web-сервер состоит из одного файла, приведенного в листинге 2.

Листинг 2. Более сложный вариант Web-сервера

Для работы сервера в домашнем каталоге пользователя следует создать подкаталог goserver и поместить в него файл goserver.go, хотя это и не обязательное требование. Однако имя каталога, в который будет помещен корневой каталог Web-сервера, жестко прописано в коде — это папка $HOME/goserver/www. В каталог www можно сразу поместить файл 404.html, который будет показываться, когда сервер не сможет найти запрашиваемый файл. Это простая HTML-страница, содержимое которой может быть любым, но имя этого файла также жестко прописано в коде программы.

Функция main из листинга 2 является точкой входа в программу. В данной реализации этой функции также вызываются две функции из пакета http, назначение которых уже разбиралось при анализе листинга 1. Вся важная функциональность находится в функции-обработчике requestHandler, которая предназначена для обработки HTTP-запросов. Вторым входным параметром этой функции является переданный клиентом HTTP-запрос. В листинге 3 приведена структура из пакета http, используемая для описания HTTP-запроса.

Листинг 3. Структура, описывающая HTTP-запрос

Как видно, представленная в листинге 3 структура предоставляет доступ ко всем возможностям протокола HTTP, включая удобный доступ к полям формы или передаваемым параметрам запроса. Для передачи этих параметров используется хэш-таблица (ассоциативный массив). Тип данных Header, представляющий заголовки HTTP-запроса, также реализован в виде хэш-таблицы, только для него еще доступны некоторые методы. В примере с Web-сервером в листинге 2 используется только поле RawURL, содержащее URL запрашиваемого файла. На второй строке функции requestHandler при помощи метода Getenv из пакета os берется значение переменной окружения HOME и задается корневой каталог сервера. Пакет os отвечает за кросс-платформенное взаимодействие с функциями операционной системы, например, с файлами (функции Mkdirи Truncate) и переменными окружения (функция Getenv).

На следующей строке объявляется index-файл Web-сервера. Имя этого файла жестко прописано в коде, и хотя это не очень удачное решение с точки зрения дальнейшего сопровождения, оно позволяет несколько упростить код приложения.

После этого выполняется объявление и инициализация двух переменных. Оператор := сам определяет, какого типа выражение находится справа, и устанавливает соответствующий тип для переменной (или переменных), находящихся слева. Такой подход довольно удобен, но поначалу может сбить с толку. В этом же фрагменте демонстрируется, как в языке go выполняется обработка исключительных ситуаций.

Кроме дескриптора файла на этой строке также объявляется переменная err, которой при возникновении исключительной ситуации будет присвоено определенное значение. В отличие от большинства языков программирования в языке go не разрешается объявлять неиспользуемые переменные, иначе возникает ошибка компиляции. Поэтому дальше объявленную переменную обязательно надо где-нибудь использовать. Если она принадлежит к типу Error, то можно просто проверить наличие ошибки. Возникает следующая ситуация: функция возвращает два значения, и программа обязана их принять и каким-то образом обработать. Получается, что язык go просто принуждает программистов создавать приложения с более тщательным подходом к обработке ошибок.

Мастер Йода рекомендует:  Викторина проведет ли компилятор GCC эти оптимизации

Как упоминалось в описании Web-сервера, он способен обработать ситуацию, когда запрашиваемый файл отсутствует, показав вместо него HTML-страницу 404.html. Этот файл лежит в папке www, и его имя просто подставляется вместо запрашиваемого файла. Считается, что ошибка произошла, если значение переменной err отлично от nil. Но это самый простой способ обнаружения ошибок, так как переменная типа Error может принимать множество различных значений в зависимости от типа возникшей исключительной ситуации. Для переменных типа Error также можно вызывать функцию Stiring для получения текстового представления ошибки. В реальном приложении следовало бы отслеживать различные типы ошибок, и каким-то образом записывать информацию в журнальный файл.


Хотя в представленном примере журналирование и не поддерживается, но в стандартной библиотеке языка go имеется пакет log. C помощью этого пакета в приложении можно организовать несложную инфраструктуру для записи происходящих событий. Принцип работы подобного модуля будет следующим:

  1. создается объект типа Logger, через который выполняется настройка параметров системы журналирования: место для хранения файлов и конфигурация конкретного модуля для выполнения журналирования;
  2. далее в коде приложения события регистрируются путем вызова соответствующих методов: простое уведомление (метод Print) или ошибка (методы Fatal и Panic).

В типе File реализованы некоторые стандартные функции, использующиеся при работе с файлами, такие как чтение, запись, смена владельца и т.д. Здесь, также как и в других пакетах, можно заметить ориентацию go на платформу Unix. Это проявляется в наличии методов для выполнения операций, которые встречаются только на Unix-платформах, или в константах, которые также часто встречаются в Unix-системах, например, кодов ошибок.

Для корректной передачи запрашиваемого файла пользователю программе потребуется получить некоторую информацию об этом файле. Для этого используется функция Stat, возвращающая структуру типа FileInfo. Из этой структуры можно получить информацию о размере и о типе файла. Размер файла необходим для создания байтового массива, в который будет записан файл, и в этом случае считывание файла будет выполнено за один проход. Однако можно создать буфер, например, размером в 1024 байт и считывать файл порциями, и зачастую именно такой подход применяется в реальных приложениях, так как большие файлы очень быстро израсходуют память сервера.

Также потребуется информация о типе файла, а конкретно о его MIME-типе. Зная тип файла, Web-браузер пользователя сможет его корректно отобразить. Например, показать в окне, если это HTML-страница, или предложить сохранить на диск, если это архив. Эта информация будет передана в Web-браузер через заголовки HTTP-ответа. В объекте http.ResponseWriter для этого имеется метод SetHeader, в который передаются две строки, соответствующие имени HTTP-заголовка и его значению. Дополнительную информацию о различных типах HTTP-заголовков и их значениях можно получить в Wikipedia.

Для сборки представленного примера лучше воспользоваться специализированными инструментами. В листинге 4 приведен пример make-файла, который будет понятен всем С-программистам, работающим с Unix-платформой.

Листинг 4. Makefile для сборки приложения goserver

Для корректной работы представленного сценария в системе должна быть определена переменная GOROOT. Файлы, подключаемые директивой include, позволяют с помощью нескольких строк кода создавать кросс-платформенный исполняемый код. При создании пакетов потребуется выполнить такие же действия, за исключением того, что необходимо будет подключить другой файл: include $(GOROOT)/src/Make.pkg.

Заключение

Несмотря на свою простоту, приложение, рассмотренное в этой статье, представляет собой достаточно серьезную программу, которая отличается от других Web-серверов, например, Apache и MS IIS только функциональными возможностями. При этом благодаря простоте программирования на языке go и предоставляемым им возможностям, представленный пример вполне можно довести до уровня, на котором приложение будет пригодно к коммерческому использованию. Также создатели языка go утверждают, что если переписать Web-сервер Apache на языке go, то исходного кода получится на порядок меньше, а производительность при этом практически не уменьшится.

Golang

Блог о языке программирования Go

среда, 6 февраля 2020 г.

Веб-приложение на Go: готовое приложение

Вот окончательный код всего нашего вики веб-приложения. Приложение состоит из трех файлов: wiki.go, edit.html. view.html.

Скомпилируйте код и запустите приложение:

При открытии http://localhost:8080/view/ANewPage должна быть показана форма редактирования страницы.

Далее вводим текст, после нажатия «Сохранить» должно быть выполнено перенаправление на вновь созданную страницу.

beego

Я буду использовать Go для создания веб-сервера. Теперь я хочу, чтобы идентификатор сеанса был возвращен пользователю войти с именем пользователя…

Я делаю веб-приложение в beego. Я новичок в обоих go и beego. Я хочу сохранить pdf файл в базе данных…

У меня есть контроллер, скажем XXController из пакета xx. Теперь я хочу, чтобы этот контроллер был вызван как функция, подобная…

Я хочу сгруппировать мои контроллеры в некоторую структуру папок. Приложение работает, если контроллеры находятся непосредственно в папке «контроллеры». Как только…

У меня ниже структура JSON. func getJsonMappings() *string < data := `< «CategoryGroup»: < «Category subgrp1»: [«type1», «type2»], >, «CategoryGroupDetail»…

Я пытаюсь сделать простой запрос POST с помощью VueJS к приложению, которое написано в beego framework (GoLang), но приложение не…

Beego — A Go Web Application Framework

В среде Го разработчиков существует мнение, что всё надо делать на стандртной библиотеке языка. Но, поскольку я новичок, передо мной стоит дилемма — делать на stdlib и убить кучу времени, или облегчить жизнь, взяв фрэймворк. Решил, что сейчас важно как можно скорее начать писать код. Поискав информацию о существующих фрэймворках — выбрал Beego и взял этот курс от Micke Van Sickle.

Что до самого курса, он, как и большинство творений Майка, излишне сложный. Тяжело дался.


Проверяем на практике каково это — менять профессию в зрелом возрасте.

Создаем свое первое веб-приложение при помощи Django

Django — это Open Source фреймворк для создания веб-приложений различной сложности. Одним из основных преимуществ Django является то, что вам нужно позаботиться только о логике вашего будущего приложения, остальное сделает Django.

Мы создадим веб-приложение, у которого будет панель администратора и возможность загружать загадки, а у пользователей, соответственно, возможность отвечать на них. Во время разработки будут использоваться Python 3.4.3 и Django 1.9.1.

Устанавливаем Django

Делается это очень просто, в командной строке нужно написать: pip install Django==1.9.1 .

Создаем проект

Если вы правильно установили Django, то после запуска django-admin —version вы увидите текущую версию фреймворка. Теперь создадим проект. Это можно сделать следующим образом: django-admin startproject django_example .

Как только создание проекта будет завершено, взглянем на директорию нашего проекта:

  • django_example/__init__.py — пустой файл, который говорит Python, что данная директория должна восприниматься в качестве пакета.
  • django_example/settings.py содержит конфигурацию нашего проекта.
  • django_example/urls.py — здесь объявляются URL.
  • django_example/wsgi.py — с помощью него приложение может работать с веб-сервером по протоколу WSGI.
  • manage.py позволяет взаимодействовать с проектом.

Теперь пришло время запустить наше приложение. Для этого в командной строке нужно написать python manage.py runserver . После этого в адресной строке браузера нужно написать: http://127.0.0.1:8000/ . Если вы увидели «You have unapplied migrations; your app may not work properly until they are applied.», то не волнуйтесь, мы вернемся к этому чуть позже.

Создаем приложение

Определим различие между проектом и приложением. Приложение — это программа, которая что-то делает, а проект — это группа приложений.

Итак, приступим к созданию приложения. Это делается следующим образом: python manage.py startapp riddles .
Как только приложение создано, давайте напишем простой вид, по правилам Django все виды должны храниться в файле views.py .

Мастер Йода рекомендует:  Автоматизируем аргументы командной строки на Python с Google Fire

Теперь, чтобы привязать наш вид к URL, создадим файл urls.py .

В urls.py мы должны написать следующее:

Теперь, если мы запустим наше приложение http://127.0.0.1:8000/riddles/ , мы увидим «Hello, World!».

Установка базы данных

По умолчанию в Django используется SQLite, если она вас не устраивает, то вы можете ознакомиться с нашей статьей, в которой мы рассказываем, как безболезненно перейти с SQLite на MySQL.

«Росбанк», Москва, до 60 000 ₽ (до налогов)

Теперь откроем django_example/settings.py и взглянем на переменную INSTALLED_APPS , она хранит все приложения, которые активны в текущем проекте. По умолчанию она содержит:

  • django.contrib.admin — админка, скоро мы ей воспользуемся.
  • django.contrib.auth — система аутентификации.
  • django.contrib.contenttypes — фреймворк для content types.
  • django.contrib.sessions — сессионный фреймворк.
  • django.contrib.messages — фреймворк для отправки сообщений.
  • django.contrib.staticfiles — фреймворк для работы со статичными файлами.

Некоторые из этих приложений используют базы данных, но они еще не установлены, поэтому мы и видели «You have unapplied migrations; your app may not work properly until they are applied.». Поправить это можно следующим образом: python manage.py migrate . Вы должны увидеть следующее:

Теперь создадим нашу модель. Для начала создадим Riddle и Option . В Riddle будет содержаться загадка, в Option — один из возможных ответов на нее.

Данная модель обеспечивает Django информацией, необходимой для создания схемы базы данных и database-access API для доступа к объектам. Теперь нам нужно привязать наше приложение к нашему проекту, делается это следующим образом:

После этого нужно сделать миграцию: python manage.py makemigrations riddles . Вы должны увидеть следующее:

Так мы говорим Django, что в моделях были сделаны некоторые изменения, и их нужно сохранить в качестве миграции.


Проверить, что сделает миграция, можно так: python manage.py sqlmigrate riddles 0001 (0001 — версия миграции, которую мы хотим проверить). На выходе мы получим:

Заметьте, что команда sqlmigrate нужна только для проверки, каждый раз ее запускать необязательно.

Теперь мы можем начать пользоваться панелью администратора. Но для этого нам нужен пользователь. Создать его можно следующим образом: python manage.py createsuperuser . После этого запускаем сервер, если он не запущен, и переходим на http://127.0.0.1:8000/admin/ . Вы увидите следующее:

Теперь дадим админу возможность изменять наши модели. Делается это так:

Вот что получится в итоге:

Возьмите небольшую паузу и поиграйтесь с панелью администратора. Вы будете приятно удивлены тем, что умеет Django.

Главная страница

Что нам нужно для создания главной страницы?

  • Templates: скелет нашей страницы.
  • Views: функция на Python для отображения контента.

Начнем с шаблонов. Создадим папку templates внутри папки riddle , а в ней создадим index.html .

Теперь создадим макет для ответов:

Здесь мы используем csrf_token , он нужен для защиты от межсайтовой подделки запроса, каждая внутренняя форма должна его использовать. Теперь напишем виды для рендеринга наших шаблонов:

Давайте пройдемся по каждой функции отдельно:

  • index: Index использует функцию render . На вход она получает HttpRequest, местонахождение шаблона и его содержимое, а возвращает HttpResponse с окончательным html.
  • detail: Detail делает практически то же самое, но только функция get_object_or_404 возвращает HttpResponse404, если нужный объект не был найден.
  • answer: Answer ищет предоставленную загадку (и возвращает 404, если она не найдена) и проверяет правильность ответа.

Теперь добавим наши функции в urls.py :

Добавим немного стилей

Для начала создадим директорию static , а в ней создадим файл main.css .

Немного изменим наши шаблоны:

Первая строка загружает статические файлы, потом мы используем <% static '#' %>, где # — путь к вашему файлу. Аналогичная процедура проводится и для JavaScript.

Теперь вы можете создавать свои собственные приложения на Django.

Исходный код нашего приложения можно скачать по этой ссылке.

Как запустить / отладить приложение beego с помощью Gogland (go language)

Я использую Gogland (IDE от JetBrains. Версия 1.0 Preview / EAP, 10 февраля 2020 г.) для создания веб-приложения Beego . Я могу запустить его из командной строки с помощью:

Однако, если я запускаю его из IDE со следующей конфигурацией

когда я иду на localhost: 8080 он говорит, что не может найти файл шаблона в пути:

Я думал, что это связано с GOPATH, но потом я понял, что Gogland IDE, вероятно, работает

и когда я проверил бег


из оболочки я получил ту же проблему: не могу найти шаблон.

Я даже пытался запустить команду ‘пчелы’ из IDE. Я частично добился успеха. С этой конфигурацией: Я могу запустить его из IDE, но отладчик не останавливается ни на одной точке останова. IE: я могу только запустить (но не отладить) его из Gogland.

Поэтому мой вопрос — как сделать отладку gogland IDE проектом beego?

3 ответа

Вы не можете изменить IDE для запуска команды bee. Однако вы можете изменить конфигурацию запуска на приложение Go, зайдя в Run | Редактировать конфигурации | + | Зайдите в приложение, выберите тип пакета, затем введите полное имя пакета (например, github.com/dlsniper/demo если основной пакет находится в GOPATH / src / github.com / dlsniper / demo) и убедитесь, что рабочий каталог находится там, где вам нужно это быть. Надеюсь, поможет.

Используйте Delve и конфигурацию удаленной отладки (начните с gogland eap9).

Запустите ваше приложение пчелы, как:

В gogland выполните настройку Go Remote с портом, который вы указали ранее.

Я разрешаю это, установив:

кстати: если у вас есть staticpath, вы также должны использовать абсолютный путь. Например: beego.SetStaticPath(«/static», «/Users/xxx/go/src/xxxx/static»)

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

Go: создание веб-приложения с помощью Beego

719 просмотра

2 ответа

472 Репутация автора

Я разработал приложение с использованием фреймворка Golang Beego ( http://beego.me/ ), и оно уже запущено в производство.

Предположим, я отредактировал файл конфигурации, который называется conf / app.conf, как мое приложение будет перезагружено при перезапуске / перестройке приложения?

Я попытался запустить приложение с помощью команды «bee run», но все еще не увенчался автоматической перезагрузкой.

Ответы (2)

плюса

3435 Репутация автора

Вы можете использовать джин , его очень легко настроить:

gin — это простая утилита командной строки для прямой загрузки веб-приложений Go. Просто запустите gin в каталоге вашего приложения, и ваше веб-приложение будет обслуживаться с gin в качестве прокси. Джин автоматически перекомпилирует ваш код, когда обнаружит изменение. Ваше приложение будет перезапущено при следующем получении HTTP-запроса.

1 плюс

1236 Репутация автора

Вы запускаете приложение с командой, bee run и оно поддерживает конфигурационный файл, как это . bee команда наблюдения за изменением файла по умолчанию по расширению файла. Вы можете видеть из исходного кода var watchExts = []string . Это означает, что bee будет смотреть файл с расширением .go , поэтому при .go изменении файла он будет автоматически перезапущен.

golang beego framework некоректно работает пример шаблонизатора

Зашел на сайт beego документации, Views -> Template Parsing, раздел «Another Aproach», пытаюсь сделать пример из этого раздела. Создал новый проект с помощью bee tool. Что бы не создавать новый controller и router изменил существующий по умолчанию. Файл controller/default.go:

Вообщем сделал все как указано в примере, но когда запустил то ничего не отображалось, отображается через промежутки обновления страницы (нужно обновлять страницу несколько раз, что бы увидеть результат). Проблема в «<>» и «<>» шаблона, не так работают. Это только у меня так или я что-то не так сделал?

Добавить комментарий