mirror of
https://github.com/django/django.git
synced 2025-09-10 11:09:12 +00:00
Fixed #36570 -- Removed unnecessary :py domain from documentation roles.
Signed-off-by: SaJH <wogur981208@gmail.com>
This commit is contained in:
parent
1285de557b
commit
3c0c54351b
@ -120,7 +120,7 @@ this::
|
|||||||
# ...
|
# ...
|
||||||
|
|
||||||
The option (``delete`` in our example) is available in the options dict
|
The option (``delete`` in our example) is available in the options dict
|
||||||
parameter of the handle method. See the :py:mod:`argparse` Python documentation
|
parameter of the handle method. See the :mod:`argparse` Python documentation
|
||||||
for more about ``add_argument`` usage.
|
for more about ``add_argument`` usage.
|
||||||
|
|
||||||
In addition to being able to add custom command line options, all
|
In addition to being able to add custom command line options, all
|
||||||
@ -208,7 +208,7 @@ All attributes can be set in your derived class and can be used in
|
|||||||
|
|
||||||
If your command defines mandatory positional arguments, you can customize
|
If your command defines mandatory positional arguments, you can customize
|
||||||
the message error returned in the case of missing arguments. The default is
|
the message error returned in the case of missing arguments. The default is
|
||||||
output by :py:mod:`argparse` ("too few arguments").
|
output by :mod:`argparse` ("too few arguments").
|
||||||
|
|
||||||
.. attribute:: BaseCommand.output_transaction
|
.. attribute:: BaseCommand.output_transaction
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ To send a log message from within your code, you place a logging call into it.
|
|||||||
logging, use a view function as suggested in the example below.
|
logging, use a view function as suggested in the example below.
|
||||||
|
|
||||||
First, import the Python logging library, and then obtain a logger instance
|
First, import the Python logging library, and then obtain a logger instance
|
||||||
with :py:func:`logging.getLogger`. Provide the ``getLogger()`` method with a
|
with :func:`logging.getLogger`. Provide the ``getLogger()`` method with a
|
||||||
name to identify it and the records it emits. A good option is to use
|
name to identify it and the records it emits. A good option is to use
|
||||||
``__name__`` (see :ref:`naming-loggers` below for more on this) which will
|
``__name__`` (see :ref:`naming-loggers` below for more on this) which will
|
||||||
provide the name of the current Python module as a dotted path::
|
provide the name of the current Python module as a dotted path::
|
||||||
@ -43,7 +43,7 @@ And then in a function, for example in a view, send a record to the logger::
|
|||||||
if some_risky_state:
|
if some_risky_state:
|
||||||
logger.warning("Platform is running at risk")
|
logger.warning("Platform is running at risk")
|
||||||
|
|
||||||
When this code is executed, a :py:class:`~logging.LogRecord` containing that
|
When this code is executed, a :class:`~logging.LogRecord` containing that
|
||||||
message will be sent to the logger. If you're using Django's default logging
|
message will be sent to the logger. If you're using Django's default logging
|
||||||
configuration, the message will appear in the console.
|
configuration, the message will appear in the console.
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ file ``general.log`` (at the project root):
|
|||||||
Different handler classes take different configuration options. For more
|
Different handler classes take different configuration options. For more
|
||||||
information on available handler classes, see the
|
information on available handler classes, see the
|
||||||
:class:`~django.utils.log.AdminEmailHandler` provided by Django and the various
|
:class:`~django.utils.log.AdminEmailHandler` provided by Django and the various
|
||||||
:py:mod:`handler classes <logging.handlers>` provided by Python.
|
:mod:`handler classes <logging.handlers>` provided by Python.
|
||||||
|
|
||||||
Logging levels can also be set on the handlers (by default, they accept log
|
Logging levels can also be set on the handlers (by default, they accept log
|
||||||
messages of all levels). Using the example above, adding:
|
messages of all levels). Using the example above, adding:
|
||||||
@ -238,7 +238,7 @@ application. A named logging configuration will capture logs only from loggers
|
|||||||
with matching names.
|
with matching names.
|
||||||
|
|
||||||
The namespace of a logger instance is defined using
|
The namespace of a logger instance is defined using
|
||||||
:py:func:`~logging.getLogger`. For example in ``views.py`` of ``my_app``::
|
:func:`~logging.getLogger`. For example in ``views.py`` of ``my_app``::
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -56,8 +56,8 @@ Python style
|
|||||||
These limits are checked when ``flake8`` is run.
|
These limits are checked when ``flake8`` is run.
|
||||||
|
|
||||||
* String variable interpolation may use
|
* String variable interpolation may use
|
||||||
:py:ref:`%-formatting <old-string-formatting>`, :py:ref:`f-strings
|
:ref:`%-formatting <old-string-formatting>`, :ref:`f-strings
|
||||||
<f-strings>`, or :py:meth:`str.format` as appropriate, with the goal of
|
<f-strings>`, or :meth:`str.format` as appropriate, with the goal of
|
||||||
maximizing code readability.
|
maximizing code readability.
|
||||||
|
|
||||||
Final judgments of readability are left to the Merger's discretion. As a
|
Final judgments of readability are left to the Merger's discretion. As a
|
||||||
|
@ -742,8 +742,8 @@ details on these changes.
|
|||||||
* The ability to use a dotted Python path for the ``LOGIN_URL`` and
|
* The ability to use a dotted Python path for the ``LOGIN_URL`` and
|
||||||
``LOGIN_REDIRECT_URL`` settings will be removed.
|
``LOGIN_REDIRECT_URL`` settings will be removed.
|
||||||
|
|
||||||
* Support for :py:mod:`optparse` will be dropped for custom management commands
|
* Support for :mod:`optparse` will be dropped for custom management commands
|
||||||
(replaced by :py:mod:`argparse`).
|
(replaced by :mod:`argparse`).
|
||||||
|
|
||||||
* The class ``django.core.management.NoArgsCommand`` will be removed. Use
|
* The class ``django.core.management.NoArgsCommand`` will be removed. Use
|
||||||
:class:`~django.core.management.BaseCommand` instead, which takes no
|
:class:`~django.core.management.BaseCommand` instead, which takes no
|
||||||
|
@ -492,7 +492,7 @@ This view function serves static files in development.
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
To guess the served files' content types, this view relies on the
|
To guess the served files' content types, this view relies on the
|
||||||
:py:mod:`mimetypes` module from the Python standard library, which itself
|
:mod:`mimetypes` module from the Python standard library, which itself
|
||||||
relies on the underlying platform's map files. If you find that this view
|
relies on the underlying platform's map files. If you find that this view
|
||||||
doesn't return proper content types for certain files, it is most likely
|
doesn't return proper content types for certain files, it is most likely
|
||||||
that the platform's map files are incorrect or need to be updated. This can
|
that the platform's map files are incorrect or need to be updated. This can
|
||||||
|
@ -951,7 +951,7 @@ Enabling JSON1 extension on SQLite
|
|||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
To use :class:`~django.db.models.JSONField` on SQLite, you need to enable the
|
To use :class:`~django.db.models.JSONField` on SQLite, you need to enable the
|
||||||
`JSON1 extension`_ on Python's :py:mod:`sqlite3` library. If the extension is
|
`JSON1 extension`_ on Python's :mod:`sqlite3` library. If the extension is
|
||||||
not enabled on your installation, a system error (``fields.E180``) will be
|
not enabled on your installation, a system error (``fields.E180``) will be
|
||||||
raised.
|
raised.
|
||||||
|
|
||||||
|
@ -1845,7 +1845,7 @@ allows for the following options by default:
|
|||||||
|
|
||||||
.. django-admin-option:: --pythonpath PYTHONPATH
|
.. django-admin-option:: --pythonpath PYTHONPATH
|
||||||
|
|
||||||
Adds the given filesystem path to the Python :py:data:`sys.path` module
|
Adds the given filesystem path to the Python :data:`sys.path` module
|
||||||
attribute. If this isn't provided, ``django-admin`` will use the
|
attribute. If this isn't provided, ``django-admin`` will use the
|
||||||
:envvar:`PYTHONPATH` environment variable.
|
:envvar:`PYTHONPATH` environment variable.
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ The ``File`` class
|
|||||||
.. class:: File(file_object, name=None)
|
.. class:: File(file_object, name=None)
|
||||||
|
|
||||||
The :class:`File` class is a thin wrapper around a Python
|
The :class:`File` class is a thin wrapper around a Python
|
||||||
:py:term:`file object` with some Django-specific additions.
|
:term:`file object` with some Django-specific additions.
|
||||||
Internally, Django uses this class when it needs to represent a file.
|
Internally, Django uses this class when it needs to represent a file.
|
||||||
|
|
||||||
:class:`File` objects have the following attributes and methods:
|
:class:`File` objects have the following attributes and methods:
|
||||||
@ -29,14 +29,14 @@ The ``File`` class
|
|||||||
|
|
||||||
.. attribute:: file
|
.. attribute:: file
|
||||||
|
|
||||||
The underlying :py:term:`file object` that this class wraps.
|
The underlying :term:`file object` that this class wraps.
|
||||||
|
|
||||||
.. admonition:: Be careful with this attribute in subclasses.
|
.. admonition:: Be careful with this attribute in subclasses.
|
||||||
|
|
||||||
Some subclasses of :class:`File`, including
|
Some subclasses of :class:`File`, including
|
||||||
:class:`~django.core.files.base.ContentFile` and
|
:class:`~django.core.files.base.ContentFile` and
|
||||||
:class:`~django.db.models.fields.files.FieldFile`, may replace this
|
:class:`~django.db.models.fields.files.FieldFile`, may replace this
|
||||||
attribute with an object other than a Python :py:term:`file
|
attribute with an object other than a Python :term:`file
|
||||||
object`. In these cases, this attribute may itself be a
|
object`. In these cases, this attribute may itself be a
|
||||||
:class:`File` subclass (and not necessarily the same subclass).
|
:class:`File` subclass (and not necessarily the same subclass).
|
||||||
Whenever possible, use the attributes and methods of the subclass
|
Whenever possible, use the attributes and methods of the subclass
|
||||||
|
@ -919,7 +919,7 @@ For each field, we describe the default widget used if you don't specify
|
|||||||
|
|
||||||
.. attribute:: encoder
|
.. attribute:: encoder
|
||||||
|
|
||||||
A :py:class:`json.JSONEncoder` subclass to serialize data types not
|
A :class:`json.JSONEncoder` subclass to serialize data types not
|
||||||
supported by the standard JSON serializer (e.g. ``datetime.datetime``
|
supported by the standard JSON serializer (e.g. ``datetime.datetime``
|
||||||
or :class:`~python:uuid.UUID`). For example, you can use the
|
or :class:`~python:uuid.UUID`). For example, you can use the
|
||||||
:class:`~django.core.serializers.json.DjangoJSONEncoder` class.
|
:class:`~django.core.serializers.json.DjangoJSONEncoder` class.
|
||||||
@ -928,14 +928,14 @@ For each field, we describe the default widget used if you don't specify
|
|||||||
|
|
||||||
.. attribute:: decoder
|
.. attribute:: decoder
|
||||||
|
|
||||||
A :py:class:`json.JSONDecoder` subclass to deserialize the input. Your
|
A :class:`json.JSONDecoder` subclass to deserialize the input. Your
|
||||||
deserialization may need to account for the fact that you can't be
|
deserialization may need to account for the fact that you can't be
|
||||||
certain of the input type. For example, you run the risk of returning a
|
certain of the input type. For example, you run the risk of returning a
|
||||||
``datetime`` that was actually a string that just happened to be in the
|
``datetime`` that was actually a string that just happened to be in the
|
||||||
same format chosen for ``datetime``\s.
|
same format chosen for ``datetime``\s.
|
||||||
|
|
||||||
The ``decoder`` can be used to validate the input. If
|
The ``decoder`` can be used to validate the input. If
|
||||||
:py:class:`json.JSONDecodeError` is raised during the deserialization,
|
:class:`json.JSONDecodeError` is raised during the deserialization,
|
||||||
a ``ValidationError`` will be raised.
|
a ``ValidationError`` will be raised.
|
||||||
|
|
||||||
Defaults to ``json.JSONDecoder``.
|
Defaults to ``json.JSONDecoder``.
|
||||||
|
@ -164,7 +164,7 @@ Messages to this logger have the following extra context:
|
|||||||
|
|
||||||
* ``status_code``: The HTTP response code associated with the request.
|
* ``status_code``: The HTTP response code associated with the request.
|
||||||
|
|
||||||
* ``request``: The request object (a :py:class:`socket.socket`) that generated
|
* ``request``: The request object (a :class:`socket.socket`) that generated
|
||||||
the logging message.
|
the logging message.
|
||||||
|
|
||||||
.. _django-template-logger:
|
.. _django-template-logger:
|
||||||
|
@ -563,7 +563,7 @@ values into their corresponding database type.
|
|||||||
|
|
||||||
If no :ref:`output_field<output-field>` is specified, it will be inferred from
|
If no :ref:`output_field<output-field>` is specified, it will be inferred from
|
||||||
the type of the provided ``value`` for many common types. For example, passing
|
the type of the provided ``value`` for many common types. For example, passing
|
||||||
an instance of :py:class:`datetime.datetime` as ``value`` defaults
|
an instance of :class:`datetime.datetime` as ``value`` defaults
|
||||||
``output_field`` to :class:`~django.db.models.DateTimeField`.
|
``output_field`` to :class:`~django.db.models.DateTimeField`.
|
||||||
|
|
||||||
``ExpressionWrapper()`` expressions
|
``ExpressionWrapper()`` expressions
|
||||||
@ -1094,7 +1094,7 @@ calling the appropriate methods on the wrapped expression.
|
|||||||
|
|
||||||
Tells Django which value should be returned when the expression is used
|
Tells Django which value should be returned when the expression is used
|
||||||
to apply a function over an empty result set. Defaults to
|
to apply a function over an empty result set. Defaults to
|
||||||
:py:data:`NotImplemented` which forces the expression to be computed on
|
:data:`NotImplemented` which forces the expression to be computed on
|
||||||
the database.
|
the database.
|
||||||
|
|
||||||
.. attribute:: set_returning
|
.. attribute:: set_returning
|
||||||
|
@ -1434,7 +1434,7 @@ Python native format: dictionaries, lists, strings, numbers, booleans and
|
|||||||
|
|
||||||
.. attribute:: JSONField.encoder
|
.. attribute:: JSONField.encoder
|
||||||
|
|
||||||
An optional :py:class:`json.JSONEncoder` subclass to serialize data types
|
An optional :class:`json.JSONEncoder` subclass to serialize data types
|
||||||
not supported by the standard JSON serializer (e.g. ``datetime.datetime``
|
not supported by the standard JSON serializer (e.g. ``datetime.datetime``
|
||||||
or :class:`~python:uuid.UUID`). For example, you can use the
|
or :class:`~python:uuid.UUID`). For example, you can use the
|
||||||
:class:`~django.core.serializers.json.DjangoJSONEncoder` class.
|
:class:`~django.core.serializers.json.DjangoJSONEncoder` class.
|
||||||
@ -1443,7 +1443,7 @@ Python native format: dictionaries, lists, strings, numbers, booleans and
|
|||||||
|
|
||||||
.. attribute:: JSONField.decoder
|
.. attribute:: JSONField.decoder
|
||||||
|
|
||||||
An optional :py:class:`json.JSONDecoder` subclass to deserialize the value
|
An optional :class:`json.JSONDecoder` subclass to deserialize the value
|
||||||
retrieved from the database. The value will be in the format chosen by the
|
retrieved from the database. The value will be in the format chosen by the
|
||||||
custom encoder (most often a string). Your deserialization may need to
|
custom encoder (most often a string). Your deserialization may need to
|
||||||
account for the fact that you can't be certain of the input type. For
|
account for the fact that you can't be certain of the input type. For
|
||||||
@ -1458,7 +1458,7 @@ To query ``JSONField`` in the database, see :ref:`querying-jsonfield`.
|
|||||||
.. admonition:: Default value
|
.. admonition:: Default value
|
||||||
|
|
||||||
If you give the field a :attr:`~django.db.models.Field.default`, ensure
|
If you give the field a :attr:`~django.db.models.Field.default`, ensure
|
||||||
it's a callable such as the :py:class:`dict` class or a function that
|
it's a callable such as the :class:`dict` class or a function that
|
||||||
returns a fresh object each time. Incorrectly using a mutable object like
|
returns a fresh object each time. Incorrectly using a mutable object like
|
||||||
``default={}`` or ``default=[]`` creates a mutable default that is shared
|
``default={}`` or ``default=[]`` creates a mutable default that is shared
|
||||||
between all instances.
|
between all instances.
|
||||||
@ -1483,8 +1483,8 @@ To query ``JSONField`` in the database, see :ref:`querying-jsonfield`.
|
|||||||
.. admonition:: Oracle users
|
.. admonition:: Oracle users
|
||||||
|
|
||||||
Oracle Database does not support storing JSON scalar values. Only JSON
|
Oracle Database does not support storing JSON scalar values. Only JSON
|
||||||
objects and arrays (represented in Python using :py:class:`dict` and
|
objects and arrays (represented in Python using :class:`dict` and
|
||||||
:py:class:`list`) are supported.
|
:class:`list`) are supported.
|
||||||
|
|
||||||
``PositiveBigIntegerField``
|
``PositiveBigIntegerField``
|
||||||
---------------------------
|
---------------------------
|
||||||
@ -2440,7 +2440,7 @@ Field API reference
|
|||||||
|
|
||||||
.. attribute:: descriptor_class
|
.. attribute:: descriptor_class
|
||||||
|
|
||||||
A class implementing the :py:ref:`descriptor protocol <descriptors>`
|
A class implementing the :ref:`descriptor protocol <descriptors>`
|
||||||
that is instantiated and assigned to the model instance attribute. The
|
that is instantiated and assigned to the model instance attribute. The
|
||||||
constructor must accept a single argument, the ``Field`` instance.
|
constructor must accept a single argument, the ``Field`` instance.
|
||||||
Overriding this class attribute allows for customizing the get and set
|
Overriding this class attribute allows for customizing the get and set
|
||||||
|
@ -889,7 +889,7 @@ Attributes
|
|||||||
|
|
||||||
.. attribute:: HttpResponse.cookies
|
.. attribute:: HttpResponse.cookies
|
||||||
|
|
||||||
A :py:obj:`http.cookies.SimpleCookie` object holding the cookies included
|
A :obj:`http.cookies.SimpleCookie` object holding the cookies included
|
||||||
in the response.
|
in the response.
|
||||||
|
|
||||||
.. attribute:: HttpResponse.headers
|
.. attribute:: HttpResponse.headers
|
||||||
@ -952,7 +952,7 @@ Methods
|
|||||||
``"text/html; charset=utf-8"``.
|
``"text/html; charset=utf-8"``.
|
||||||
|
|
||||||
``status`` is the :rfc:`HTTP status code <9110#section-15>` for the
|
``status`` is the :rfc:`HTTP status code <9110#section-15>` for the
|
||||||
response. You can use Python's :py:class:`http.HTTPStatus` for meaningful
|
response. You can use Python's :class:`http.HTTPStatus` for meaningful
|
||||||
aliases, such as ``HTTPStatus.NO_CONTENT``.
|
aliases, such as ``HTTPStatus.NO_CONTENT``.
|
||||||
|
|
||||||
``reason`` is the HTTP response phrase. If not provided, a default phrase
|
``reason`` is the HTTP response phrase. If not provided, a default phrase
|
||||||
@ -1187,7 +1187,7 @@ Custom response classes
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you find yourself needing a response class that Django doesn't provide, you
|
If you find yourself needing a response class that Django doesn't provide, you
|
||||||
can create it with the help of :py:class:`http.HTTPStatus`. For example::
|
can create it with the help of :class:`http.HTTPStatus`. For example::
|
||||||
|
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
@ -1225,14 +1225,14 @@ attribute and calling the result ``country_list``.
|
|||||||
|
|
||||||
``{% regroup %}`` produces a list (in this case, ``country_list``) of
|
``{% regroup %}`` produces a list (in this case, ``country_list``) of
|
||||||
**group objects**. Group objects are instances of
|
**group objects**. Group objects are instances of
|
||||||
:py:func:`~collections.namedtuple` with two fields:
|
:func:`~collections.namedtuple` with two fields:
|
||||||
|
|
||||||
* ``grouper`` -- the item that was grouped by (e.g., the string "India" or
|
* ``grouper`` -- the item that was grouped by (e.g., the string "India" or
|
||||||
"Japan").
|
"Japan").
|
||||||
* ``list`` -- a list of all items in this group (e.g., a list of all cities
|
* ``list`` -- a list of all items in this group (e.g., a list of all cities
|
||||||
with country='India').
|
with country='India').
|
||||||
|
|
||||||
Because ``{% regroup %}`` produces :py:func:`~collections.namedtuple` objects,
|
Because ``{% regroup %}`` produces :func:`~collections.namedtuple` objects,
|
||||||
you can also write the previous example as:
|
you can also write the previous example as:
|
||||||
|
|
||||||
.. code-block:: html+django
|
.. code-block:: html+django
|
||||||
@ -1839,7 +1839,7 @@ For example:
|
|||||||
|
|
||||||
{{ value|date:"D d M Y" }}
|
{{ value|date:"D d M Y" }}
|
||||||
|
|
||||||
If ``value`` is a :py:class:`~datetime.datetime` object (e.g., the result of
|
If ``value`` is a :class:`~datetime.datetime` object (e.g., the result of
|
||||||
``datetime.datetime.now()``), the output will be the string
|
``datetime.datetime.now()``), the output will be the string
|
||||||
``'Wed 09 Jan 2008'``.
|
``'Wed 09 Jan 2008'``.
|
||||||
|
|
||||||
@ -2736,7 +2736,7 @@ specifier for the ``de`` locale as shipped with Django is ``"H:i"``).
|
|||||||
The ``time`` filter will only accept parameters in the format string that
|
The ``time`` filter will only accept parameters in the format string that
|
||||||
relate to the time of day, not the date. If you need to format a ``date``
|
relate to the time of day, not the date. If you need to format a ``date``
|
||||||
value, use the :tfilter:`date` filter instead (or along with :tfilter:`time` if
|
value, use the :tfilter:`date` filter instead (or along with :tfilter:`time` if
|
||||||
you need to render a full :py:class:`~datetime.datetime` value).
|
you need to render a full :class:`~datetime.datetime` value).
|
||||||
|
|
||||||
There is one exception the above rule: When passed a ``datetime`` value with
|
There is one exception the above rule: When passed a ``datetime`` value with
|
||||||
attached timezone information (a :ref:`time-zone-aware
|
attached timezone information (a :ref:`time-zone-aware
|
||||||
|
@ -268,7 +268,7 @@ Use strings when creating templates manually::
|
|||||||
|
|
||||||
But the common case is to read templates from the filesystem. If your template
|
But the common case is to read templates from the filesystem. If your template
|
||||||
files are not stored with a UTF-8 encoding, adjust the :setting:`TEMPLATES`
|
files are not stored with a UTF-8 encoding, adjust the :setting:`TEMPLATES`
|
||||||
setting. The built-in :py:mod:`~django.template.backends.django` backend
|
setting. The built-in :mod:`~django.template.backends.django` backend
|
||||||
provides the ``'file_charset'`` option to change the encoding used to read
|
provides the ``'file_charset'`` option to change the encoding used to read
|
||||||
files from disk.
|
files from disk.
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ Returns an element for inclusion in ``urlpatterns``. For example::
|
|||||||
The ``route`` argument should be a string or
|
The ``route`` argument should be a string or
|
||||||
:func:`~django.utils.translation.gettext_lazy` (see
|
:func:`~django.utils.translation.gettext_lazy` (see
|
||||||
:ref:`translating-urlpatterns`) that contains a regular expression compatible
|
:ref:`translating-urlpatterns`) that contains a regular expression compatible
|
||||||
with Python's :py:mod:`re` module. Strings typically use raw string syntax
|
with Python's :mod:`re` module. Strings typically use raw string syntax
|
||||||
(``r''``) so that they can contain sequences like ``\d`` without the need to
|
(``r''``) so that they can contain sequences like ``\d`` without the need to
|
||||||
escape the backslash with another backslash. When a match is made, captured
|
escape the backslash with another backslash. When a match is made, captured
|
||||||
groups from the regular expression are passed to the view -- as named arguments
|
groups from the regular expression are passed to the view -- as named arguments
|
||||||
@ -104,7 +104,7 @@ passed as strings, without any type conversion.
|
|||||||
|
|
||||||
When a ``route`` ends with ``$`` the whole requested URL, matching against
|
When a ``route`` ends with ``$`` the whole requested URL, matching against
|
||||||
:attr:`~django.http.HttpRequest.path_info`, must match the regular expression
|
:attr:`~django.http.HttpRequest.path_info`, must match the regular expression
|
||||||
pattern (:py:func:`re.fullmatch` is used).
|
pattern (:func:`re.fullmatch` is used).
|
||||||
|
|
||||||
The ``view``, ``kwargs`` and ``name`` arguments are the same as for
|
The ``view``, ``kwargs`` and ``name`` arguments are the same as for
|
||||||
:func:`~django.urls.path`.
|
:func:`~django.urls.path`.
|
||||||
|
@ -352,7 +352,7 @@ compatibility
|
|||||||
|
|
||||||
An optional string containing the MIME type of the stylesheet. If not
|
An optional string containing the MIME type of the stylesheet. If not
|
||||||
specified, Django will attempt to guess it by using Python's
|
specified, Django will attempt to guess it by using Python's
|
||||||
:py:func:`mimetypes.guess_type`. Use ``mimetype=None`` if you don't
|
:func:`mimetypes.guess_type`. Use ``mimetype=None`` if you don't
|
||||||
want your stylesheet to have a MIME type specified.
|
want your stylesheet to have a MIME type specified.
|
||||||
|
|
||||||
.. attribute:: media
|
.. attribute:: media
|
||||||
@ -532,7 +532,7 @@ compatibility
|
|||||||
# set a value manually, that will persist on the instance until cleared
|
# set a value manually, that will persist on the instance until cleared
|
||||||
person.friends = ["Huckleberry Finn", "Tom Sawyer"]
|
person.friends = ["Huckleberry Finn", "Tom Sawyer"]
|
||||||
|
|
||||||
Because of the way the :py:ref:`descriptor protocol
|
Because of the way the :ref:`descriptor protocol
|
||||||
<descriptor-invocation>` works, using ``del`` (or ``delattr``) on a
|
<descriptor-invocation>` works, using ``del`` (or ``delattr``) on a
|
||||||
``cached_property`` that hasn't been accessed raises ``AttributeError``.
|
``cached_property`` that hasn't been accessed raises ``AttributeError``.
|
||||||
|
|
||||||
@ -560,7 +560,7 @@ compatibility
|
|||||||
|
|
||||||
.. class:: classproperty(method=None)
|
.. class:: classproperty(method=None)
|
||||||
|
|
||||||
Similar to :py:func:`@classmethod <classmethod>`, the ``@classproperty``
|
Similar to :func:`@classmethod <classmethod>`, the ``@classproperty``
|
||||||
decorator converts the result of a method with a single ``cls`` argument
|
decorator converts the result of a method with a single ``cls`` argument
|
||||||
into a property that can be accessed directly from the class.
|
into a property that can be accessed directly from the class.
|
||||||
|
|
||||||
|
@ -448,7 +448,7 @@ Requests and Responses
|
|||||||
* Added :class:`~django.http.HttpResponse` methods
|
* Added :class:`~django.http.HttpResponse` methods
|
||||||
:meth:`~django.http.HttpResponse.readable` and
|
:meth:`~django.http.HttpResponse.readable` and
|
||||||
:meth:`~django.http.HttpResponse.seekable` to make an instance a
|
:meth:`~django.http.HttpResponse.seekable` to make an instance a
|
||||||
stream-like object and allow wrapping it with :py:class:`io.TextIOWrapper`.
|
stream-like object and allow wrapping it with :class:`io.TextIOWrapper`.
|
||||||
|
|
||||||
* Added the :attr:`HttpRequest.content_type
|
* Added the :attr:`HttpRequest.content_type
|
||||||
<django.http.HttpRequest.content_type>` and
|
<django.http.HttpRequest.content_type>` and
|
||||||
|
@ -275,7 +275,7 @@ Cryptography
|
|||||||
|
|
||||||
* The ``max_age`` parameter of the
|
* The ``max_age`` parameter of the
|
||||||
:meth:`django.core.signing.TimestampSigner.unsign` method now also accepts a
|
:meth:`django.core.signing.TimestampSigner.unsign` method now also accepts a
|
||||||
:py:class:`datetime.timedelta` object.
|
:class:`datetime.timedelta` object.
|
||||||
|
|
||||||
Database backends
|
Database backends
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
@ -384,7 +384,7 @@ Generic Views
|
|||||||
|
|
||||||
* Placeholders in :attr:`ModelFormMixin.success_url
|
* Placeholders in :attr:`ModelFormMixin.success_url
|
||||||
<django.views.generic.edit.ModelFormMixin.success_url>` now support the
|
<django.views.generic.edit.ModelFormMixin.success_url>` now support the
|
||||||
Python :py:meth:`str.format` syntax. The legacy ``%(<foo>)s`` syntax is still
|
Python :meth:`str.format` syntax. The legacy ``%(<foo>)s`` syntax is still
|
||||||
supported but will be removed in Django 1.10.
|
supported but will be removed in Django 1.10.
|
||||||
|
|
||||||
Internationalization
|
Internationalization
|
||||||
@ -753,7 +753,7 @@ Management commands that only accept positional arguments
|
|||||||
If you have written a custom management command that only accepts positional
|
If you have written a custom management command that only accepts positional
|
||||||
arguments and you didn't specify the ``args`` command variable, you might get
|
arguments and you didn't specify the ``args`` command variable, you might get
|
||||||
an error like ``Error: unrecognized arguments: ...``, as variable parsing is
|
an error like ``Error: unrecognized arguments: ...``, as variable parsing is
|
||||||
now based on :py:mod:`argparse` which doesn't implicitly accept positional
|
now based on :mod:`argparse` which doesn't implicitly accept positional
|
||||||
arguments. You can make your command backwards compatible by simply setting the
|
arguments. You can make your command backwards compatible by simply setting the
|
||||||
``args`` class variable. However, if you don't have to keep compatibility with
|
``args`` class variable. However, if you don't have to keep compatibility with
|
||||||
older Django versions, it's better to implement the new
|
older Django versions, it's better to implement the new
|
||||||
@ -766,10 +766,10 @@ Custom test management command arguments through test runner
|
|||||||
The method to add custom arguments to the ``test`` management command through
|
The method to add custom arguments to the ``test`` management command through
|
||||||
the test runner has changed. Previously, you could provide an ``option_list``
|
the test runner has changed. Previously, you could provide an ``option_list``
|
||||||
class variable on the test runner to add more arguments (à la
|
class variable on the test runner to add more arguments (à la
|
||||||
:py:mod:`optparse`). Now to implement the same behavior, you have to create an
|
:mod:`optparse`). Now to implement the same behavior, you have to create an
|
||||||
``add_arguments(cls, parser)`` class method on the test runner and call
|
``add_arguments(cls, parser)`` class method on the test runner and call
|
||||||
``parser.add_argument`` to add any custom arguments, as parser is now an
|
``parser.add_argument`` to add any custom arguments, as parser is now an
|
||||||
:py:class:`argparse.ArgumentParser` instance.
|
:class:`argparse.ArgumentParser` instance.
|
||||||
|
|
||||||
Model check ensures auto-generated column names are within limits specified by database
|
Model check ensures auto-generated column names are within limits specified by database
|
||||||
---------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------
|
||||||
@ -1407,7 +1407,7 @@ in Django 1.10:
|
|||||||
Extending management command arguments through ``Command.option_list``
|
Extending management command arguments through ``Command.option_list``
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Management commands now use :py:mod:`argparse` instead of :py:mod:`optparse` to
|
Management commands now use :mod:`argparse` instead of :mod:`optparse` to
|
||||||
parse command-line arguments passed to commands. This also means that the way
|
parse command-line arguments passed to commands. This also means that the way
|
||||||
to add custom arguments to commands has changed: instead of extending the
|
to add custom arguments to commands has changed: instead of extending the
|
||||||
``option_list`` class list, you should now override the
|
``option_list`` class list, you should now override the
|
||||||
|
@ -285,7 +285,7 @@ Models
|
|||||||
|
|
||||||
* The new :attr:`.Field.descriptor_class` attribute allows model fields to
|
* The new :attr:`.Field.descriptor_class` attribute allows model fields to
|
||||||
customize the get and set behavior by overriding their
|
customize the get and set behavior by overriding their
|
||||||
:py:ref:`descriptors <descriptors>`.
|
:ref:`descriptors <descriptors>`.
|
||||||
|
|
||||||
* :class:`~django.db.models.Avg` and :class:`~django.db.models.Sum` now support
|
* :class:`~django.db.models.Avg` and :class:`~django.db.models.Sum` now support
|
||||||
the ``distinct`` argument.
|
the ``distinct`` argument.
|
||||||
|
@ -43,7 +43,7 @@ Bugfixes
|
|||||||
* Fixed a regression in Django 3.1 where
|
* Fixed a regression in Django 3.1 where
|
||||||
:exc:`ProtectedError.protected_objects <django.db.models.ProtectedError>` and
|
:exc:`ProtectedError.protected_objects <django.db.models.ProtectedError>` and
|
||||||
:exc:`RestrictedError.restricted_objects <django.db.models.RestrictedError>`
|
:exc:`RestrictedError.restricted_objects <django.db.models.RestrictedError>`
|
||||||
attributes returned iterators instead of :py:class:`set` of objects
|
attributes returned iterators instead of :class:`set` of objects
|
||||||
(:ticket:`32107`).
|
(:ticket:`32107`).
|
||||||
|
|
||||||
* Fixed a regression in Django 3.1.2 that caused incorrect form input layout on
|
* Fixed a regression in Django 3.1.2 that caused incorrect form input layout on
|
||||||
|
@ -407,7 +407,7 @@ Models
|
|||||||
SQL on MySQL by using ``DELETE`` instead of ``TRUNCATE`` statements for
|
SQL on MySQL by using ``DELETE`` instead of ``TRUNCATE`` statements for
|
||||||
tables which don't require resetting sequences.
|
tables which don't require resetting sequences.
|
||||||
|
|
||||||
* SQLite functions are now marked as :py:meth:`deterministic
|
* SQLite functions are now marked as :meth:`deterministic
|
||||||
<sqlite3.Connection.create_function>` on Python 3.8+. This allows using them
|
<sqlite3.Connection.create_function>` on Python 3.8+. This allows using them
|
||||||
in check constraints and partial indexes.
|
in check constraints and partial indexes.
|
||||||
|
|
||||||
|
@ -406,11 +406,11 @@ Models
|
|||||||
* :class:`Value() <django.db.models.Value>` expression now
|
* :class:`Value() <django.db.models.Value>` expression now
|
||||||
automatically resolves its ``output_field`` to the appropriate
|
automatically resolves its ``output_field`` to the appropriate
|
||||||
:class:`Field <django.db.models.Field>` subclass based on the type of
|
:class:`Field <django.db.models.Field>` subclass based on the type of
|
||||||
its provided ``value`` for :py:class:`bool`, :py:class:`bytes`,
|
its provided ``value`` for :class:`bool`, :class:`bytes`,
|
||||||
:py:class:`float`, :py:class:`int`, :py:class:`str`,
|
:class:`float`, :class:`int`, :class:`str`,
|
||||||
:py:class:`datetime.date`, :py:class:`datetime.datetime`,
|
:class:`datetime.date`, :class:`datetime.datetime`,
|
||||||
:py:class:`datetime.time`, :py:class:`datetime.timedelta`,
|
:class:`datetime.time`, :class:`datetime.timedelta`,
|
||||||
:py:class:`decimal.Decimal`, and :py:class:`uuid.UUID` instances. As a
|
:class:`decimal.Decimal`, and :class:`uuid.UUID` instances. As a
|
||||||
consequence, resolving an ``output_field`` for database functions and
|
consequence, resolving an ``output_field`` for database functions and
|
||||||
combined expressions may now crash with mixed types when using ``Value()``.
|
combined expressions may now crash with mixed types when using ``Value()``.
|
||||||
You will need to explicitly set the ``output_field`` in such cases.
|
You will need to explicitly set the ``output_field`` in such cases.
|
||||||
@ -519,11 +519,11 @@ Tests
|
|||||||
|
|
||||||
* Objects assigned to class attributes in :meth:`.TestCase.setUpTestData` are
|
* Objects assigned to class attributes in :meth:`.TestCase.setUpTestData` are
|
||||||
now isolated for each test method. Such objects are now required to support
|
now isolated for each test method. Such objects are now required to support
|
||||||
creating deep copies with :py:func:`copy.deepcopy`. Assigning objects which
|
creating deep copies with :func:`copy.deepcopy`. Assigning objects which
|
||||||
don't support ``deepcopy()`` is deprecated and will be removed in Django 4.1.
|
don't support ``deepcopy()`` is deprecated and will be removed in Django 4.1.
|
||||||
|
|
||||||
* :class:`~django.test.runner.DiscoverRunner` now enables
|
* :class:`~django.test.runner.DiscoverRunner` now enables
|
||||||
:py:mod:`faulthandler` by default. This can be disabled by using the
|
:mod:`faulthandler` by default. This can be disabled by using the
|
||||||
:option:`test --no-faulthandler` option.
|
:option:`test --no-faulthandler` option.
|
||||||
|
|
||||||
* :class:`~django.test.runner.DiscoverRunner` and the
|
* :class:`~django.test.runner.DiscoverRunner` and the
|
||||||
@ -703,8 +703,8 @@ Miscellaneous
|
|||||||
removed. Please use :func:`urllib.parse.parse_qsl` instead.
|
removed. Please use :func:`urllib.parse.parse_qsl` instead.
|
||||||
|
|
||||||
* ``django.test.utils.TestContextDecorator`` now uses
|
* ``django.test.utils.TestContextDecorator`` now uses
|
||||||
:py:meth:`~unittest.TestCase.addCleanup` so that cleanups registered in the
|
:meth:`~unittest.TestCase.addCleanup` so that cleanups registered in the
|
||||||
:py:meth:`~unittest.TestCase.setUp` method are called before
|
:meth:`~unittest.TestCase.setUp` method are called before
|
||||||
``TestContextDecorator.disable()``.
|
``TestContextDecorator.disable()``.
|
||||||
|
|
||||||
* ``SessionMiddleware`` now raises a
|
* ``SessionMiddleware`` now raises a
|
||||||
@ -758,7 +758,7 @@ Miscellaneous
|
|||||||
-------------
|
-------------
|
||||||
|
|
||||||
* Assigning objects which don't support creating deep copies with
|
* Assigning objects which don't support creating deep copies with
|
||||||
:py:func:`copy.deepcopy` to class attributes in
|
:func:`copy.deepcopy` to class attributes in
|
||||||
:meth:`.TestCase.setUpTestData` is deprecated.
|
:meth:`.TestCase.setUpTestData` is deprecated.
|
||||||
|
|
||||||
* Using a boolean value in :attr:`.BaseCommand.requires_system_checks` is
|
* Using a boolean value in :attr:`.BaseCommand.requires_system_checks` is
|
||||||
|
@ -289,7 +289,7 @@ Management Commands
|
|||||||
|
|
||||||
* On PostgreSQL, :djadmin:`dbshell` now supports specifying a password file.
|
* On PostgreSQL, :djadmin:`dbshell` now supports specifying a password file.
|
||||||
|
|
||||||
* The :djadmin:`shell` command now respects :py:data:`sys.__interactivehook__`
|
* The :djadmin:`shell` command now respects :data:`sys.__interactivehook__`
|
||||||
at startup. This allows loading shell history between interactive sessions.
|
at startup. This allows loading shell history between interactive sessions.
|
||||||
As a consequence, ``readline`` is no longer loaded if running in *isolated*
|
As a consequence, ``readline`` is no longer loaded if running in *isolated*
|
||||||
mode.
|
mode.
|
||||||
@ -349,7 +349,7 @@ Signals
|
|||||||
* The new ``stdout`` argument for :func:`~django.db.models.signals.pre_migrate`
|
* The new ``stdout`` argument for :func:`~django.db.models.signals.pre_migrate`
|
||||||
and :func:`~django.db.models.signals.post_migrate` signals allows redirecting
|
and :func:`~django.db.models.signals.post_migrate` signals allows redirecting
|
||||||
output to a stream-like object. It should be preferred over
|
output to a stream-like object. It should be preferred over
|
||||||
:py:data:`sys.stdout` and :py:func:`print` when emitting verbose output in
|
:data:`sys.stdout` and :func:`print` when emitting verbose output in
|
||||||
order to allow proper capture when testing.
|
order to allow proper capture when testing.
|
||||||
|
|
||||||
Templates
|
Templates
|
||||||
@ -370,7 +370,7 @@ Tests
|
|||||||
* The :option:`test --buffer` option now supports parallel tests.
|
* The :option:`test --buffer` option now supports parallel tests.
|
||||||
|
|
||||||
* The new ``logger`` argument to :class:`~django.test.runner.DiscoverRunner`
|
* The new ``logger`` argument to :class:`~django.test.runner.DiscoverRunner`
|
||||||
allows a Python :py:ref:`logger <logger>` to be used for logging.
|
allows a Python :ref:`logger <logger>` to be used for logging.
|
||||||
|
|
||||||
* The new :meth:`.DiscoverRunner.log` method provides a way to log messages
|
* The new :meth:`.DiscoverRunner.log` method provides a way to log messages
|
||||||
that uses the ``DiscoverRunner.logger``, or prints to the console if not set.
|
that uses the ``DiscoverRunner.logger``, or prints to the console if not set.
|
||||||
|
@ -536,7 +536,7 @@ Miscellaneous
|
|||||||
|
|
||||||
* :class:`~django.test.runner.DiscoverRunner` now returns a non-zero error code
|
* :class:`~django.test.runner.DiscoverRunner` now returns a non-zero error code
|
||||||
for unexpected successes from tests marked with
|
for unexpected successes from tests marked with
|
||||||
:py:func:`unittest.expectedFailure`.
|
:func:`unittest.expectedFailure`.
|
||||||
|
|
||||||
* :class:`~django.middleware.csrf.CsrfViewMiddleware` no longer masks the CSRF
|
* :class:`~django.middleware.csrf.CsrfViewMiddleware` no longer masks the CSRF
|
||||||
cookie like it does the CSRF token in the DOM.
|
cookie like it does the CSRF token in the DOM.
|
||||||
@ -608,7 +608,7 @@ Features deprecated in 4.1
|
|||||||
Log out via GET
|
Log out via GET
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Logging out via ``GET`` requests to the :py:class:`built-in logout view
|
Logging out via ``GET`` requests to the :class:`built-in logout view
|
||||||
<django.contrib.auth.views.LogoutView>` is deprecated. Use ``POST`` requests
|
<django.contrib.auth.views.LogoutView>` is deprecated. Use ``POST`` requests
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
|
@ -475,8 +475,8 @@ Miscellaneous
|
|||||||
* Support for ``PROJ`` < 5 is removed.
|
* Support for ``PROJ`` < 5 is removed.
|
||||||
|
|
||||||
* :class:`~django.core.mail.backends.smtp.EmailBackend` now verifies a
|
* :class:`~django.core.mail.backends.smtp.EmailBackend` now verifies a
|
||||||
:py:attr:`hostname <ssl.SSLContext.check_hostname>` and
|
:attr:`hostname <ssl.SSLContext.check_hostname>` and
|
||||||
:py:attr:`certificates <ssl.SSLContext.verify_mode>`. If you need the
|
:attr:`certificates <ssl.SSLContext.verify_mode>`. If you need the
|
||||||
previous behavior that is less restrictive and not recommended, subclass
|
previous behavior that is less restrictive and not recommended, subclass
|
||||||
``EmailBackend`` and override the ``ssl_context`` property.
|
``EmailBackend`` and override the ``ssl_context`` property.
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ Miscellaneous
|
|||||||
* The ``BaseUserManager.make_random_password()`` method is deprecated. See
|
* The ``BaseUserManager.make_random_password()`` method is deprecated. See
|
||||||
`recipes and best practices
|
`recipes and best practices
|
||||||
<https://docs.python.org/3/library/secrets.html#recipes-and-best-practices>`_
|
<https://docs.python.org/3/library/secrets.html#recipes-and-best-practices>`_
|
||||||
for using Python's :py:mod:`secrets` module to generate passwords.
|
for using Python's :mod:`secrets` module to generate passwords.
|
||||||
|
|
||||||
* The ``length_is`` template filter is deprecated in favor of :tfilter:`length`
|
* The ``length_is`` template filter is deprecated in favor of :tfilter:`length`
|
||||||
and the ``==`` operator within an :ttag:`{% if %}<if>` tag. For example
|
and the ``==`` operator within an :ttag:`{% if %}<if>` tag. For example
|
||||||
|
@ -382,7 +382,7 @@ Miscellaneous
|
|||||||
|
|
||||||
* ``django.utils.text.Truncator`` used by :tfilter:`truncatechars_html` and
|
* ``django.utils.text.Truncator`` used by :tfilter:`truncatechars_html` and
|
||||||
:tfilter:`truncatewords_html` template filters now uses
|
:tfilter:`truncatewords_html` template filters now uses
|
||||||
:py:class:`html.parser.HTMLParser` subclasses. This results in a more robust
|
:class:`html.parser.HTMLParser` subclasses. This results in a more robust
|
||||||
and faster operation, but there may be small differences in the output.
|
and faster operation, but there may be small differences in the output.
|
||||||
|
|
||||||
* The undocumented ``django.urls.converters.get_converter()`` function is
|
* The undocumented ``django.urls.converters.get_converter()`` function is
|
||||||
|
@ -380,8 +380,8 @@ Utilities
|
|||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
* :class:`~django.utils.safestring.SafeString` now returns
|
* :class:`~django.utils.safestring.SafeString` now returns
|
||||||
:py:data:`NotImplemented` in ``__add__`` for non-string right-hand side
|
:data:`NotImplemented` in ``__add__`` for non-string right-hand side
|
||||||
values. This aligns with the :py:class:`str` addition behavior and allows
|
values. This aligns with the :class:`str` addition behavior and allows
|
||||||
``__radd__`` to be used if available.
|
``__radd__`` to be used if available.
|
||||||
|
|
||||||
* :func:`~django.utils.html.format_html_join` now supports taking an iterable
|
* :func:`~django.utils.html.format_html_join` now supports taking an iterable
|
||||||
|
@ -79,15 +79,15 @@ Adoption of Python's modern email API
|
|||||||
|
|
||||||
Email handling in Django now uses Python's modern email API, introduced in
|
Email handling in Django now uses Python's modern email API, introduced in
|
||||||
Python 3.6. This API, centered around the
|
Python 3.6. This API, centered around the
|
||||||
:py:class:`email.message.EmailMessage` class, offers a cleaner and
|
:class:`email.message.EmailMessage` class, offers a cleaner and
|
||||||
Unicode-friendly interface for composing and sending emails. It replaces use of
|
Unicode-friendly interface for composing and sending emails. It replaces use of
|
||||||
Python's older legacy (``Compat32``) API, which relied on lower-level MIME
|
Python's older legacy (``Compat32``) API, which relied on lower-level MIME
|
||||||
classes (from :py:mod:`email.mime`) and required more manual handling of
|
classes (from :mod:`email.mime`) and required more manual handling of
|
||||||
message structure and encoding.
|
message structure and encoding.
|
||||||
|
|
||||||
Notably, the return type of the :class:`EmailMessage.message()
|
Notably, the return type of the :class:`EmailMessage.message()
|
||||||
<django.core.mail.EmailMessage>` method is now an instance of Python's
|
<django.core.mail.EmailMessage>` method is now an instance of Python's
|
||||||
:py:class:`email.message.EmailMessage`. This supports the same API as the
|
:class:`email.message.EmailMessage`. This supports the same API as the
|
||||||
previous ``SafeMIMEText`` and ``SafeMIMEMultipart`` return types, but is not an
|
previous ``SafeMIMEText`` and ``SafeMIMEMultipart`` return types, but is not an
|
||||||
instance of those now-deprecated classes.
|
instance of those now-deprecated classes.
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ Email
|
|||||||
* The new ``policy`` argument for :class:`EmailMessage.message()
|
* The new ``policy`` argument for :class:`EmailMessage.message()
|
||||||
<django.core.mail.EmailMessage>` allows specifying the email policy, the set
|
<django.core.mail.EmailMessage>` allows specifying the email policy, the set
|
||||||
of rules for updating and serializing the representation of the message.
|
of rules for updating and serializing the representation of the message.
|
||||||
Defaults to :py:data:`email.policy.default`.
|
Defaults to :data:`email.policy.default`.
|
||||||
|
|
||||||
* :class:`EmailMessage.attach() <django.core.mail.EmailMessage>` now accepts a
|
* :class:`EmailMessage.attach() <django.core.mail.EmailMessage>` now accepts a
|
||||||
:class:`~email.message.MIMEPart` object from Python's modern email API.
|
:class:`~email.message.MIMEPart` object from Python's modern email API.
|
||||||
@ -439,7 +439,7 @@ Email
|
|||||||
|
|
||||||
* The undocumented ``encoding`` property of
|
* The undocumented ``encoding`` property of
|
||||||
:class:`~django.core.mail.EmailMessage` no longer supports Python legacy
|
:class:`~django.core.mail.EmailMessage` no longer supports Python legacy
|
||||||
:py:class:`email.charset.Charset` objects.
|
:class:`email.charset.Charset` objects.
|
||||||
|
|
||||||
* As the internal implementations of :class:`~django.core.mail.EmailMessage`
|
* As the internal implementations of :class:`~django.core.mail.EmailMessage`
|
||||||
and :class:`~django.core.mail.EmailMultiAlternatives` have changed
|
and :class:`~django.core.mail.EmailMultiAlternatives` have changed
|
||||||
@ -471,7 +471,7 @@ Miscellaneous
|
|||||||
at the end of the output, even without the ``indent`` option set.
|
at the end of the output, even without the ``indent`` option set.
|
||||||
|
|
||||||
* The undocumented ``django.utils.http.parse_header_parameters()`` function is
|
* The undocumented ``django.utils.http.parse_header_parameters()`` function is
|
||||||
refactored to use Python's :py:class:`email.message.Message` for parsing.
|
refactored to use Python's :class:`email.message.Message` for parsing.
|
||||||
Input headers exceeding 10000 characters will now raise :exc:`ValueError`.
|
Input headers exceeding 10000 characters will now raise :exc:`ValueError`.
|
||||||
|
|
||||||
* Widgets from :mod:`django.contrib.gis.forms.widgets` now render without
|
* Widgets from :mod:`django.contrib.gis.forms.widgets` now render without
|
||||||
@ -570,6 +570,9 @@ Miscellaneous
|
|||||||
* The undocumented ``django.core.mail.forbid_multi_line_headers()`` and
|
* The undocumented ``django.core.mail.forbid_multi_line_headers()`` and
|
||||||
``django.core.mail.message.sanitize_address()`` functions are deprecated.
|
``django.core.mail.message.sanitize_address()`` functions are deprecated.
|
||||||
|
|
||||||
|
* The ``django.utils.crypto.constant_time_compare()`` function is deprecated
|
||||||
|
because it is merely an alias of :func:`hmac.compare_digest`.
|
||||||
|
|
||||||
Features removed in 6.0
|
Features removed in 6.0
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ Threadlocals and contextvars values are preserved across the boundary in both
|
|||||||
directions.
|
directions.
|
||||||
|
|
||||||
:func:`async_to_sync` is essentially a more powerful version of the
|
:func:`async_to_sync` is essentially a more powerful version of the
|
||||||
:py:func:`asyncio.run` function in Python's standard library. As well
|
:func:`asyncio.run` function in Python's standard library. As well
|
||||||
as ensuring threadlocals work, it also enables the ``thread_sensitive`` mode of
|
as ensuring threadlocals work, it also enables the ``thread_sensitive`` mode of
|
||||||
:func:`sync_to_async` when that wrapper is used below it.
|
:func:`sync_to_async` when that wrapper is used below it.
|
||||||
|
|
||||||
|
@ -1060,7 +1060,7 @@ representation of the JSON scalar ``null`` is the same as SQL ``NULL``, i.e.
|
|||||||
``None``. Therefore, it can be hard to distinguish between them.
|
``None``. Therefore, it can be hard to distinguish between them.
|
||||||
|
|
||||||
This only applies to ``None`` as the top-level value of the field. If ``None``
|
This only applies to ``None`` as the top-level value of the field. If ``None``
|
||||||
is inside a :py:class:`list` or :py:class:`dict`, it will always be interpreted
|
is inside a :class:`list` or :class:`dict`, it will always be interpreted
|
||||||
as JSON ``null``.
|
as JSON ``null``.
|
||||||
|
|
||||||
When querying, ``None`` value will always be interpreted as JSON ``null``. To
|
When querying, ``None`` value will always be interpreted as JSON ``null``. To
|
||||||
|
@ -113,7 +113,7 @@ Django provides a single API to control database transactions.
|
|||||||
durability and can be achieved by setting ``durable=True``. If the
|
durability and can be achieved by setting ``durable=True``. If the
|
||||||
``atomic`` block is nested within another it raises a ``RuntimeError``.
|
``atomic`` block is nested within another it raises a ``RuntimeError``.
|
||||||
|
|
||||||
``atomic`` is usable both as a :py:term:`decorator`::
|
``atomic`` is usable both as a :term:`decorator`::
|
||||||
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
@ -123,7 +123,7 @@ Django provides a single API to control database transactions.
|
|||||||
# This code executes inside a transaction.
|
# This code executes inside a transaction.
|
||||||
do_stuff()
|
do_stuff()
|
||||||
|
|
||||||
and as a :py:term:`context manager`::
|
and as a :term:`context manager`::
|
||||||
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
|
@ -418,11 +418,11 @@ The class has the following methods:
|
|||||||
|
|
||||||
The keyword argument ``policy`` allows specifying the set of rules for
|
The keyword argument ``policy`` allows specifying the set of rules for
|
||||||
updating and serializing the representation of the message. It must be an
|
updating and serializing the representation of the message. It must be an
|
||||||
:py:mod:`email.policy.Policy <email.policy>` object. Defaults to
|
:mod:`email.policy.Policy <email.policy>` object. Defaults to
|
||||||
:py:data:`email.policy.default`. In certain cases you may want to use
|
:data:`email.policy.default`. In certain cases you may want to use
|
||||||
:py:data:`~email.policy.SMTP`, :py:data:`~email.policy.SMTPUTF8` or a custom
|
:data:`~email.policy.SMTP`, :data:`~email.policy.SMTPUTF8` or a custom
|
||||||
policy. For example, :class:`django.core.mail.backends.smtp.EmailBackend`
|
policy. For example, :class:`django.core.mail.backends.smtp.EmailBackend`
|
||||||
uses the :py:data:`~email.policy.SMTP` policy to ensure ``\r\n`` line endings
|
uses the :data:`~email.policy.SMTP` policy to ensure ``\r\n`` line endings
|
||||||
as required by the SMTP protocol.
|
as required by the SMTP protocol.
|
||||||
|
|
||||||
If you ever need to extend Django's :class:`~django.core.mail.EmailMessage`
|
If you ever need to extend Django's :class:`~django.core.mail.EmailMessage`
|
||||||
@ -432,7 +432,7 @@ The class has the following methods:
|
|||||||
.. versionchanged:: 6.0
|
.. versionchanged:: 6.0
|
||||||
|
|
||||||
The ``policy`` keyword argument was added and the return type was updated
|
The ``policy`` keyword argument was added and the return type was updated
|
||||||
to an instance of :py:class:`~email.message.EmailMessage`.
|
to an instance of :class:`~email.message.EmailMessage`.
|
||||||
|
|
||||||
* ``recipients()`` returns a list of all the recipients of the message,
|
* ``recipients()`` returns a list of all the recipients of the message,
|
||||||
whether they're recorded in the ``to``, ``cc`` or ``bcc`` attributes. This
|
whether they're recorded in the ``to``, ``cc`` or ``bcc`` attributes. This
|
||||||
|
@ -50,8 +50,8 @@ following example will create a formset class to display two blank forms:
|
|||||||
|
|
||||||
Formsets can be iterated and indexed, accessing forms in the order they were
|
Formsets can be iterated and indexed, accessing forms in the order they were
|
||||||
created. You can reorder the forms by overriding the default
|
created. You can reorder the forms by overriding the default
|
||||||
:py:meth:`iteration <object.__iter__>` and
|
:meth:`iteration <object.__iter__>` and
|
||||||
:py:meth:`indexing <object.__getitem__>` behavior if needed.
|
:meth:`indexing <object.__getitem__>` behavior if needed.
|
||||||
|
|
||||||
.. _formsets-initial-data:
|
.. _formsets-initial-data:
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ have more than a single parameter. If you used positional interpolation,
|
|||||||
translations wouldn't be able to reorder placeholder text.
|
translations wouldn't be able to reorder placeholder text.
|
||||||
|
|
||||||
Since string extraction is done by the ``xgettext`` command, only syntaxes
|
Since string extraction is done by the ``xgettext`` command, only syntaxes
|
||||||
supported by ``gettext`` are supported by Django. Python :py:ref:`f-strings
|
supported by ``gettext`` are supported by Django. Python :ref:`f-strings
|
||||||
<f-strings>` cannot be used directly with ``gettext`` functions because
|
<f-strings>` cannot be used directly with ``gettext`` functions because
|
||||||
f-string expressions are evaluated before they reach ``gettext``. This means
|
f-string expressions are evaluated before they reach ``gettext``. This means
|
||||||
``_(f"Welcome {name}")`` will not work as expected, as the variable is
|
``_(f"Welcome {name}")`` will not work as expected, as the variable is
|
||||||
|
@ -204,7 +204,7 @@ therefore have performance implications, and the more expensive the work
|
|||||||
concerned, the more there is to gain through laziness.
|
concerned, the more there is to gain through laziness.
|
||||||
|
|
||||||
Python provides a number of tools for lazy evaluation, particularly through the
|
Python provides a number of tools for lazy evaluation, particularly through the
|
||||||
:py:term:`generator` and :py:term:`generator expression` constructs. It's worth
|
:term:`generator` and :term:`generator expression` constructs. It's worth
|
||||||
reading up on laziness in Python to discover opportunities for making use of
|
reading up on laziness in Python to discover opportunities for making use of
|
||||||
lazy patterns in your code.
|
lazy patterns in your code.
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ by using an environment variable, :envvar:`DJANGO_SETTINGS_MODULE`.
|
|||||||
|
|
||||||
The value of :envvar:`DJANGO_SETTINGS_MODULE` should be in Python path syntax,
|
The value of :envvar:`DJANGO_SETTINGS_MODULE` should be in Python path syntax,
|
||||||
e.g. ``mysite.settings``. Note that the settings module should be on the
|
e.g. ``mysite.settings``. Note that the settings module should be on the
|
||||||
Python :py:data:`sys.path`.
|
Python :data:`sys.path`.
|
||||||
|
|
||||||
|
|
||||||
The ``django-admin`` utility
|
The ``django-admin`` utility
|
||||||
|
@ -116,7 +116,7 @@ generate signatures. You can use a different secret by passing it to the
|
|||||||
separate values. ``sep`` cannot be in the :rfc:`URL safe base64 alphabet
|
separate values. ``sep`` cannot be in the :rfc:`URL safe base64 alphabet
|
||||||
<4648#section-5>`. This alphabet contains alphanumeric characters, hyphens,
|
<4648#section-5>`. This alphabet contains alphanumeric characters, hyphens,
|
||||||
and underscores. ``algorithm`` must be an algorithm supported by
|
and underscores. ``algorithm`` must be an algorithm supported by
|
||||||
:py:mod:`hashlib`, it defaults to ``'sha256'``. ``fallback_keys`` is a list
|
:mod:`hashlib`, it defaults to ``'sha256'``. ``fallback_keys`` is a list
|
||||||
of additional values used to validate signed data, defaults to
|
of additional values used to validate signed data, defaults to
|
||||||
:setting:`SECRET_KEY_FALLBACKS`.
|
:setting:`SECRET_KEY_FALLBACKS`.
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ created within a specified period of time:
|
|||||||
|
|
||||||
Checks if ``value`` was signed less than ``max_age`` seconds ago,
|
Checks if ``value`` was signed less than ``max_age`` seconds ago,
|
||||||
otherwise raises ``SignatureExpired``. The ``max_age`` parameter can
|
otherwise raises ``SignatureExpired``. The ``max_age`` parameter can
|
||||||
accept an integer or a :py:class:`datetime.timedelta` object.
|
accept an integer or a :class:`datetime.timedelta` object.
|
||||||
|
|
||||||
.. method:: sign_object(obj, serializer=JSONSerializer, compress=False)
|
.. method:: sign_object(obj, serializer=JSONSerializer, compress=False)
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ created within a specified period of time:
|
|||||||
|
|
||||||
Checks if ``signed_obj`` was signed less than ``max_age`` seconds ago,
|
Checks if ``signed_obj`` was signed less than ``max_age`` seconds ago,
|
||||||
otherwise raises ``SignatureExpired``. The ``max_age`` parameter can
|
otherwise raises ``SignatureExpired``. The ``max_age`` parameter can
|
||||||
accept an integer or a :py:class:`datetime.timedelta` object.
|
accept an integer or a :class:`datetime.timedelta` object.
|
||||||
|
|
||||||
.. _signing-complex-data:
|
.. _signing-complex-data:
|
||||||
|
|
||||||
|
@ -660,7 +660,7 @@ adds defaults that differ from Jinja2's for a few options:
|
|||||||
is more in line with the design of Jinja2.
|
is more in line with the design of Jinja2.
|
||||||
|
|
||||||
The default configuration is purposefully kept to a minimum. If a template is
|
The default configuration is purposefully kept to a minimum. If a template is
|
||||||
rendered with a request (e.g. when using :py:func:`~django.shortcuts.render`),
|
rendered with a request (e.g. when using :func:`~django.shortcuts.render`),
|
||||||
the ``Jinja2`` backend adds the globals ``request``, ``csrf_input``, and
|
the ``Jinja2`` backend adds the globals ``request``, ``csrf_input``, and
|
||||||
``csrf_token`` to the context. Apart from that, this backend doesn't create a
|
``csrf_token`` to the context. Apart from that, this backend doesn't create a
|
||||||
Django-flavored environment. It doesn't know about Django filters and tags.
|
Django-flavored environment. It doesn't know about Django filters and tags.
|
||||||
|
@ -587,7 +587,7 @@ and tear down the test suite.
|
|||||||
|
|
||||||
If ``buffer`` is ``True``, outputs from passing tests will be discarded.
|
If ``buffer`` is ``True``, outputs from passing tests will be discarded.
|
||||||
|
|
||||||
If ``enable_faulthandler`` is ``True``, :py:mod:`faulthandler` will be
|
If ``enable_faulthandler`` is ``True``, :mod:`faulthandler` will be
|
||||||
enabled.
|
enabled.
|
||||||
|
|
||||||
If ``timing`` is ``True``, test timings, including database setup and total
|
If ``timing`` is ``True``, test timings, including database setup and total
|
||||||
@ -601,7 +601,7 @@ and tear down the test suite.
|
|||||||
:ref:`Grouping by test class <order-of-tests>` is preserved when using this
|
:ref:`Grouping by test class <order-of-tests>` is preserved when using this
|
||||||
option.
|
option.
|
||||||
|
|
||||||
``logger`` can be used to pass a Python :py:ref:`Logger object <logger>`.
|
``logger`` can be used to pass a Python :ref:`Logger object <logger>`.
|
||||||
If provided, the logger will be used to log messages instead of printing to
|
If provided, the logger will be used to log messages instead of printing to
|
||||||
the console. The logger object will respect its logging level rather than
|
the console. The logger object will respect its logging level rather than
|
||||||
the ``verbosity``.
|
the ``verbosity``.
|
||||||
@ -661,7 +661,7 @@ Methods
|
|||||||
|
|
||||||
Override this class method to add custom arguments accepted by the
|
Override this class method to add custom arguments accepted by the
|
||||||
:djadmin:`test` management command. See
|
:djadmin:`test` management command. See
|
||||||
:py:meth:`argparse.ArgumentParser.add_argument` for details about adding
|
:meth:`argparse.ArgumentParser.add_argument` for details about adding
|
||||||
arguments to a parser.
|
arguments to a parser.
|
||||||
|
|
||||||
.. method:: DiscoverRunner.setup_test_environment(**kwargs)
|
.. method:: DiscoverRunner.setup_test_environment(**kwargs)
|
||||||
|
@ -83,7 +83,7 @@ your project's ``manage.py`` utility:
|
|||||||
|
|
||||||
$ ./manage.py test
|
$ ./manage.py test
|
||||||
|
|
||||||
Test discovery is based on the unittest module's :py:ref:`built-in test
|
Test discovery is based on the unittest module's :ref:`built-in test
|
||||||
discovery <unittest-test-discovery>`. By default, this will discover tests in
|
discovery <unittest-test-discovery>`. By default, this will discover tests in
|
||||||
any file named ``test*.py`` under the current working directory.
|
any file named ``test*.py`` under the current working directory.
|
||||||
|
|
||||||
|
@ -965,7 +965,7 @@ It also provides an additional method:
|
|||||||
called before each test, negating the speed benefits.
|
called before each test, negating the speed benefits.
|
||||||
|
|
||||||
Objects assigned to class attributes in ``setUpTestData()`` must support
|
Objects assigned to class attributes in ``setUpTestData()`` must support
|
||||||
creating deep copies with :py:func:`copy.deepcopy` in order to isolate them
|
creating deep copies with :func:`copy.deepcopy` in order to isolate them
|
||||||
from alterations performed by each test methods.
|
from alterations performed by each test methods.
|
||||||
|
|
||||||
.. classmethod:: TestCase.captureOnCommitCallbacks(using=DEFAULT_DB_ALIAS, execute=False)
|
.. classmethod:: TestCase.captureOnCommitCallbacks(using=DEFAULT_DB_ALIAS, execute=False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user