mirror of
https://github.com/django/django.git
synced 2025-06-05 03:29:12 +00:00
Merge branch 'django:main' into ticket-27106
This commit is contained in:
commit
a7435a5281
4
.github/workflows/schedule_tests.yml
vendored
4
.github/workflows/schedule_tests.yml
vendored
@ -200,10 +200,10 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
version: [16, 17rc1]
|
version: [16, 17]
|
||||||
server_side_bindings: [0, 1]
|
server_side_bindings: [0, 1]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Newer PostgreSQL Versions
|
name: PostgreSQL Versions
|
||||||
env:
|
env:
|
||||||
SERVER_SIDE_BINDING: ${{ matrix.server_side_bindings }}
|
SERVER_SIDE_BINDING: ${{ matrix.server_side_bindings }}
|
||||||
services:
|
services:
|
||||||
|
@ -58,7 +58,6 @@ TEMPLATES = [
|
|||||||
'APP_DIRS': True,
|
'APP_DIRS': True,
|
||||||
'OPTIONS': {
|
'OPTIONS': {
|
||||||
'context_processors': [
|
'context_processors': [
|
||||||
'django.template.context_processors.debug',
|
|
||||||
'django.template.context_processors.request',
|
'django.template.context_processors.request',
|
||||||
'django.contrib.auth.context_processors.auth',
|
'django.contrib.auth.context_processors.auth',
|
||||||
'django.contrib.messages.context_processors.messages',
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
@ -275,6 +275,8 @@ include the URLconf defined in ``polls.urls``. To do this, add an import for
|
|||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
The :func:`~django.urls.path` function expects at least two arguments:
|
||||||
|
``route`` and ``view``.
|
||||||
The :func:`~django.urls.include` function allows referencing other URLconfs.
|
The :func:`~django.urls.include` function allows referencing other URLconfs.
|
||||||
Whenever Django encounters :func:`~django.urls.include`, it chops off whatever
|
Whenever Django encounters :func:`~django.urls.include`, it chops off whatever
|
||||||
part of the URL matched up to that point and sends the remaining string to the
|
part of the URL matched up to that point and sends the remaining string to the
|
||||||
@ -307,45 +309,6 @@ text "*Hello, world. You're at the polls index.*", which you defined in the
|
|||||||
If you get an error page here, check that you're going to
|
If you get an error page here, check that you're going to
|
||||||
http://localhost:8000/polls/ and not http://localhost:8000/.
|
http://localhost:8000/polls/ and not http://localhost:8000/.
|
||||||
|
|
||||||
The :func:`~django.urls.path` function is passed four arguments, two required:
|
|
||||||
``route`` and ``view``, and two optional: ``kwargs``, and ``name``.
|
|
||||||
At this point, it's worth reviewing what these arguments are for.
|
|
||||||
|
|
||||||
:func:`~django.urls.path` argument: ``route``
|
|
||||||
---------------------------------------------
|
|
||||||
|
|
||||||
``route`` is a string that contains a URL pattern. When processing a request,
|
|
||||||
Django starts at the first pattern in ``urlpatterns`` and makes its way down
|
|
||||||
the list, comparing the requested URL against each pattern until it finds one
|
|
||||||
that matches.
|
|
||||||
|
|
||||||
Patterns don't search GET and POST parameters, or the domain name. For example,
|
|
||||||
in a request to ``https://www.example.com/myapp/``, the URLconf will look for
|
|
||||||
``myapp/``. In a request to ``https://www.example.com/myapp/?page=3``, the
|
|
||||||
URLconf will also look for ``myapp/``.
|
|
||||||
|
|
||||||
:func:`~django.urls.path` argument: ``view``
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
When Django finds a matching pattern, it calls the specified view function with
|
|
||||||
an :class:`~django.http.HttpRequest` object as the first argument and any
|
|
||||||
"captured" values from the route as keyword arguments. We'll give an example
|
|
||||||
of this in a bit.
|
|
||||||
|
|
||||||
:func:`~django.urls.path` argument: ``kwargs``
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
Arbitrary keyword arguments can be passed in a dictionary to the target view. We
|
|
||||||
aren't going to use this feature of Django in the tutorial.
|
|
||||||
|
|
||||||
:func:`~django.urls.path` argument: ``name``
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
Naming your URL lets you refer to it unambiguously from elsewhere in Django,
|
|
||||||
especially from within templates. This powerful feature allows you to make
|
|
||||||
global changes to the URL patterns of your project while only touching a single
|
|
||||||
file.
|
|
||||||
|
|
||||||
When you're comfortable with the basic request and response flow, read
|
When you're comfortable with the basic request and response flow, read
|
||||||
:doc:`part 2 of this tutorial </intro/tutorial02>` to start working with the
|
:doc:`part 2 of this tutorial </intro/tutorial02>` to start working with the
|
||||||
database.
|
database.
|
||||||
|
@ -324,7 +324,6 @@ Open your settings file (:file:`mysite/settings.py`, remember) and add a
|
|||||||
"APP_DIRS": True,
|
"APP_DIRS": True,
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"context_processors": [
|
"context_processors": [
|
||||||
"django.template.context_processors.debug",
|
|
||||||
"django.template.context_processors.request",
|
"django.template.context_processors.request",
|
||||||
"django.contrib.auth.context_processors.auth",
|
"django.contrib.auth.context_processors.auth",
|
||||||
"django.contrib.messages.context_processors.messages",
|
"django.contrib.messages.context_processors.messages",
|
||||||
|
@ -34,6 +34,12 @@ defines. See the :doc:`cache documentation </topics/cache>`.
|
|||||||
|
|
||||||
.. class:: CommonMiddleware
|
.. class:: CommonMiddleware
|
||||||
|
|
||||||
|
.. attribute:: response_redirect_class
|
||||||
|
|
||||||
|
Defaults to :class:`~django.http.HttpResponsePermanentRedirect`. Subclass
|
||||||
|
``CommonMiddleware`` and override the attribute to customize the redirects
|
||||||
|
issued by the middleware.
|
||||||
|
|
||||||
Adds a few conveniences for perfectionists:
|
Adds a few conveniences for perfectionists:
|
||||||
|
|
||||||
* Forbids access to user agents in the :setting:`DISALLOWED_USER_AGENTS`
|
* Forbids access to user agents in the :setting:`DISALLOWED_USER_AGENTS`
|
||||||
@ -75,12 +81,6 @@ Adds a few conveniences for perfectionists:
|
|||||||
|
|
||||||
* Sets the ``Content-Length`` header for non-streaming responses.
|
* Sets the ``Content-Length`` header for non-streaming responses.
|
||||||
|
|
||||||
.. attribute:: CommonMiddleware.response_redirect_class
|
|
||||||
|
|
||||||
Defaults to :class:`~django.http.HttpResponsePermanentRedirect`. Subclass
|
|
||||||
``CommonMiddleware`` and override the attribute to customize the redirects
|
|
||||||
issued by the middleware.
|
|
||||||
|
|
||||||
.. class:: BrokenLinkEmailsMiddleware
|
.. class:: BrokenLinkEmailsMiddleware
|
||||||
|
|
||||||
* Sends broken link notification emails to :setting:`MANAGERS` (see
|
* Sends broken link notification emails to :setting:`MANAGERS` (see
|
||||||
@ -164,16 +164,16 @@ Locale middleware
|
|||||||
|
|
||||||
.. class:: LocaleMiddleware
|
.. class:: LocaleMiddleware
|
||||||
|
|
||||||
|
.. attribute:: LocaleMiddleware.response_redirect_class
|
||||||
|
|
||||||
|
Defaults to :class:`~django.http.HttpResponseRedirect`. Subclass
|
||||||
|
``LocaleMiddleware`` and override the attribute to customize the
|
||||||
|
redirects issued by the middleware.
|
||||||
|
|
||||||
Enables language selection based on data from the request. It customizes
|
Enables language selection based on data from the request. It customizes
|
||||||
content for each user. See the :doc:`internationalization documentation
|
content for each user. See the :doc:`internationalization documentation
|
||||||
</topics/i18n/translation>`.
|
</topics/i18n/translation>`.
|
||||||
|
|
||||||
.. attribute:: LocaleMiddleware.response_redirect_class
|
|
||||||
|
|
||||||
Defaults to :class:`~django.http.HttpResponseRedirect`. Subclass
|
|
||||||
``LocaleMiddleware`` and override the attribute to customize the redirects
|
|
||||||
issued by the middleware.
|
|
||||||
|
|
||||||
Message middleware
|
Message middleware
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
@ -500,6 +500,29 @@ every incoming ``HttpRequest`` object. See :ref:`Authentication in web requests
|
|||||||
|
|
||||||
.. class:: LoginRequiredMiddleware
|
.. class:: LoginRequiredMiddleware
|
||||||
|
|
||||||
|
Subclass the middleware and override the following attributes and methods
|
||||||
|
to customize behavior for unauthenticated requests.
|
||||||
|
|
||||||
|
.. attribute:: redirect_field_name
|
||||||
|
|
||||||
|
Defaults to ``"next"``.
|
||||||
|
|
||||||
|
.. method:: get_login_url()
|
||||||
|
|
||||||
|
Returns the URL that unauthenticated requests will be redirected to. This
|
||||||
|
result is either the ``login_url`` set on the
|
||||||
|
:func:`~django.contrib.auth.decorators.login_required` decorator (if not
|
||||||
|
``None``), or :setting:`settings.LOGIN_URL <LOGIN_URL>`.
|
||||||
|
|
||||||
|
.. method:: get_redirect_field_name()
|
||||||
|
|
||||||
|
Returns the name of the query parameter that contains the URL the user
|
||||||
|
should be redirected to after a successful login. This result is either
|
||||||
|
the ``redirect_field_name`` set on the
|
||||||
|
:func:`~.django.contrib.auth.decorators.login_required` decorator (if not
|
||||||
|
``None``), or :attr:`redirect_field_name`. If ``None`` is returned, a query
|
||||||
|
parameter won't be added.
|
||||||
|
|
||||||
.. versionadded:: 5.1
|
.. versionadded:: 5.1
|
||||||
|
|
||||||
Redirects all unauthenticated requests to a login page, except for views
|
Redirects all unauthenticated requests to a login page, except for views
|
||||||
@ -552,31 +575,6 @@ Customize the login URL or field name for authenticated views with the
|
|||||||
:ref:`enabled unauthenticated requests
|
:ref:`enabled unauthenticated requests
|
||||||
<disable-login-required-middleware-for-views>` to your login view.
|
<disable-login-required-middleware-for-views>` to your login view.
|
||||||
|
|
||||||
**Methods and Attributes**
|
|
||||||
|
|
||||||
Subclass the middleware and override these to customize behavior for
|
|
||||||
unauthenticated requests.
|
|
||||||
|
|
||||||
.. attribute:: redirect_field_name
|
|
||||||
|
|
||||||
Defaults to ``"next"``.
|
|
||||||
|
|
||||||
.. method:: get_login_url()
|
|
||||||
|
|
||||||
Returns the URL that unauthenticated requests will be redirected to. If
|
|
||||||
defined, this returns the ``login_url`` set on the
|
|
||||||
:func:`~.django.contrib.auth.decorators.login_required` decorator. Defaults
|
|
||||||
to :setting:`settings.LOGIN_URL <LOGIN_URL>`.
|
|
||||||
|
|
||||||
.. method:: get_redirect_field_name()
|
|
||||||
|
|
||||||
Returns the name of the query parameter that contains the URL the user
|
|
||||||
should be redirected to after a successful login. If defined, this returns
|
|
||||||
the ``redirect_field_name`` set on the
|
|
||||||
:func:`~.django.contrib.auth.decorators.login_required` decorator. Defaults
|
|
||||||
to :attr:`redirect_field_name`. If ``None`` is returned, a query parameter
|
|
||||||
won't be added.
|
|
||||||
|
|
||||||
.. class:: RemoteUserMiddleware
|
.. class:: RemoteUserMiddleware
|
||||||
|
|
||||||
Middleware for utilizing web server provided authentication. See
|
Middleware for utilizing web server provided authentication. See
|
||||||
|
@ -660,7 +660,6 @@ settings file, the default template engine contains the following context
|
|||||||
processors::
|
processors::
|
||||||
|
|
||||||
[
|
[
|
||||||
"django.template.context_processors.debug",
|
|
||||||
"django.template.context_processors.request",
|
"django.template.context_processors.request",
|
||||||
"django.contrib.auth.context_processors.auth",
|
"django.contrib.auth.context_processors.auth",
|
||||||
"django.contrib.messages.context_processors.messages",
|
"django.contrib.messages.context_processors.messages",
|
||||||
|
@ -25,6 +25,9 @@ Returns an element for inclusion in ``urlpatterns``. For example::
|
|||||||
...,
|
...,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
``route``
|
||||||
|
---------
|
||||||
|
|
||||||
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 URL pattern. The string
|
:ref:`translating-urlpatterns`) that contains a URL pattern. The string
|
||||||
@ -33,16 +36,43 @@ URL and send it as a keyword argument to the view. The angle brackets may
|
|||||||
include a converter specification (like the ``int`` part of ``<int:section>``)
|
include a converter specification (like the ``int`` part of ``<int:section>``)
|
||||||
which limits the characters matched and may also change the type of the
|
which limits the characters matched and may also change the type of the
|
||||||
variable passed to the view. For example, ``<int:section>`` matches a string
|
variable passed to the view. For example, ``<int:section>`` matches a string
|
||||||
of decimal digits and converts the value to an ``int``. See
|
of decimal digits and converts the value to an ``int``.
|
||||||
|
|
||||||
|
When processing a request, Django starts at the first pattern in
|
||||||
|
``urlpatterns`` and makes its way down the list, comparing the requested URL
|
||||||
|
against each pattern until it finds one that matches. See
|
||||||
:ref:`how-django-processes-a-request` for more details.
|
:ref:`how-django-processes-a-request` for more details.
|
||||||
|
|
||||||
|
Patterns don't match GET and POST parameters, or the domain name. For example,
|
||||||
|
in a request to ``https://www.example.com/myapp/``, the URLconf will look for
|
||||||
|
``myapp/``. In a request to ``https://www.example.com/myapp/?page=3``, the
|
||||||
|
URLconf will also look for ``myapp/``.
|
||||||
|
|
||||||
|
``view``
|
||||||
|
--------
|
||||||
|
|
||||||
The ``view`` argument is a view function or the result of
|
The ``view`` argument is a view function or the result of
|
||||||
:meth:`~django.views.generic.base.View.as_view` for class-based views. It can
|
:meth:`~django.views.generic.base.View.as_view` for class-based views. It can
|
||||||
also be an :func:`django.urls.include`.
|
also be a :func:`django.urls.include`.
|
||||||
|
|
||||||
|
When Django finds a matching pattern, it calls the specified view function with
|
||||||
|
an :class:`~django.http.HttpRequest` object as the first argument and any
|
||||||
|
"captured" values from the route as keyword arguments.
|
||||||
|
|
||||||
|
``kwargs``
|
||||||
|
----------
|
||||||
|
|
||||||
The ``kwargs`` argument allows you to pass additional arguments to the view
|
The ``kwargs`` argument allows you to pass additional arguments to the view
|
||||||
function or method. See :ref:`views-extra-options` for an example.
|
function or method. See :ref:`views-extra-options` for an example.
|
||||||
|
|
||||||
|
``name``
|
||||||
|
--------
|
||||||
|
|
||||||
|
Naming your URL lets you refer to it unambiguously from elsewhere in Django,
|
||||||
|
especially from within templates. This powerful feature allows you to make
|
||||||
|
global changes to the URL patterns of your project while only touching a single
|
||||||
|
file.
|
||||||
|
|
||||||
See :ref:`Naming URL patterns <naming-url-patterns>` for why the ``name``
|
See :ref:`Naming URL patterns <naming-url-patterns>` for why the ``name``
|
||||||
argument is useful.
|
argument is useful.
|
||||||
|
|
||||||
|
@ -328,6 +328,9 @@ Miscellaneous
|
|||||||
* ``HttpRequest.accepted_types`` is now sorted by the client's preference, based
|
* ``HttpRequest.accepted_types`` is now sorted by the client's preference, based
|
||||||
on the request's ``Accept`` header.
|
on the request's ``Accept`` header.
|
||||||
|
|
||||||
|
* The :func:`~django.template.context_processors.debug` context processor is no
|
||||||
|
longer included in the default project template.
|
||||||
|
|
||||||
.. _deprecated-features-5.2:
|
.. _deprecated-features-5.2:
|
||||||
|
|
||||||
Features deprecated in 5.2
|
Features deprecated in 5.2
|
||||||
|
@ -1686,7 +1686,6 @@ class AdminViewBasicTest(AdminViewBasicTestCase):
|
|||||||
"APP_DIRS": True,
|
"APP_DIRS": True,
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"context_processors": [
|
"context_processors": [
|
||||||
"django.template.context_processors.debug",
|
|
||||||
"django.template.context_processors.request",
|
"django.template.context_processors.request",
|
||||||
"django.contrib.auth.context_processors.auth",
|
"django.contrib.auth.context_processors.auth",
|
||||||
"django.contrib.messages.context_processors.messages",
|
"django.contrib.messages.context_processors.messages",
|
||||||
@ -7695,7 +7694,6 @@ class AdminDocsTest(TestCase):
|
|||||||
"APP_DIRS": True,
|
"APP_DIRS": True,
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"context_processors": [
|
"context_processors": [
|
||||||
"django.template.context_processors.debug",
|
|
||||||
"django.template.context_processors.request",
|
"django.template.context_processors.request",
|
||||||
"django.contrib.auth.context_processors.auth",
|
"django.contrib.auth.context_processors.auth",
|
||||||
"django.contrib.messages.context_processors.messages",
|
"django.contrib.messages.context_processors.messages",
|
||||||
|
@ -221,7 +221,6 @@ def setup_collect_tests(start_at, start_after, test_labels=None):
|
|||||||
"APP_DIRS": True,
|
"APP_DIRS": True,
|
||||||
"OPTIONS": {
|
"OPTIONS": {
|
||||||
"context_processors": [
|
"context_processors": [
|
||||||
"django.template.context_processors.debug",
|
|
||||||
"django.template.context_processors.request",
|
"django.template.context_processors.request",
|
||||||
"django.contrib.auth.context_processors.auth",
|
"django.contrib.auth.context_processors.auth",
|
||||||
"django.contrib.messages.context_processors.messages",
|
"django.contrib.messages.context_processors.messages",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user