Statistics
| Branch: | Tag: | Revision:

root / snf-webproject / docs / index.rst @ 693bebea

History | View | Annotate | Download (10.3 kB)

1 e609b1ba Vangelis Koukis
.. _snf-webproject:
2 e609b1ba Vangelis Koukis
3 e609b1ba Vangelis Koukis
Component snf-webproject
4 dbe32d94 Vangelis Koukis
========================
5 e609b1ba Vangelis Koukis
6 25762387 Kostas Papadimitriou
synnefo component :ref:`snf-webproject <snf-webproject>` defines a Django 
7 25762387 Kostas Papadimitriou
project in which the various other synnefo components
8 b1996c81 Kostas Papadimitriou
(:ref:`snf-cyclades-app <snf-cyclades-app>`,
9 99644884 Vangelis Koukis
:ref:`snf-pithos-app <snf-pithos-app>`, etc.) may run.
10 99644884 Vangelis Koukis
11 99644884 Vangelis Koukis
It provides a standard mechanism for every synnefo software component to modify
12 99644884 Vangelis Koukis
the list of Django apps to be executed inside the project (``INSTALLED_APPS``),
13 99644884 Vangelis Koukis
modify the list of middleware classes (``MIDDLEWARE_CLASSES``) and add its own
14 99644884 Vangelis Koukis
URL patterns.
15 99644884 Vangelis Koukis
16 99644884 Vangelis Koukis
.. todo:: Document snf-webproject facilities for developers
17 99644884 Vangelis Koukis
18 99644884 Vangelis Koukis
Package installation
19 99644884 Vangelis Koukis
--------------------
20 99644884 Vangelis Koukis
21 99644884 Vangelis Koukis
.. todo:: kpap: verify instructions for installation from source.
22 99644884 Vangelis Koukis
23 99644884 Vangelis Koukis
Use ``pip`` to install the latest version of the package from source,
24 99644884 Vangelis Koukis
or request a specific version as ``snf-webproject==x.y.z``.
25 99644884 Vangelis Koukis
26 99644884 Vangelis Koukis
.. code-block:: console
27 99644884 Vangelis Koukis
28 4c099520 Kostas Papadimitriou
   pip install snf-webproject -f https://docs.dev.grnet.gr/pypi
