[IMP] step through *working* instructions in the first section

This commit is contained in:
Xavier Morel 2014-04-14 14:57:12 +02:00
parent 5f7be30a2f
commit b9a1879a74
4 changed files with 59 additions and 39 deletions

View File

@ -43,33 +43,62 @@ right next to your server's directory:
└── security
└── ir.model.access.csv
* ``academy`` is the root directory of your module
* ``__init__.py`` tells Python that it is a valid package, and imports
sub-packages and sub-modules
* ``__openerp__.py`` provides various meta-information about your module to
OpenERP (a short description, the module's dependencies, its author, its
version, ...)
* ``controllers`` holds the object responding to web (browser) requests
- ``academy.py`` is where a default controller has been created for you
* ``models`` holds OpenERP stored objects, ignore it for now, we'll dive into
it when `storing data in OpenERP`
* ``ir.model.access.csv`` defines basic access rights to the models, you can
also ignore it for now
.. patch::
:hidden:
.. todo::
Now we can create a database, start your OpenERP server and install your new
module in it:
* instructions for start & install
* db handling
.. code-block:: console
- if existing db, automatically selected
- if no existing db, nodb -> login -> login of first db
- dbfilter
$ createdb academy
$ ./openerp-server --addons-path=../web/addons,../addons,../my-modules \
-d academy -i academy --db-filter=academy
Now start your OpenERP server and install your module in it, open a web
browser and navigate to http://localhost:8069. A page should appear with just
the words "Hello, world!" on it.
* ``--addons-path`` tells OpenERP where it can find its modules. By default it
will only look into ``openerp/addons``, this adds the web client modules,
the "standard" business modules (not needed yet) and the place where your
own ``academy`` module lives.
* ``-i`` installs the provided module name in the database specified via
``-d``
* ``--db-filter`` means the specified database will be selected by default in
the web interface, and will be the only one selectable (makes starting
things up simpler)
.. todo:: screenshot?
Once the installation is finished you should see ``HTTP service (werkzeug)
running on 0.0.0.0:8069`` and nothing more happening in the log. You can now
open a web browser and navigate to http://localhost:8069. A page should
appear with just the words "Hello, world!" on it:
Let's prettify things a bit: instead of returning just a bit of text,
we can return a page, and use a tool like bootstrap_ to get a
nicer rendering than the default.
.. image:: howto_website/helloworld.png
Go to :file:`academy/controllers/academy.py` and change the string
returned by the ``index`` method to get a more page-ish output:
This page is generated by the ``index`` method in
:file:`academy/controllers/academy.py`, which just returns some text. Let's
make it prettier by returning HTML and using bootstrap_ to get a nicer default
rendering:
.. patch::
Restart the server, refresh the page
.. image:: howto_website/hellobootstrap.png
Although it is subtle for so little text and markup, the font has changed and
margins have been added to the page.
.. note::
this example requires internet access as we're accessing a :abbr:`CDN
@ -77,23 +106,13 @@ returned by the ``index`` method to get a more page-ish output:
and trying to provide high-performance and high-availability of these
files)`-hosted file.
.. todo:: screenshot
Controller Parameters
=====================
Being able to build a static page in code is nice, but makes for limited
usefulness (you could do that with static files).
You can also create dynamic pages which use data provided in the URL,
for instance so a single controller generates multiple pages. Any
query parameter (``?name=value``) is passed as a string parameter to the
controller method.
For instance, the index page can display a list of teaching assistants linking
to a page for each assistant through their index in a global array. Each
assistant's page will simply print their name by applying the index to the
array:
For dynamic pages, query parameters are passed as string parameters to the
controller method. For instance the index page can display a list of teaching
assistants, and link to each assistant's page using an index (in a global
array for now):
.. patch::
@ -103,15 +122,15 @@ formatted. For this reason, query parameters are generally used to provide
"options" to a given page, and "required" data tends (when possible) to be
inserted directly in the URL.
This can be done by adding `converter patterns`_ to the URL in
``@http.route``:
This we can do by adding `converter patterns`_ to the URL in ``@http.route``:
.. patch::
These patterns can perform conversions directly (in this case the conversion
from a string URL section to a python integer) and will perform a some
validation (if the ``id`` is not a valid integer, the converter will return a
``404 Not Found`` instead of a 500 server error when the conversion fails).
These patterns will generally do some validation (e.g. if the ``id`` is not
a valid integer the converter will result in a ``404 Not Found`` page instead
of a 500 server error when the conversion failed in our own code) and may
perform some parsing or type conversion (in this case the conversion from a
URL section — a string — to a Python integer).
Basic templates
===============

View File

@ -12,6 +12,6 @@ diff --git a/controllers/academy.py b/controllers/academy.py
+ return """<!doctype html>
+<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+<body class="container">
+ <h1>Introduction to a thing</h1>
+ Hello, world!
+</body>
+"""

View File

@ -27,7 +27,8 @@ diff --git a/controllers/academy.py b/controllers/academy.py
return """<!doctype html>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<body class="container">
<h1>Introduction to a thing</h1>
- Hello, world!
+ <h1>Introduction to something</h1>
+ <h2>Teaching Assistants</h2>
+ <ul>
+ %(tas)s

View File

@ -1,5 +1,5 @@
# HG changeset patch
# Parent 93586905ed9663bf48ef33ca6476a537a8f96ac8
# Parent c6916a09fd20a67c210369676c78f23704870c8e
diff --git a/__openerp__.py b/__openerp__.py
--- a/__openerp__.py
@ -32,7 +32,7 @@ diff --git a/controllers/academy.py b/controllers/academy.py
- return """<!doctype html>
-<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
-<body class="container">
- <h1>Introduction to a thing</h1>
- <h1>Introduction to something</h1>
- <h2>Teaching Assistants</h2>
- <ul>
- %(tas)s