summaryrefslogtreecommitdiff
path: root/docs/narr/views.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/narr/views.rst')
-rw-r--r--docs/narr/views.rst39
1 files changed, 9 insertions, 30 deletions
diff --git a/docs/narr/views.rst b/docs/narr/views.rst
index a53063f78..40717c37a 100644
--- a/docs/narr/views.rst
+++ b/docs/narr/views.rst
@@ -442,10 +442,7 @@ browser client, and its ``action`` points at some :app:`Pyramid` view code:
:linenos:
<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- </head>
- <form method="POST" action="myview">
+ <form method="POST" action="myview" accept-charset="UTF-8">
<div>
<input type="text" name="firstname"/>
</div>
@@ -457,8 +454,8 @@ browser client, and its ``action`` points at some :app:`Pyramid` view code:
</html>
The ``myview`` view code in the :app:`Pyramid` application *must* expect that
-the values returned by ``request.params`` will be of type ``unicode``, as
-opposed to type ``str``. The following will work to accept a form post from the
+the values returned by ``request.params`` will be of type ``str``, as opposed
+to type ``bytes``. The following will work to accept a form post from the
above form:
.. code-block:: python
@@ -468,24 +465,12 @@ above form:
firstname = request.params['firstname']
lastname = request.params['lastname']
-But the following ``myview`` view code *may not* work, as it tries to decode
-already-decoded (``unicode``) values obtained from ``request.params``:
-
-.. code-block:: python
- :linenos:
-
- def myview(request):
- # the .decode('utf-8') will break below if there are any high-order
- # characters in the firstname or lastname
- firstname = request.params['firstname'].decode('utf-8')
- lastname = request.params['lastname'].decode('utf-8')
-
For implicit decoding to work reliably, you should ensure that every form you
render that posts to a :app:`Pyramid` view explicitly defines a charset
encoding of UTF-8. This can be done via a response that has a
``;charset=UTF-8`` in its ``Content-Type`` header; or, as in the form above,
-with a ``meta http-equiv`` tag that implies that the charset is UTF-8 within
-the HTML ``head`` of the page containing the form. This must be done
+with a ``accept-charset`` tag that implies that informs the browser that the
+server expects the form content to be encoded using UTF-8. This must be done
explicitly because all known browser clients assume that they should encode
form data in the same character set implied by the ``Content-Type`` value of
the response containing the form when subsequently submitting that form. There
@@ -499,21 +484,15 @@ when it can't decode some high-order character encoded in another character set
within form data, e.g., when ``request.params['somename']`` is accessed.
If you are using the :class:`~pyramid.response.Response` class to generate a
-response, or if you use the ``render_template_*`` templating APIs, the UTF-8
-``charset`` is set automatically as the default via the ``Content-Type``
-header. If you return a ``Content-Type`` header without an explicit
-``charset``, a request will add a ``;charset=utf-8`` trailer to the
+response, or if you use the ``pyramid.renderers.render_*`` templating APIs,
+the UTF-8 ``charset`` is set automatically as the default via the
+``Content-Type`` header. If you return a ``Content-Type`` header without an
+explicit ``charset``, a request will add a ``;charset=utf-8`` trailer to the
``Content-Type`` header value for you for response content types that are
textual (e.g., ``text/html`` or ``application/xml``) as it is rendered. If you
are using your own response object, you will need to ensure you do this
yourself.
-.. note:: Only the *values* of request params obtained via ``request.params``,
- ``request.GET`` or ``request.POST`` are decoded to Unicode objects
- implicitly in the :app:`Pyramid` default configuration. The keys are still
- (byte) strings.
-
-
.. index::
single: view calling convention