29 99644884 Vangelis Koukis
30 99644884 Vangelis Koukis
On Debian Squeeze, install the ``snf-webproject`` Debian package.
31 99644884 Vangelis Koukis
32 99644884 Vangelis Koukis
Package configuration
33 99644884 Vangelis Koukis
---------------------
34 99644884 Vangelis Koukis
35 dbe32d94 Vangelis Koukis
Database
36 dbe32d94 Vangelis Koukis
********
37 dbe32d94 Vangelis Koukis
38 dbe32d94 Vangelis Koukis
You need to create a database for use by the Django project,
39 dbe32d94 Vangelis Koukis
then configure your custom :ref:`snf-common <snf-common>` settings,
40 dbe32d94 Vangelis Koukis
according to your choice of DB.
41 dbe32d94 Vangelis Koukis
42 dbe32d94 Vangelis Koukis
DB creation
43 dbe32d94 Vangelis Koukis
```````````
44 dbe32d94 Vangelis Koukis
45 dbe32d94 Vangelis Koukis
SQLite
46 dbe32d94 Vangelis Koukis
~~~~~~
47 dbe32d94 Vangelis Koukis
Most self-respecting systems have ``sqlite`` installed by default.
48 dbe32d94 Vangelis Koukis
49 dbe32d94 Vangelis Koukis
50 dbe32d94 Vangelis Koukis
MySQL
51 dbe32d94 Vangelis Koukis
~~~~~
52 dbe32d94 Vangelis Koukis
MySQL must be installed first:
53 dbe32d94 Vangelis Koukis
54 dbe32d94 Vangelis Koukis
.. code-block:: console
55 dbe32d94 Vangelis Koukis
56 dbe32d94 Vangelis Koukis
    # apt-get install libmysqlclient-dev
57 dbe32d94 Vangelis Koukis
58 dbe32d94 Vangelis Koukis
if you are using MacPorts:
59 dbe32d94 Vangelis Koukis
60 dbe32d94 Vangelis Koukis
.. code-block:: console
61 dbe32d94 Vangelis Koukis
62 dbe32d94 Vangelis Koukis
    $ sudo port install mysql5
63 dbe32d94 Vangelis Koukis
64 dbe32d94 Vangelis Koukis
.. note::
65 dbe32d94 Vangelis Koukis
66 dbe32d94 Vangelis Koukis
    On MacOSX with Mysql install from MacPorts the above command will
67 dbe32d94 Vangelis Koukis
    fail complaining that it cannot find the mysql_config command. Do
68 dbe32d94 Vangelis Koukis
    the following and restart the installation:
69 dbe32d94 Vangelis Koukis
70 dbe32d94 Vangelis Koukis
    .. code-block:: console
71 dbe32d94 Vangelis Koukis
72 dbe32d94 Vangelis Koukis
       $ echo "mysql_config = /opt/local/bin/mysql_config5" >> ./build/MySQL-python/site.cfg
73 dbe32d94 Vangelis Koukis
74 dbe32d94 Vangelis Koukis
Configure a MySQL db/account for the Django project:
75 dbe32d94 Vangelis Koukis
76 dbe32d94 Vangelis Koukis
.. code-block:: console
77 dbe32d94 Vangelis Koukis
78 dbe32d94 Vangelis Koukis
    $ mysql -u root -p;
79 dbe32d94 Vangelis Koukis
80 dbe32d94 Vangelis Koukis
.. code-block:: mysql
81 dbe32d94 Vangelis Koukis
82 dbe32d94 Vangelis Koukis
    CREATE DATABASE <database name>;
83 dbe32d94 Vangelis Koukis
    SHOW DATABASES;
84 dbe32d94 Vangelis Koukis
    GRANT ALL ON <database name>.* TO <db username> IDENTIFIED BY '<db password>';
85 dbe32d94 Vangelis Koukis
86 dbe32d94 Vangelis Koukis
.. warning::
87 dbe32d94 Vangelis Koukis
        MySQL *must* be set in ``READ-COMMITED`` mode, e.g. by setting:
88 dbe32d94 Vangelis Koukis
89 dbe32d94 Vangelis Koukis
   .. code-block:: ini
90 dbe32d94 Vangelis Koukis
   
91 dbe32d94 Vangelis Koukis
      transaction-isolation = READ-COMMITTED
92 dbe32d94 Vangelis Koukis
               
93 dbe32d94 Vangelis Koukis
   in the ``[mysqld]`` section of :file:`/etc/mysql/my.cnf`.
94 dbe32d94 Vangelis Koukis
95 dbe32d94 Vangelis Koukis
   Alternatively, make sure the following code fragment stays enabled
96 dbe32d94 Vangelis Koukis
   in your custom settings, e.g., in :file:`/etc/synnefo/10-database.conf`:
97 dbe32d94 Vangelis Koukis
       
98 dbe32d94 Vangelis Koukis
   .. code-block:: python
99 dbe32d94 Vangelis Koukis
   
100 dbe32d94 Vangelis Koukis
       if DATABASES['default']['ENGINE'].endswith('mysql'):
101 dbe32d94 Vangelis Koukis
           DATABASES['default']['OPTIONS'] = {
102 dbe32d94 Vangelis Koukis
                   'init_command': 'SET storage_engine=INNODB; ' +
103 dbe32d94 Vangelis Koukis
                       'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
104 dbe32d94 Vangelis Koukis
           }
105 dbe32d94 Vangelis Koukis
   
106 dbe32d94 Vangelis Koukis
PostgreSQL
107 dbe32d94 Vangelis Koukis
~~~~~~~~~~
108 dbe32d94 Vangelis Koukis
109 dbe32d94 Vangelis Koukis
You need to install the PostgreSQL binaries, e.g., for Debian:
110 dbe32d94 Vangelis Koukis
111 dbe32d94 Vangelis Koukis
.. code-block:: console
112 dbe32d94 Vangelis Koukis
	     
113 dbe32d94 Vangelis Koukis
    # apt-get install postgresql-8.4 libpq-dev
114 dbe32d94 Vangelis Koukis
115 dbe32d94 Vangelis Koukis
or ir you are using MacPorts:
116 dbe32d94 Vangelis Koukis
117 dbe32d94 Vangelis Koukis
.. code-block:: console
118 dbe32d94 Vangelis Koukis
119 dbe32d94 Vangelis Koukis
    $ sudo port install postgresql84
120 dbe32d94 Vangelis Koukis
121 dbe32d94 Vangelis Koukis
To configure a postgres db/account for synnefo,
122 dbe32d94 Vangelis Koukis
123 dbe32d94 Vangelis Koukis
*  Become the postgres user, connect to PostgreSQL:
124 dbe32d94 Vangelis Koukis
125 dbe32d94 Vangelis Koukis
.. code-block:: console
126 dbe32d94 Vangelis Koukis
127 dbe32d94 Vangelis Koukis
       $ sudo su - postgres
128 dbe32d94 Vangelis Koukis
       $ psql
129 dbe32d94 Vangelis Koukis
	
130 dbe32d94 Vangelis Koukis
* Run the following commands:
131 dbe32d94 Vangelis Koukis
132 dbe32d94 Vangelis Koukis
.. code-block:: sql
133 dbe32d94 Vangelis Koukis
134 dbe32d94 Vangelis Koukis
	   DROP DATABASE <database name>;
135 dbe32d94 Vangelis Koukis
	   DROP USER <db username>;
136 dbe32d94 Vangelis Koukis
	   CREATE USER <db username> WITH PASSWORD '<db password>';
137 dbe32d94 Vangelis Koukis
	   CREATE DATABASE <database name>;
138 dbe32d94 Vangelis Koukis
	   GRANT ALL PRIVILEGES ON DATABASE <database name> TO <db username>;
139 dbe32d94 Vangelis Koukis
	   ALTER DATABASE <database name> OWNER TO <db username>;
140 dbe32d94 Vangelis Koukis
	   ALTER USER <db username> CREATEDB;
141 dbe32d94 Vangelis Koukis
       
142 dbe32d94 Vangelis Koukis
.. note:: 
143 dbe32d94 Vangelis Koukis
   The last line enables the newly created user to create own databases. This
144 dbe32d94 Vangelis Koukis
   is needed for Django to create and drop the ``test_synnefo`` database for
145 dbe32d94 Vangelis Koukis
   unit testing.
146 dbe32d94 Vangelis Koukis
147 dbe32d94 Vangelis Koukis
DB driver
148 dbe32d94 Vangelis Koukis
`````````
149 dbe32d94 Vangelis Koukis
150 dbe32d94 Vangelis Koukis
Depending on your DB of choice, install one of the following:
151 dbe32d94 Vangelis Koukis
152 dbe32d94 Vangelis Koukis
=========     =======================     ===================         ==========
153 dbe32d94 Vangelis Koukis
Database      PyPi package name           Debian package name         version   
154 dbe32d94 Vangelis Koukis
=========     =======================     ===================         ==========
155 dbe32d94 Vangelis Koukis
mysql         MySQL-python                python-mysql                1.2.3
156 dbe32d94 Vangelis Koukis
postgres      psycopg2                    python-psycopg2             2.4  
157 dbe32d94 Vangelis Koukis
=========     =======================     ===================         ==========
158 dbe32d94 Vangelis Koukis
159 dbe32d94 Vangelis Koukis
.. note::
160 dbe32d94 Vangelis Koukis
    The python sqlite driver is available by default with Python so no
