Noun docs changes

This commit is contained in:
Andrew Godwin 2016-05-04 09:20:36 -07:00
parent ea66b6560b
commit 2219546a5d
6 changed files with 31 additions and 19 deletions

View File

@ -13,7 +13,7 @@ And, beyond that, there are plenty of non-critical tasks that applications
could easily offload until after a response has been sent - like saving things
into a cache or thumbnailing newly-uploaded images.
Channels changes the way Django runs to be "event oriented" - rather than
It changes the way Django runs to be "event oriented" - rather than
just responding to requests, instead Django responds to a wide array of events
sent on *channels*. There's still no persistent state - each event handler,
or *consumer* as we call them, is called independently in a way much like a
@ -26,7 +26,7 @@ Let's look at what *channels* are first.
What is a channel?
------------------
The core of Channels is, unsurprisingly, a datastructure called a *channel*.
The core of the system is, unsurprisingly, a datastructure called a *channel*.
What is a channel? It is an *ordered*, *first-in first-out queue* with
*message expiry* and *at-most-once delivery* to *only one listener at a time*.

View File

@ -4,9 +4,9 @@ Deploying
Deploying applications using Channels requires a few more steps than a normal
Django WSGI application, but it's not very many.
Firstly, remember that even if you have Channels installed, it's an entirely
optional part of Django. If you leave a project with the default settings
(no ``CHANNEL_BACKENDS``), it'll just run and work like a normal WSGI app.
Firstly, remember that it's an entirely optional part of Django.
If you leave a project with the default settings (no ``CHANNEL_LAYERS``),
it'll just run and work like a normal WSGI app.
When you want to enable channels in production, you need to do three things:
@ -112,7 +112,7 @@ cluster on the backend, see :ref:`wsgi-to-asgi`.
If you want to support WebSockets, long-poll HTTP requests and other Channels
features, you'll need to run a native ASGI interface server, as the WSGI
specification has no support for running these kinds of requests concurrently.
Channels ships with an interface server that we recommend you use called
We ship with an interface server that we recommend you use called
`Daphne <http://github.com/andrewgodwin/daphne/>`_; it supports WebSockets,
long-poll HTTP requests, HTTP/2 *(soon)* and performs quite well.
Of course, any ASGI-compliant server will work!
@ -164,7 +164,7 @@ workers. As long as the new code is session-compatible, you can even do staged
rollouts to make sure workers on new code aren't experiencing high error rates.
There's no need to restart the WSGI or WebSocket interface servers unless
you've upgraded your version of Channels or changed any settings;
you've upgraded the interface server itself or changed any Django settings;
none of your code is used by them, and all middleware and code that can
customize requests is run on the consumers.

View File

