Skip to content

Commit

Permalink
install django-cms.
Browse files Browse the repository at this point in the history
EsGeh authored and EsGeh committed Jan 26, 2020
1 parent cfa4849 commit d9f8401
Showing 9 changed files with 193 additions and 32 deletions.
12 changes: 8 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
FROM python:3
FROM python:3.7

ENV PYTHONUNBUFFERED 1
ENV SHELL /bin/bash

# ------------------------------------------
# install necessary packages via apt-get:
# ------------------------------------------
# RUN apt-get update && \
# apt-get install -y --no-install-recommends \
# libsaxonhe-java
# RUN apt-get update && apt-get install -y --no-install-recommends \
# pkg1 \
# pkg2
# ...

# this is supposed to save memory:
# RUN rm -rf /var/lib/apt/lists/*

# ------------------------------------------
# install python dependencies:
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -20,10 +20,28 @@ Experimental implementation. Aims to replace relational database/django by xml t

$ ./scripts/run.py

- Create superuser for django CMS:

$ ./scripts/exec_in_container.py 'python manage.py createsuperuser'

(enter username, etc)

- enter basic CMS pages

in your browser, go to 'http://localhost:8002/admin/cms/page/'. Add 3 pages:
- Introduction (Id: 'introduction')
- Contact (Id: 'contact')
- Imprint (Id: 'imprint')

These are required by the system!

- Import example publication (similar for other publications):

$ ./scripts/exec_in_container.py 'python manage.py publication_import $INPUT_DIR/example'

(you'll need to stop and start the webserver afterwards)

- Stop the Webserver

$ ./scripts/stop.py
@@ -34,4 +52,4 @@ Experimental implementation. Aims to replace relational database/django by xml t

## Other Scripts

- see './scripts'. All scripts accept `--help`.
- see './scripts/'. All scripts accept `--help`.
5 changes: 4 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
Django==2.1.5
pytz==2018.9
psycopg2-binary
psycopg2-binary==2.7.7
lxml == 4.4.2
django-cms == 3.7.1
django-treebeard == 4.3
django-sekizai == 1.1.0

# the xml database
pyexistdb
21 changes: 19 additions & 2 deletions scripts/install.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!/usr/bin/env python3

from utils.settings import BASE_DIR, load_config, create_docker_env_file
from utils.functions import exec_in_xmldb, exec_in_container
from utils.functions import exec_in_xmldb, exec_in_container, run
from stop import stop

from pathlib import Path
import shlex
@@ -130,7 +131,12 @@ def init_sqldb( config ):
parser = ArgumentParser(
description="initialize the repository: create directories, initialize xml database, initialize sql database"
)
parser.parse_args()
parser.add_argument(
"--build",
action = "store_true",
help = "rebuild docker image from Dockerfile",
)
args = parser.parse_args()

# orig_config_file -> env_file:
create_docker_env_file()
@@ -141,4 +147,15 @@ def init_sqldb( config ):
create_dirs( config )

install_xml_db( config )

# rebuild docker image:
if args.build:
run(
env = config,
build = True,
)
stop(
env = config,
)

init_sqldb( config )
21 changes: 1 addition & 20 deletions scripts/run.py
Original file line number Diff line number Diff line change
@@ -4,8 +4,7 @@
from stop import stop

from utils.settings import BASE_DIR, load_config
from utils.functions import exec_in_xmldb

from utils.functions import exec_in_xmldb, run
from pathlib import Path
import subprocess
import shlex
@@ -37,24 +36,6 @@ def init_xml_db( config ):
shlex.split( "docker-compose down" ),
)

def run(
env,
build=False,
cmd=[]
):
if len(cmd) > 0:
# run application
subprocess.call(
shlex.split("docker-compose run webserver") + cmd,
env=env
)
else:
# run application
subprocess.call(
shlex.split("docker-compose up -d") + (["--build"] if build else []),
env=env
)

def copy_dir(src, dst):
print( "'{}' -> '{}'".format( src, dst ) )
if Path(dst).exists():
20 changes: 19 additions & 1 deletion scripts/utils/functions.py
Original file line number Diff line number Diff line change
@@ -3,6 +3,24 @@
import subprocess
import shlex

def run(
env,
build=False,
cmd=[]
):
if len(cmd) > 0:
# run application
subprocess.call(
shlex.split("docker-compose run webserver") + cmd,
env=env
)
else:
# run application
subprocess.call(
shlex.split("docker-compose up -d") + (["--build"] if build else []),
env=env
)