161 dbe32d94 Vangelis Koukis
    additional configuration is required. Also, most self-respecting systems
162 dbe32d94 Vangelis Koukis
    have the sqlite library installed by default.
163 dbe32d94 Vangelis Koukis
164 dbe32d94 Vangelis Koukis
DB settings
165 dbe32d94 Vangelis Koukis
```````````
166 dbe32d94 Vangelis Koukis
167 dbe32d94 Vangelis Koukis
Add the following to your custom :ref:`snf-common <snf-common>`, depending on
168 dbe32d94 Vangelis Koukis
your choice of DB:
169 dbe32d94 Vangelis Koukis
170 dbe32d94 Vangelis Koukis
SQLite
171 dbe32d94 Vangelis Koukis
~~~~~~
172 dbe32d94 Vangelis Koukis
.. code-block:: python
173 dbe32d94 Vangelis Koukis
174 dbe32d94 Vangelis Koukis
    DATABASES = {
175 dbe32d94 Vangelis Koukis
        'default': {
176 dbe32d94 Vangelis Koukis
            'ENGINE': 'django.db.backends.sqlite3',
177 dbe32d94 Vangelis Koukis
            'NAME': '/path/to/synnefo.db'
178 dbe32d94 Vangelis Koukis
        }
179 dbe32d94 Vangelis Koukis
    }
180 dbe32d94 Vangelis Koukis
181 dbe32d94 Vangelis Koukis
.. warning:: ``NAME`` must be an absolute path to the sqlite3 database file
182 dbe32d94 Vangelis Koukis
183 dbe32d94 Vangelis Koukis
184 dbe32d94 Vangelis Koukis
MySQL
185 dbe32d94 Vangelis Koukis
~~~~~
186 dbe32d94 Vangelis Koukis
187 dbe32d94 Vangelis Koukis
.. code-block:: python
188 dbe32d94 Vangelis Koukis
189 dbe32d94 Vangelis Koukis
    DATABASES = {
190 dbe32d94 Vangelis Koukis
         'default': {
191 dbe32d94 Vangelis Koukis
             'ENGINE': 'django.db.backends.mysql',
192 dbe32d94 Vangelis Koukis
             'NAME': 'synnefo',
193 dbe32d94 Vangelis Koukis
             'USER': 'USERNAME',
194 dbe32d94 Vangelis Koukis
             'PASSWORD': 'PASSWORD',
195 dbe32d94 Vangelis Koukis
             'HOST': 'HOST',
196 dbe32d94 Vangelis Koukis
             'PORT': 'PORT',
197 dbe32d94 Vangelis Koukis
             'OPTIONS': {
198 dbe32d94 Vangelis Koukis
                 'init_command': 'SET storage_engine=INNODB',
199 dbe32d94 Vangelis Koukis
             }
200 dbe32d94 Vangelis Koukis
        }
201 dbe32d94 Vangelis Koukis
    }
202 dbe32d94 Vangelis Koukis
203 dbe32d94 Vangelis Koukis
PostgreSQL
204 dbe32d94 Vangelis Koukis
~~~~~~~~~~
205 dbe32d94 Vangelis Koukis
206 dbe32d94 Vangelis Koukis
.. code-block:: python
207 dbe32d94 Vangelis Koukis
208 dbe32d94 Vangelis Koukis
    DATABASES = {
209 dbe32d94 Vangelis Koukis
         'default': {
210 dbe32d94 Vangelis Koukis
             'ENGINE': 'django.db.backends.postgresql_psycopg2',
211 dbe32d94 Vangelis Koukis
             'NAME': 'DATABASE',
212 dbe32d94 Vangelis Koukis
             'USER': 'USERNAME',
213 dbe32d94 Vangelis Koukis
             'PASSWORD': 'PASSWORD',
214 dbe32d94 Vangelis Koukis
             'HOST': 'HOST',
215 dbe32d94 Vangelis Koukis
             'PORT': 'PORT',
216 dbe32d94 Vangelis Koukis
         }
217 dbe32d94 Vangelis Koukis
    }
218 dbe32d94 Vangelis Koukis
219 dbe32d94 Vangelis Koukis
Try it out. The following command will attempt to connect to the DB and
220 dbe32d94 Vangelis Koukis
print out DDL statements. It should not fail.
221 dbe32d94 Vangelis Koukis
222 dbe32d94 Vangelis Koukis
.. code-block:: console
223 dbe32d94 Vangelis Koukis
224 dbe32d94 Vangelis Koukis
    $ snf-manage sql db
225 dbe32d94 Vangelis Koukis
226 dbe32d94 Vangelis Koukis
Web server
227 dbe32d94 Vangelis Koukis
**********
228 99644884 Vangelis Koukis
229 99644884 Vangelis Koukis
You need to configure your webserver to serve static files and relay
230 99644884 Vangelis Koukis
requests to :ref:`snf-webproject <snf-webproject>`.
231 99644884 Vangelis Koukis
232 25762387 Kostas Papadimitriou
233 25762387 Kostas Papadimitriou
.. static_files::
234 99644884 Vangelis Koukis
Static files
235 99644884 Vangelis Koukis
````````````
236 b3ae4dd1 Kostas Papadimitriou
237 b3ae4dd1 Kostas Papadimitriou
:ref:`snf-webproject <snf-webproject>` provides a helper mechanism to avoid tedious
238 b3ae4dd1 Kostas Papadimitriou
tasks involving the collection and deployment of installed applications static
239 b3ae4dd1 Kostas Papadimitriou
files (js/css/images etc.). The mechanism tries to mimic the ``staticfiles``
240 b3ae4dd1 Kostas Papadimitriou
application included in ``Django>=1.3`` but its far less robust and adequate
241 b3ae4dd1 Kostas Papadimitriou
regarding its capabilities. When ``Django>=1.3`` become available as a package 
242 b3ae4dd1 Kostas Papadimitriou
for the stable release of ``Debian``, the current mechanism will get wiped off
243 b3ae4dd1 Kostas Papadimitriou
to be replaced by the ``staticfiles`` contrib application.
244 b3ae4dd1 Kostas Papadimitriou
245 b3ae4dd1 Kostas Papadimitriou
The current mechanism provides a tool to collect the static files of the synnefo
246 b3ae4dd1 Kostas Papadimitriou
components installed and enabled in your system and an automatic way of serving
247 b3ae4dd1 Kostas Papadimitriou
those files directly from your django project. Be concerned that the latter is
248 b3ae4dd1 Kostas Papadimitriou
for debugging pupropses only since serving static files from your django project
249 b3ae4dd1 Kostas Papadimitriou
is considered as a bad practice.
250 b3ae4dd1 Kostas Papadimitriou
251 b3ae4dd1 Kostas Papadimitriou
Each django based synnefo component informs webproject mechanism for the static 
252 b3ae4dd1 Kostas Papadimitriou
files it contains using the ``synnefo.web_static`` entry point which should point
253 b3ae4dd1 Kostas Papadimitriou
to a dict containing a map of a python module and a namespace for the url under
254 b3ae4dd1 Kostas Papadimitriou
which the files will be served from. As an example of use we can see how 
255 b3ae4dd1 Kostas Papadimitriou
snf-cyclades-app informs webproject for the static files of ui and admin applications.
256 b3ae4dd1 Kostas Papadimitriou
257 b3ae4dd1 Kostas Papadimitriou
in ``setup.py``::
258 b3ae4dd1 Kostas Papadimitriou
    
259 b3ae4dd1 Kostas Papadimitriou
    ...
260 b3ae4dd1 Kostas Papadimitriou
    entry_points = {
261 b3ae4dd1 Kostas Papadimitriou
     ...
262 b3ae4dd1 Kostas Papadimitriou
     'synnefo': [
263 b3ae4dd1 Kostas Papadimitriou
         ...
264 b3ae4dd1 Kostas Papadimitriou
         'web_static = synnefo.app_settings:synnefo_static_files',
265 b3ae4dd1 Kostas Papadimitriou
         ...
266 b3ae4dd1 Kostas Papadimitriou
         ]
267 b3ae4dd1 Kostas Papadimitriou
      },
268 b3ae4dd1 Kostas Papadimitriou
    ...
269 b3ae4dd1 Kostas Papadimitriou
270 b3ae4dd1 Kostas Papadimitriou
and inside ``synnefo/app_settings/__init__.py``::
271 b3ae4dd1 Kostas Papadimitriou
272 b3ae4dd1 Kostas Papadimitriou
    synnefo_static_files = {
273 b3ae4dd1 Kostas Papadimitriou
        'synnefo.ui': 'ui',
274 b3ae4dd1 Kostas Papadimitriou
        'synnefo.admin': 'admin',
275 b3ae4dd1 Kostas Papadimitriou
    }
276 b3ae4dd1 Kostas Papadimitriou
277 b3ae4dd1 Kostas Papadimitriou
278 b3ae4dd1 Kostas Papadimitriou
Collecting static files
279 b3ae4dd1 Kostas Papadimitriou
^^^^^^^^^^^^^^^^^^^^^^^
280 b3ae4dd1 Kostas Papadimitriou
281 99644884 Vangelis Koukis
* Choose an appropriate path (e.g. :file:`/var/lib/synnefo/static/`) from which
282 99644884 Vangelis Koukis
  your web server will serve all static files (js/css) required by the synnefo
283 99644884 Vangelis Koukis
  web frontend to run.
284 99644884 Vangelis Koukis
* Change the ``MEDIA_ROOT`` value in your settings (see :ref:`snf-common
285 99644884 Vangelis Koukis
  <snf-common>`) to point to that directory.
286 99644884 Vangelis Koukis
* Create symlinks to the static files of all synnefo webapp components
287 99644884 Vangelis Koukis
  inside the chosen directory, by running:
288 99644884 Vangelis Koukis
289 99644884 Vangelis Koukis
.. code-block:: console
290 99644884 Vangelis Koukis
291 99644884 Vangelis Koukis
    $ snf-manage link_static
292 99644884 Vangelis Koukis
293 b3ae4dd1 Kostas Papadimitriou
294 b3ae4dd1 Kostas Papadimitriou
Serving static files
295 b3ae4dd1 Kostas Papadimitriou
^^^^^^^^^^^^^^^^^^^^
296 b3ae4dd1 Kostas Papadimitriou
297 b3ae4dd1 Kostas Papadimitriou
By default will serve the static files if ``DEBUG`` setting is set to True.
298 25762387 Kostas Papadimitriou
You can override this behaviour by explicitly setting the 
299 25762387 Kostas Papadimitriou
``WEBPROJECT_SERVE_STATIC`` to True or False in your settings files.
300 b3ae4dd1 Kostas Papadimitriou
301 b3ae4dd1 Kostas Papadimitriou
302 99644884 Vangelis Koukis
Apache
303 99644884 Vangelis Koukis
``````
304 99644884 Vangelis Koukis
305 99644884 Vangelis Koukis
.. todo:: document Apache configuration
306 99644884 Vangelis Koukis
307 99644884 Vangelis Koukis
nginx
308 99644884 Vangelis Koukis
`````
309 99644884 Vangelis Koukis
This section describes a sample nginx configuration which uses FastCGI
310 99644884 Vangelis Koukis
to relay requests to synnefo.
311 99644884 Vangelis Koukis
312 99644884 Vangelis Koukis
First, use a distribution-specific mechanism (e.g., APT) to install nginx:
313 99644884 Vangelis Koukis
314 99644884 Vangelis Koukis
.. code-block:: console
315 99644884 Vangelis Koukis
316 99644884 Vangelis Koukis
   # apt-get install nginx
