Дмитрий Крюков (Parallels): Мы привыкли к тому, что джанга это фулстек фреймворк, который диктует нам достаточно четкую проектную структуру, однако мы же всё же попробуем разрушить этот миф. Поиздеваемся над Django? Превратим его во бутылеподобный фреймворк (Flask, Bottle)? Даешь велосипеды!!!
10. OMG ORM! Failed!
INSTALLED_APPS =(
...
'__main__'
),
Traceback:..
...
django.core.exceptions.ImproperlyConfigured: Unable to detect the app label
for model "Task." Ensure that its module, "__main__", is located inside an
installed app.
11. OMG ORM! Failed!
execute_from_command_line -> django.setup()
if not settings.configured:
settings.configure(
...
)
from django.apps import apps
apps.populate(settings.INSTALLED_APPS)
class Model(models.Model):
...
12. OMG ORM! Successfully!
if not settings.configured:
settings.configure(
...
MIGRATION_MODULES ={'__main__': 'migrations'},
INSTALLED_APPS =(
...
'__main__'
),
)
...
13. Through AppConfig
class App(AppConfig):
label = APP_LABEL
app = App('name', sys.modules[__name__])
...
INSTALLED_APPS=(
app
),
...
class Task(models.Model):
class Meta:
app_label = APP_LABEL
...
14. Through sys.modules
PyCon 2015 David Beazley - Modules and Packages
from types import ModuleType
import django
class Settings(ModuleType):
DEBUG = False
...
sys.modules['settings'] = Settings
os.environ.setdefault( "DJANGO_SETTINGS_MODULE" , "settings")
django.setup()
15. Freedom (- Django ORM)
...
from sqlite3 import dbapi2 as sqlite3
def get_db():
rv = sqlite3.connect('tasks.db', check_same_thread=False)
rv.row_factory = sqlite3.Row
return rv
def view(request):
db = get_db()
cur = db.execute('SELECT * FROM task WHERE task.session_id=$1 order by id desc',
[request.session.session_key, ])
tasks = cur.fetchall()
return JsonResponse({task['id']: {'body': task['body'], 'title': task['title'], 'active':
task['is_active']} for task in tasks})