def exec_in_xmldb(
*args,
env=None
@@ -26,7 +44,7 @@ def exec_in_container(
cmd = \
[ "docker-compose", "exec", "webserver", "bash" ]

if len(args) is not 0:
if len(args) != 0:
cmd.append( "-c" )
cmd.append(
reduce(lambda x,y: x + " " + y, args )
39 changes: 37 additions & 2 deletions src/website/settings.py
Original file line number Diff line number Diff line change
@@ -37,16 +37,39 @@
# Application definition

INSTALLED_APPS = [
'djangocms_admin_style', # needed by django cms
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pyexistdb',

# django cms config:
'django.contrib.sites',
'cms',
'menus',
'treebeard',
'sekizai', # cms static files

# main app:
'website'
]

SITE_ID = 1

LANGUAGES = [
('en', 'English'),
('de', 'Deutsch'),
('it', 'Italiano'),
('fr', 'Français'),
]

CMS_TEMPLATES = [
('base.html', 'Home page template'),
]

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
@@ -55,21 +78,33 @@
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',

# needed by django-cms:
'django.middleware.locale.LocaleMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
'cms.middleware.utils.ApphookReloadMiddleware',
]

ROOT_URLCONF = 'website.urls'

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'DIRS': [Path(BASE_DIR, 'website', 'templates'),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# needed by django-cms:
'sekizai.context_processors.sekizai',
'cms.context_processors.cms_settings',
'django.template.context_processors.i18n',
],
},
},
@@ -121,7 +156,7 @@
# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/

LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'en'

TIME_ZONE = 'UTC'

79 changes: 79 additions & 0 deletions src/website/templates/base.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{% load cms_tags menu_tags sekizai_tags staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>{% block title %}Edition Open Access{% endblock title %}</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
{% block metatags %}{% endblock metatags %}
{% block hyperimage %}{% endblock hyperimage %}
<link rel="shortcut icon" href="{% static 'favicon.png' %}"/>
<link rel="apple-touch-icon" href="{% static 'assets/images/favicon-apple.png' %}"/>
<link href="{% static 'app.css' %}" rel="stylesheet"/>
{% render_block "css" %}
</head>
<body>
{% cms_toolbar %}
<div class="page">
<div class="content">
<div class="mobile-header__background"></div>
<header class="header">
<div class="header__content">
<div class="blocklogo container">
<div class="blocklogo__logo">
<a href="{% page_url 'intropage' %}">
<img class="blocklogo__img" src="{% static 'assets/images/logo.png' %}" alt="logo" data-object-fit="cover"/>
</a>
</div>
</div>
<nav class="nav">
<a class="nav-toggle" href="#">
<span class="nav-toggle__item"></span>
<span class="nav-toggle__item"></span>
<span class="nav-toggle__item"></span>
</a>
<div class="nav__wrapper">
<div class="container">
<ul class="nav__menu">
<!-- <li class="nav__item"> -->
{% show_menu 0 100 100 100 %}
<li class="nav__item nav-search" id="nav-search">
<form class="nav-search-form">
<input class="nav-search__input" placeholder="Search" type="search" value="" name="search" id="search"/>
<input class="nav-search__submit" type="submit" value=""/>
</form>
</li>
<li class="nav__item nav-footer">
<a class="nav__link nav-footer__link" href="{% page_url 'contact' %}">Contact</a><a class="nav__link nav-footer__link" href="{% page_url 'imprint' %}">Imprint</a>
</li>
</ul>
</div>
</div>
</nav>
<nav class="breadcrumbs container">
<ul class="breadcrumbs__items">
{% block breadcrumb %}
{% show_breadcrumb %}
{% endblock %}
</ul>
</nav>
</div>
</header>
<!-- <main class="main"> <div class="container"> <div class="main-content"> -->
{% block content %}{% endblock content %}
<!-- </div> </div> </main> -->
</div>
<footer class="footer">
<div class="footer__content">
<div class="footer-menu"><a href="{% page_url 'contact' %}">Contact</a><a href="{% page_url 'imprint' %}">Imprint</a><a class="share" href="#">Share<span>this Page</span></a></div>
<div class="footer-logo"><a href="{{ organisation.homepage }}">
<h2>{{ organisation.name }}</h2></a></div>
</div>
</footer>
</div>
{% block hyperimagebottom %}{% endblock hyperimagebottom %}
<script type="text/javascript" src="{% static 'app.js' %}"></script>
{% render_block "js" %}
</body>
</html>
8 changes: 7 additions & 1 deletion src/website/urls.py
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, re_path, register_converter
from django.urls import path, re_path, register_converter, include
from django.conf.urls.static import static
from django.conf import settings
from . import views
@@ -45,6 +45,12 @@ def to_url(self, value):
),
]

# django cms:
urlpatterns += \
[
re_path(r'^', include('cms.urls')),
]


# This is only needed when using runserver.
if settings.DEBUG:

0 comments on commit d9f8401

Please sign in to comment.