317 99644884 Vangelis Koukis
318 99644884 Vangelis Koukis
Then activate the following nginx configuration file by placing it under
319 99644884 Vangelis Koukis
:file:`/etc/nginx/sites-available` and symlinking under
320 99644884 Vangelis Koukis
:file:`/etc/nginx/sites-enabled`:
321 99644884 Vangelis Koukis
322 99644884 Vangelis Koukis
.. literalinclude:: ../_static/synnefo.nginx.conf
323 99644884 Vangelis Koukis
324 99644884 Vangelis Koukis
.. todo:: fix the location of the configuration file
325 99644884 Vangelis Koukis
326 99644884 Vangelis Koukis
`download <../_static/synnefo.nginx.conf>`_
327 99644884 Vangelis Koukis
328 99644884 Vangelis Koukis
Once nginx is configured, run the FastCGI server to receive incoming requests
329 99644884 Vangelis Koukis
from nginx. This requires installation of package ``flup``:
330 99644884 Vangelis Koukis
331 99644884 Vangelis Koukis
.. code-block:: console
332 99644884 Vangelis Koukis
333 99644884 Vangelis Koukis
    # apt-get install flup
334 99644884 Vangelis Koukis
    $ snf-manage runfcgi host=127.0.0.1 port=8015
335 99644884 Vangelis Koukis
336 25762387 Kostas Papadimitriou
337 99644884 Vangelis Koukis
For developers
338 99644884 Vangelis Koukis
--------------
339 99644884 Vangelis Koukis
340 25762387 Kostas Papadimitriou
Available entry points
341 25762387 Kostas Papadimitriou
^^^^^^^^^^^^^^^^^^^^^^
342 25762387 Kostas Papadimitriou
343 25762387 Kostas Papadimitriou
web_apps
344 25762387 Kostas Papadimitriou
````````
345 25762387 Kostas Papadimitriou
Extends INSTALLED_APPS django project setting.
346 25762387 Kostas Papadimitriou
347 25762387 Kostas Papadimitriou
Example::
348 25762387 Kostas Papadimitriou
    
