Не так давно я запустил на Хабре весть об игре Фидо 2. Вполне ожидаемая реакция - за два часа сервер лёг. Но вот чего я не ожидал (да, наивный, верю в человеческую честность), так это такого количества читерских запросов. Они то и положили веб-приложение.
Больше всего народу понравилось закачивать старый злан на файлопомойки, ускорять время и взламывать себе подобных :) Вполне закономерно, что в обновлении я ограничил бонусы от закачки, поставил триггер на проверку продолжительности игрового дня и увеличил защиту атакуемого игрока. Кстати, теперь при атаке, независимо от опыта у атакуемого есть возможность отбится даже без фаервола ;)
Вот так-то.
Исходники в помощь: http://code.google.com/p/fido2/
четверг, 29 мая 2008 г.
понедельник, 26 мая 2008 г.
Django и Google App Engine: шаблоны и статические файлы
В предыдущем посте было рассказано, как создать простейший проект на GAE + Django. Сейчас давайте попробуем подключить к проекту шаблоны Django и поддержку статических файлов - таблиц стилей, скриптов и картинок.
Наш Django проект будет называтся dvk, и содержать приложение main. В папке приложения создаем каталог для шаблонов templates:
Чтобы среда знала, где искать файлы шаблонов, нужно прописать путь в файле настроек проекта settings.py
Теперь можно создать файл шаблона main.html в папке шаблонов. Наш шаблон не будет делать ничего сверх полезного :) Просто скажем браузеру "Hello world!"
Для вывода страницы создадим процедуру-контроллер в файле views.py и привяжем её к обработке запроса главной страницы сайта в urls.py
Теперь можно протестировать наше приложение - dev_appserver.py dvk
Откройте браузер с адресом http://127.0.0.1:8080/ и у вас отобразится "Hello world!" :-)
Чтобы Google App Engine обрабатывал статические файлы, нужно в файле настроек GAE приложения включить в секцию handlers параметр static_dir:
Параметр url указывает, по какому адресу будут доступны файлы, а значение параметра static_dir - имя и расположение папки. В нашем примере она располагается в корне проекта и имеет имя static. Теперь в шаблонах можно обращаться к статическим файлам, например для загрузки таблицы стилей: link href="/static/main.css" type="text/css" rel="stylesheet"
Использованные материалы:
Django on Google App Engine: Templates and static files
Configuring an App
Наш Django проект будет называтся dvk, и содержать приложение main. В папке приложения создаем каталог для шаблонов templates:
dvk/
main.py
app.yaml
dvk/
manage.py
settings.py
urls.py
main/
__init__.py
models.py
views.py
templates/
Чтобы среда знала, где искать файлы шаблонов, нужно прописать путь в файле настроек проекта settings.py
import os
ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
ROOT_PATH + "/main/templates",
)
Теперь можно создать файл шаблона main.html в папке шаблонов. Наш шаблон не будет делать ничего сверх полезного :) Просто скажем браузеру "Hello world!"
Hello world!
Для вывода страницы создадим процедуру-контроллер в файле views.py и привяжем её к обработке запроса главной страницы сайта в urls.py
#dvk/dvk/main/views.py
from django.shortcuts import render_to_response
def index(request):
return render_to_response("main.html")
#dvk/dvk/urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns("",
(r"^$", "dvk.main.views.index"),
)
Теперь можно протестировать наше приложение - dev_appserver.py dvk
Откройте браузер с адресом http://127.0.0.1:8080/ и у вас отобразится "Hello world!" :-)
Чтобы Google App Engine обрабатывал статические файлы, нужно в файле настроек GAE приложения включить в секцию handlers параметр static_dir:
application: dvk
version: 1
runtime: python
api_version: 1
...
handlers:
- url: /static
static_dir: static
...
Параметр url указывает, по какому адресу будут доступны файлы, а значение параметра static_dir - имя и расположение папки. В нашем примере она располагается в корне проекта и имеет имя static. Теперь в шаблонах можно обращаться к статическим файлам, например для загрузки таблицы стилей: link href="/static/main.css" type="text/css" rel="stylesheet"
Использованные материалы:
Django on Google App Engine: Templates and static files
Configuring an App
пятница, 9 мая 2008 г.
Django приложение на Google App Engine в 12 шагов
В этом туториале рассказывается, как создать простое Django приложение с использованием Google App Engine. Предполагается, что у вас уже есть аккаунт в Google App Engine.
1. Для начала нужно зарегистрировать имя приложения в GAE и установить у себя тулкит. Среда Google App Engine работает только с Python 2.5 (2.5.1, 2.5.2). Вместе с Питоном должен быть установлен и Django 0.96 (0.96.1) (.../python/libsite-packages/django).
2. Создайте папку для вашего приложения. Имя и размещение не имеет значения. У меня папка называется "dvk".
3. В папке приложения создайте файл main.py
Этот файл запускается на выполнение, когда пользователь открывает в браузере страницу вашего веб-приложения.
4. Создайте файл app.yaml
Имя приложения естественно подставьте по своему вкусу :)
5. Из папки приложения выполните команду создания нового Django-проекта:
Маленькое замечание: Всего у нас будет 2 папки проектов - папка GAE-проекта и папка Django-проекта внутри неё. Внешний проект выполняет роль обёртки.
В файле настроек Django-проекта settings.py нужно удалить всё, что относиться к настройкам БД, админке, аутентификации и сессиям. Google App Engine не поддерживает модели Django, поэтому эти модули работать не будут.
6. Теперь можно протестировать наше GAE+Django приложение
Откройте браузер с адресом http://127.0.0.1:8080/ и у вас отобразится стандартная страница Django с сообщением It worked!
7. Создайте Django апликейшн в папке Django-проекта.
8. Теперь самое время добавить модель данных. Мы создадим простой класс Visitor, который будет хранить информацию обо всех посетителях сайта.
При добавлении или изменении моделей в Google App Engine не требуется проводить синхронизацию с базой данных. Она выполняется автоматически.
9. Теперь создадим процедуру-контроллер. Она будет записывать в базу данных параметры посетителя нашей веб-страницы и отображать список всех посетителей.
10. В файле диспетчера URL-ов укажем, что наша процедура ответственна за обработку запроса главной страницы сайта.
11. Протестируйте своё приложение открыв окно браузера по адресу http://127.0.0.1:8080/. При каждом обновлении веб-страницы будет добавлятся новая строка и соответственно новый объект Visitor будет записан в БД. GAE также автоматически создает админ-панель приложения - http://127.0.0.1:8080/_ah/admin/
12. Теперь можно заливать наше приложение на GAE: appcfg.py update dvk
При первом выполнении команда попросит авторизироваться.
Использованные материалы:
Running Django on Google App Engine
Django on Google App Engine in 13 simple steps
__________________________________
Мои переводы:
Начинайте бизнес создавая стартап
Интервью Пола Грэма для Found|READ
Как выглядит рабочее место в XXI веке
1. Для начала нужно зарегистрировать имя приложения в GAE и установить у себя тулкит. Среда Google App Engine работает только с Python 2.5 (2.5.1, 2.5.2). Вместе с Питоном должен быть установлен и Django 0.96 (0.96.1) (.../python/libsite-packages/django).
2. Создайте папку для вашего приложения. Имя и размещение не имеет значения. У меня папка называется "dvk".
3. В папке приложения создайте файл main.py
import os, sys
os.environ["DJANGO_SETTINGS_MODULE"] = "dvk.settings"
ROOT_PATH = os.path.dirname(__file__)
sys.path.append(ROOT_PATH)
# Google App Engine imports.
from google.appengine.ext.webapp import util
# Force Django to reload its settings.
from django.conf import settings
settings._target = None
import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher
# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)
def main():
# Create a Django application for WSGI.
application = django.core.handlers.wsgi.WSGIHandler()
# Run the WSGI CGI handler with that application.
util.run_wsgi_app(application)
if __name__ == "__main__":
main()
Этот файл запускается на выполнение, когда пользователь открывает в браузере страницу вашего веб-приложения.
4. Создайте файл app.yaml
application: dvk
version: 1
runtime: python
api_version: 1
handlers:
- url: /static
static_dir: static
- url: /.*
script: main.py
Имя приложения естественно подставьте по своему вкусу :)
5. Из папки приложения выполните команду создания нового Django-проекта:
django-admin.py startproject dvk
Маленькое замечание: Всего у нас будет 2 папки проектов - папка GAE-проекта и папка Django-проекта внутри неё. Внешний проект выполняет роль обёртки.
dvk/
main.py
app.yaml
dvk/
manage.py
settings.py
urls.py
В файле настроек Django-проекта settings.py нужно удалить всё, что относиться к настройкам БД, админке, аутентификации и сессиям. Google App Engine не поддерживает модели Django, поэтому эти модули работать не будут.
6. Теперь можно протестировать наше GAE+Django приложение
cd ..
dev_appserver.py dvk
INFO 2008-04-08 19:08:10,023 appcfg.py] Checking for updates to the SDK.
INFO 2008-04-08 19:08:10,384 appcfg.py] The SDK is up to date.
INFO 2008-04-08 19:08:10,404 dev_appserver_main.py] Running application dvk on port 8080: http://localhost:8080
Откройте браузер с адресом http://127.0.0.1:8080/ и у вас отобразится стандартная страница Django с сообщением It worked!
7. Создайте Django апликейшн в папке Django-проекта.
manage.py startapp main
8. Теперь самое время добавить модель данных. Мы создадим простой класс Visitor, который будет хранить информацию обо всех посетителях сайта.
#.../dvk/dvk/main/models.py
from google.appengine.ext import db
class Visitor(db.Model):
ip = db.StringProperty()
added_on = db.DateTimeProperty(auto_now_add=True)
При добавлении или изменении моделей в Google App Engine не требуется проводить синхронизацию с базой данных. Она выполняется автоматически.
9. Теперь создадим процедуру-контроллер. Она будет записывать в базу данных параметры посетителя нашей веб-страницы и отображать список всех посетителей.
#.../dvk/dvk/main/views.py
from django.http import HttpResponse
from dvk.main.models import Visitor
def main(request):
visitor = Visitor()
visitor.ip = request.META["REMOTE_ADDR"]
visitor.put()
result = ""
visitors = Visitor.all()
visitors.order("-added_on")
for visitor in visitors:
result += visitor.ip + u" visited on " + unicode(visitor.added_on) + u""
return HttpResponse(result)
10. В файле диспетчера URL-ов укажем, что наша процедура ответственна за обработку запроса главной страницы сайта.
#.../dvk/dvk/main/urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns("",
(r"^$", "mashname.main.views.main"),
)
11. Протестируйте своё приложение открыв окно браузера по адресу http://127.0.0.1:8080/. При каждом обновлении веб-страницы будет добавлятся новая строка и соответственно новый объект Visitor будет записан в БД. GAE также автоматически создает админ-панель приложения - http://127.0.0.1:8080/_ah/admin/
12. Теперь можно заливать наше приложение на GAE: appcfg.py update dvk
При первом выполнении команда попросит авторизироваться.
Использованные материалы:
Running Django on Google App Engine
Django on Google App Engine in 13 simple steps
__________________________________
Мои переводы:
Начинайте бизнес создавая стартап
Интервью Пола Грэма для Found|READ
Как выглядит рабочее место в XXI веке
Подписаться на:
Сообщения (Atom)