@ -19,8 +19,8 @@ with a WSGI-based Django, and your views and static file serving (from
As a very basic introduction, let's write a consumer that overrides the built-in
handling and handles every HTTP request directly. This isn't something you'd
usually do in a project, but it's a good illustration of how Channels
underlies even core Django - it's less of an addition and more adding a whole
usually do in a project, but it's a good illustration of how channels
underlie even core Django - it's less of an addition and more adding a whole
new layer under the existing view layer.
Make a new project, a new app, and put this in a ``consumers.py`` file in the app::
@ -279,7 +279,7 @@ see :doc:`backends` for more.
The second thing, once we have a networked channel backend set up, is to make
sure we're running an interface server that's capable of serving WebSockets.
Luckily, installing Channels will also install ``daphne``, an interface server
To solve this, Channels comes with ``daphne``, an interface server
that can handle both HTTP and WebSockets at the same time, and then ties this
in to run when you run ``runserver`` - you shouldn't notice any difference
from the normal Django ``runserver``, though some of the options may be a little
@ -471,7 +471,7 @@ Django session ID as part of the URL, like this::
socket = new WebSocket("ws://127.0.0.1:9000/?session_key=abcdefg");
You can get the current session key in a template with ``{{ request.session.session_key }}``.
Note that Channels can't work with signed cookie sessions - since only HTTP
Note that this can't work with signed cookie sessions - since only HTTP
responses can set cookies, it needs a backend it can write to to separately
store state.
@ -479,7 +479,7 @@ store state.
Routing
-------
Channels' ``routing.py`` acts very much like Django's ``urls.py``, including the
The ``routing.py`` file acts very much like Django's ``urls.py``, including the
ability to route things to different consumers based on ``path``, or any other
message attribute that's a string (for example, ``http.request`` messages have
a ``method`` key you could route based on).
@ -508,7 +508,7 @@ routing our chat from above::
include(http_routing),
]
Channels will resolve the routing in order, short-circuiting around the
The routing is resolved in order, short-circuiting around the
includes if one or more of their matches fails. You don't have to start with
the ``^`` symbol - we use Python's ``re.match`` function, which starts at the
start of a line anyway - but it's considered good practice.
@ -624,7 +624,7 @@ same effect if someone tried to request a view before the login view had finishe
processing, but there you're not expecting that page to run after the login,
whereas you'd naturally expect ``receive`` to run after ``connect``.
Channels has a solution - the ``enforce_ordering`` decorator. All WebSocket
Channels has a solution - the ``enforce_ordering`` decorator. All WebSocket
messages contain an ``order`` key, and this decorator uses that to make sure that
messages are consumed in the right order, in one of two modes:
@ -695,6 +695,6 @@ to manage logical sets of channels, and how Django's session and authentication
systems easily integrate with WebSockets.
We recommend you read through the rest of the reference documentation to see
all of what Channels has to offer; in particular, you may want to look at
more about what you can do with channels; in particular, you may want to look at
our :doc:`deploying` and :doc:`scaling` resources to get an idea of how to
design and run apps in production environments.

View File

@ -6,9 +6,10 @@ Reference
Consumers
---------
When you configure channel routing, Channels expects the object assigned to
a channel to be a callable that takes exactly one positional argument, here
called ``message``. This is a :ref:`message object <ref-message>`.
When you configure channel routing, the object assigned to a channel
should be a callable that takes exactly one positional argument, here
called ``message``, which is a :ref:`message object <ref-message>`. A consumer
is any callable that fits this definition.
Consumers are not expected to return anything, and if they do, it will be
ignored. They may raise ``channels.exceptions.ConsumeLater`` to re-insert

View File

@ -6,7 +6,7 @@ realize that you can't use the standard Django test client to submit fake HTTP
requests - instead, you'll need to submit fake Messages to your consumers,
and inspect what Messages they send themselves.
Channels comes with a ``TestCase`` subclass that sets all of this up for you,
We provide a ``TestCase`` subclass that sets all of this up for you,
however, so you can easily write tests and check what your consumers are sending.

View File

@ -142,6 +142,17 @@ docs_transforms = global_transforms + [
Replacement(r":doc:`([\w\d\s]+) <asgi>`", r"`\1 <http://channels.readthedocs.org/en/latest/asgi.html>`_"),
Replacement(r"\n\(.*installation>`\)\n", r""),
Replacement(r":doc:`installed Channels correctly <installation>`", r"added the channel layer setting"),
Replacement(r"Channels", r"channels"),
Replacement(r"Started with channels", r"Started with Channels"),
Replacement(r"Running with channels", r"Running with Channels"),
Replacement(r"channels consumers", r"channel consumers"),
Replacement(r"channels' design", r"The channels design"),
Replacement(r"channels is being released", r"Channels is being released"),
Replacement(r"channels is", r"channels are"),
Replacement(r"channels provides a", r"Channels provides a"),
Replacement(r"channels can use", r"Channels can use"),
Replacement(r"channels Concepts", r"Channels Concepts"),
Replacement(r"channels works", r"channels work"),
]