349 25762387 Kostas Papadimitriou
    # myapp/synnefo_settings.py
350 25762387 Kostas Papadimitriou
    # synnefo_settings and variable name is arbitary
351 25762387 Kostas Papadimitriou
    my_app_web_apps = ['myapp', 'south', 'django.contrib.sessions']
352 25762387 Kostas Papadimitriou
    
353 25762387 Kostas Papadimitriou
    # another more complex configuration where we need our app to be placed
354 25762387 Kostas Papadimitriou
    # before django.contrib.admin app because it overrides some of the admin
355 25762387 Kostas Papadimitriou
    # templates used by admin app views
356 25762387 Kostas Papadimitriou
    my_app_web_apps = [{'before':'django.contrib.admin', 'insert':'myapp'}, 'south']
357 25762387 Kostas Papadimitriou
358 25762387 Kostas Papadimitriou
    # setup.py
359 25762387 Kostas Papadimitriou
    entry_points = {
360 25762387 Kostas Papadimitriou
        'synnefo': ['web_apps = myapp.synnefo_settings:my_app_web_apps']
361 25762387 Kostas Papadimitriou
    }
362 25762387 Kostas Papadimitriou
363 25762387 Kostas Papadimitriou
364 25762387 Kostas Papadimitriou
web_middleware
365 25762387 Kostas Papadimitriou
``````````````
366 25762387 Kostas Papadimitriou
Extends MIDDLEWARE_CLASSES django setting.
367 25762387 Kostas Papadimitriou
368 25762387 Kostas Papadimitriou
369 25762387 Kostas Papadimitriou
web_static
370 25762387 Kostas Papadimitriou
``````````
371 25762387 Kostas Papadimitriou
Extends STATIC_FILES setting (see `static_files`_).
372 25762387 Kostas Papadimitriou
373 25762387 Kostas Papadimitriou
374 25762387 Kostas Papadimitriou
web_context_processors
375 25762387 Kostas Papadimitriou
``````````````````````
376 25762387 Kostas Papadimitriou
Extends TEMPLATE_CONTEXT_PROCESSORS django setting.
377 25762387 Kostas Papadimitriou
378 25762387 Kostas Papadimitriou
379 25762387 Kostas Papadimitriou
loggers
380 25762387 Kostas Papadimitriou
```````
381 25762387 Kostas Papadimitriou
Extends `snf-common`_ LOGGING_SETUP['loggers'] setting.
382 25762387 Kostas Papadimitriou
383 25762387 Kostas Papadimitriou
384 25762387 Kostas Papadimitriou
urls
385 25762387 Kostas Papadimitriou
````
386 25762387 Kostas Papadimitriou
Extends django project urls. Accepts a urlpatterns variable. The urls defined
387 25762387 Kostas Papadimitriou
in this variable will be used to extend the django project urls.
388 e609b1ba Vangelis Koukis
389 e17a08fe Kostas Papadimitriou
390 e17a08fe Kostas Papadimitriou
.. include:: ../Changelog