docs: Update Django links to our current version.

This commit is contained in:
Alex Vandiver 2024-05-24 14:57:31 +00:00 committed by Tim Abbott
parent 0ce79c8c50
commit 5c2fd1de5a
28 changed files with 39 additions and 39 deletions

View File

@ -144,7 +144,7 @@ You should name your webhook function as such
integration and is always lower-case. integration and is always lower-case.
At minimum, the webhook function must accept `request` (Django At minimum, the webhook function must accept `request` (Django
[HttpRequest](https://docs.djangoproject.com/en/3.2/ref/request-response/#django.http.HttpRequest) [HttpRequest](https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpRequest)
object), and `user_profile` (Zulip's user object). You may also want to object), and `user_profile` (Zulip's user object). You may also want to
define additional parameters using the `REQ` object. define additional parameters using the `REQ` object.

View File

@ -254,7 +254,7 @@ for bar in bars:
...which makes a database query for every `Bar`. While this may be fast ...which makes a database query for every `Bar`. While this may be fast
locally in development, it may be quite slow in production! Instead, locally in development, it may be quite slow in production! Instead,
tell Django's [QuerySet tell Django's [QuerySet
API](https://docs.djangoproject.com/en/dev/ref/models/querysets/) to API](https://docs.djangoproject.com/en/5.0/ref/models/querysets/) to
_prefetch_ the data in the initial query: _prefetch_ the data in the initial query:
```python ```python

View File

@ -94,7 +94,7 @@ for mobile development][mobile-dev-server].
[rest-api]: https://zulip.com/api/rest [rest-api]: https://zulip.com/api/rest
[authentication-dev-server]: authentication.md [authentication-dev-server]: authentication.md
[django-runserver]: https://docs.djangoproject.com/en/3.2/ref/django-admin/#runserver [django-runserver]: https://docs.djangoproject.com/en/5.0/ref/django-admin/#runserver
[new-feature-tutorial]: ../tutorials/new-feature-tutorial.md [new-feature-tutorial]: ../tutorials/new-feature-tutorial.md
[testing-docs]: ../testing/testing.md [testing-docs]: ../testing/testing.md
[mobile-dev-server]: https://github.com/zulip/zulip-mobile/blob/main/docs/howto/dev-server.md#using-a-dev-version-of-the-server [mobile-dev-server]: https://github.com/zulip/zulip-mobile/blob/main/docs/howto/dev-server.md#using-a-dev-version-of-the-server

View File

@ -10,15 +10,15 @@ flow through these files.
### Core Python files ### Core Python files
Zulip uses the [Django web Zulip uses the [Django web
framework](https://docs.djangoproject.com/en/3.2/), so a lot of these framework](https://docs.djangoproject.com/en/5.0/), so a lot of these
paths will be familiar to Django developers. paths will be familiar to Django developers.
- `zproject/urls.py` Main - `zproject/urls.py` Main
[Django routes file](https://docs.djangoproject.com/en/3.2/topics/http/urls/). [Django routes file](https://docs.djangoproject.com/en/5.0/topics/http/urls/).
Defines which URLs are handled by which view functions or templates. Defines which URLs are handled by which view functions or templates.
- `zerver/models/*.py` - `zerver/models/*.py`
[Django models](https://docs.djangoproject.com/en/3.2/topics/db/models/) [Django models](https://docs.djangoproject.com/en/5.0/topics/db/models/)
files. Defines Zulip's database tables. files. Defines Zulip's database tables.
- `zerver/lib/*.py` Most library code. - `zerver/lib/*.py` Most library code.
@ -28,7 +28,7 @@ paths will be familiar to Django developers.
all code calling `send_event` to trigger [pushing data to all code calling `send_event` to trigger [pushing data to
clients](../subsystems/events-system.md) must live here. clients](../subsystems/events-system.md) must live here.
- `zerver/views/*.py` Most [Django views](https://docs.djangoproject.com/en/3.2/topics/http/views/). - `zerver/views/*.py` Most [Django views](https://docs.djangoproject.com/en/5.0/topics/http/views/).
- `zerver/webhooks/` Webhook views and tests for [Zulip's incoming webhook integrations](https://zulip.com/api/incoming-webhooks-overview). - `zerver/webhooks/` Webhook views and tests for [Zulip's incoming webhook integrations](https://zulip.com/api/incoming-webhooks-overview).
@ -38,7 +38,7 @@ paths will be familiar to Django developers.
- `zerver/lib/markdown/` [Backend Markdown processor](../subsystems/markdown.md). - `zerver/lib/markdown/` [Backend Markdown processor](../subsystems/markdown.md).
- `zproject/backends.py` [Authentication backends](https://docs.djangoproject.com/en/3.2/topics/auth/customizing/). - `zproject/backends.py` [Authentication backends](https://docs.djangoproject.com/en/5.0/topics/auth/customizing/).
--- ---

View File

@ -1169,7 +1169,7 @@ reject authentication requests e.g. based on IP address of the
request, this is where it should happen. request, this is where it should happen.
::: :::
[django-authenticate-details]: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#writing-an-authentication-backend [django-authenticate-details]: https://docs.djangoproject.com/en/5.0/topics/auth/customizing/#writing-an-authentication-backend
## Adding more authentication backends ## Adding more authentication backends

View File

@ -207,7 +207,7 @@ aren't receiving emails from Zulip:
will try to use the TLS protocol on port 465, which won't work. will try to use the TLS protocol on port 465, which won't work.
- Zulip's email sending configuration is based on the standard Django - Zulip's email sending configuration is based on the standard Django
[SMTP backend](https://docs.djangoproject.com/en/3.2/topics/email/#smtp-backend) [SMTP backend](https://docs.djangoproject.com/en/5.0/topics/email/#smtp-backend)
configuration. So if you're having trouble getting your email configuration. So if you're having trouble getting your email
provider working, you may want to search for documentation related provider working, you may want to search for documentation related
to using your email provider with Django. to using your email provider with Django.

View File

@ -185,4 +185,4 @@ upgrade.
[zulip-api]: https://zulip.com/api/rest [zulip-api]: https://zulip.com/api/rest
[webhook-integrations]: https://zulip.com/api/incoming-webhooks-overview [webhook-integrations]: https://zulip.com/api/incoming-webhooks-overview
[management-commands-dev]: ../subsystems/management-commands.md [management-commands-dev]: ../subsystems/management-commands.md
[django-management]: https://docs.djangoproject.com/en/3.2/ref/django-admin/#django-admin-and-manage-py [django-management]: https://docs.djangoproject.com/en/5.0/ref/django-admin/#django-admin-and-manage-py

View File

@ -263,4 +263,4 @@ cached by clients is changed. Clients are responsible for handling
the events, updating their state, and rerendering any UI components the events, updating their state, and rerendering any UI components
that might display the modified state. that might display the modified state.
[post-save-signals]: https://docs.djangoproject.com/en/3.2/ref/signals/#post-save [post-save-signals]: https://docs.djangoproject.com/en/5.0/ref/signals/#post-save

View File

@ -29,7 +29,7 @@ The `webhook_view` auth decorator, used for most incoming
webhooks, accepts the name of the integration as an argument and uses webhooks, accepts the name of the integration as an argument and uses
it to generate a client name that it adds to the `request_notes` it to generate a client name that it adds to the `request_notes`
object that can be accessed with the `request` (Django object that can be accessed with the `request` (Django
[HttpRequest](https://docs.djangoproject.com/en/3.2/ref/request-response/#django.http.HttpRequest)) [HttpRequest](https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpRequest))
object via `zerver.lib.request.get_request_notes(request)`. object via `zerver.lib.request.get_request_notes(request)`.
In most integrations, `request_notes.client` is then passed to In most integrations, `request_notes.client` is then passed to

View File

@ -267,5 +267,5 @@ a new view:
(intended to catch issues where we generate a lot of deferred work). (intended to catch issues where we generate a lot of deferred work).
[python-logging]: https://docs.python.org/3/library/logging.html [python-logging]: https://docs.python.org/3/library/logging.html
[django-logging]: https://docs.djangoproject.com/en/3.2/topics/logging/ [django-logging]: https://docs.djangoproject.com/en/5.0/topics/logging/
[sentry]: https://sentry.io [sentry]: https://sentry.io

View File

@ -62,4 +62,4 @@ to do anything special like restart the server when iteratively
testing one, even if testing in a Zulip production environment where testing one, even if testing in a Zulip production environment where
the server doesn't normally restart whenever a file is edited. the server doesn't normally restart whenever a file is edited.
[django-docs]: https://docs.djangoproject.com/en/3.2/howto/custom-management-commands/ [django-docs]: https://docs.djangoproject.com/en/5.0/howto/custom-management-commands/

View File

@ -1,7 +1,7 @@
# Schema migrations # Schema migrations
Zulip uses the [standard Django system for doing schema Zulip uses the [standard Django system for doing schema
migrations](https://docs.djangoproject.com/en/3.2/topics/migrations/). migrations](https://docs.djangoproject.com/en/5.0/topics/migrations/).
There is some example usage in the [new feature There is some example usage in the [new feature
tutorial](../tutorials/new-feature-tutorial.md). tutorial](../tutorials/new-feature-tutorial.md).
@ -171,7 +171,7 @@ an incorrect migration messes up a database in a way that's impossible
to undo without going to backups. to undo without going to backups.
[django-migration-test-blog-post]: https://www.caktusgroup.com/blog/2016/02/02/writing-unit-tests-django-migrations/ [django-migration-test-blog-post]: https://www.caktusgroup.com/blog/2016/02/02/writing-unit-tests-django-migrations/
[migrations-non-atomic]: https://docs.djangoproject.com/en/3.2/howto/writing-migrations/#non-atomic-migrations [migrations-non-atomic]: https://docs.djangoproject.com/en/5.0/howto/writing-migrations/#non-atomic-migrations
## Schema and initial data changes ## Schema and initial data changes

View File

@ -26,7 +26,7 @@ convenient for:
## Server settings ## Server settings
Zulip uses the [Django settings Zulip uses the [Django settings
system](https://docs.djangoproject.com/en/3.2/topics/settings/), which system](https://docs.djangoproject.com/en/5.0/topics/settings/), which
means that the settings files are Python programs that set a lot of means that the settings files are Python programs that set a lot of
variables with all-capital names like `EMAIL_GATEWAY_PATTERN`. You can variables with all-capital names like `EMAIL_GATEWAY_PATTERN`. You can
access these anywhere in the Zulip Django code using e.g.: access these anywhere in the Zulip Django code using e.g.:
@ -159,7 +159,7 @@ accessed in initialization of Django (or Zulip) internals
(e.g. `DATABASES`). See the [Django docs on overriding settings in (e.g. `DATABASES`). See the [Django docs on overriding settings in
tests][django-test-settings] for more details. tests][django-test-settings] for more details.
[django-test-settings]: https://docs.djangoproject.com/en/3.2/topics/testing/tools/#overriding-settings [django-test-settings]: https://docs.djangoproject.com/en/5.0/topics/testing/tools/#overriding-settings
## Realm settings ## Realm settings

View File

@ -209,7 +209,7 @@ option of Puppet.
Zulip uses two HTML templating systems: Zulip uses two HTML templating systems:
- [Django templates](https://docs.djangoproject.com/en/3.2/topics/templates/) - [Django templates](https://docs.djangoproject.com/en/5.0/topics/templates/)
- [handlebars](https://handlebarsjs.com/) - [handlebars](https://handlebarsjs.com/)
Zulip has an internal tool that validates both types of templates for Zulip has an internal tool that validates both types of templates for

View File

@ -4,7 +4,7 @@
Zulip uses the Django framework for its Python backend. We Zulip uses the Django framework for its Python backend. We
use the testing framework from use the testing framework from
[django.test](https://docs.djangoproject.com/en/3.2/topics/testing/) [django.test](https://docs.djangoproject.com/en/5.0/topics/testing/)
to test our code. We have thousands of automated tests that verify that to test our code. We have thousands of automated tests that verify that
our backend works as expected. our backend works as expected.

View File

@ -54,7 +54,7 @@ application.
## Django routes the request to a view in urls.py files ## Django routes the request to a view in urls.py files
There are various There are various
[urls.py](https://docs.djangoproject.com/en/3.2/topics/http/urls/) [urls.py](https://docs.djangoproject.com/en/5.0/topics/http/urls/)
files throughout the server codebase, which are covered in more detail files throughout the server codebase, which are covered in more detail
in in
[the directory structure doc](../overview/directory-structure.md). [the directory structure doc](../overview/directory-structure.md).
@ -171,7 +171,7 @@ PUT=create_user_backend
``` ```
are supplied as arguments to `rest_path`, along with the are supplied as arguments to `rest_path`, along with the
[HTTPRequest](https://docs.djangoproject.com/en/3.2/ref/request-response/). [HTTPRequest](https://docs.djangoproject.com/en/5.0/ref/request-response/).
The request has the HTTP verb `PUT`, which `rest_dispatch` can use to The request has the HTTP verb `PUT`, which `rest_dispatch` can use to
find the correct view to show: find the correct view to show:
`zerver.views.users.create_user_backend`. `zerver.views.users.create_user_backend`.
@ -190,14 +190,14 @@ Our API works on JSON requests and responses. Every API endpoint should
``` ```
in a [Django HttpResponse in a [Django HttpResponse
object](https://docs.djangoproject.com/en/3.2/ref/request-response/) object](https://docs.djangoproject.com/en/5.0/ref/request-response/)
with a `Content-Type` of 'application/json'. with a `Content-Type` of 'application/json'.
To pass back data from the server to the calling client, in the event of To pass back data from the server to the calling client, in the event of
a successfully handled request, we use `json_success(request, data)`. a successfully handled request, we use `json_success(request, data)`.
The `request` argument is a [Django HttpRequest The `request` argument is a [Django HttpRequest
object](https://docs.djangoproject.com/en/3.2/ref/request-response/). object](https://docs.djangoproject.com/en/5.0/ref/request-response/).
The `data` argument is a Python object which can be converted to a JSON The `data` argument is a Python object which can be converted to a JSON
string and has a default value of an empty Python dictionary. string and has a default value of an empty Python dictionary.

View File

@ -20,7 +20,7 @@ tests, use Django's tooling.
Zulip's [directory structure](../overview/directory-structure.md) Zulip's [directory structure](../overview/directory-structure.md)
will also be helpful to review when creating a new feature. Many will also be helpful to review when creating a new feature. Many
aspects of the structure will be familiar to Django developers. Visit aspects of the structure will be familiar to Django developers. Visit
[Django's documentation](https://docs.djangoproject.com/en/3.2/#index-first-steps) [Django's documentation](https://docs.djangoproject.com/en/5.0/#index-first-steps)
for more information about how Django projects are typically for more information about how Django projects are typically
organized. And finally, the organized. And finally, the
[message sending](../subsystems/sending-messages.md) documentation on [message sending](../subsystems/sending-messages.md) documentation on
@ -240,7 +240,7 @@ Create the migration file using the Django `makemigrations` command:
(NNNN is a number that is equal to the number of migrations.) (NNNN is a number that is equal to the number of migrations.)
If you run into problems, the If you run into problems, the
[Django migration documentation](https://docs.djangoproject.com/en/3.2/topics/migrations/) [Django migration documentation](https://docs.djangoproject.com/en/5.0/topics/migrations/)
is helpful. is helpful.
### Test your migration changes ### Test your migration changes

View File

@ -35,7 +35,7 @@ or JSON (data for Zulip clients on all platforms, custom bots, and
integrations). integrations).
The format of the URL patterns in Django is [documented The format of the URL patterns in Django is [documented
here](https://docs.djangoproject.com/en/3.2/topics/http/urls/), and here](https://docs.djangoproject.com/en/5.0/topics/http/urls/), and
the Zulip specific details for these are discussed in detail in the the Zulip specific details for these are discussed in detail in the
[life of a request doc](life-of-a-request.md#options). [life of a request doc](life-of-a-request.md#options).
@ -93,7 +93,7 @@ specific to Zulip.
def home(request: HttpRequest) -> HttpResponse: def home(request: HttpRequest) -> HttpResponse:
``` ```
[login-required-link]: https://docs.djangoproject.com/en/3.2/topics/auth/default/#django.contrib.auth.decorators.login_required [login-required-link]: https://docs.djangoproject.com/en/5.0/topics/auth/default/#django.contrib.auth.decorators.login_required
### Writing a template ### Writing a template

View File

@ -50,7 +50,7 @@ class ZulipUserFilterQuery(UserFilterQuery):
Return extra SQL and params to be attached to end of current Query's Return extra SQL and params to be attached to end of current Query's
SQL and params. The return format matches the format that should be used SQL and params. The return format matches the format that should be used
for providing raw SQL with params to Django's .raw(): for providing raw SQL with params to Django's .raw():
https://docs.djangoproject.com/en/3.2/topics/db/sql/#passing-parameters-into-raw https://docs.djangoproject.com/en/5.0/topics/db/sql/#passing-parameters-into-raw
Here we ensure that results are limited to the subdomain of the request Here we ensure that results are limited to the subdomain of the request
and also exclude bots, as we currently don't want them to be managed by SCIM2. and also exclude bots, as we currently don't want them to be managed by SCIM2.

View File

@ -149,7 +149,7 @@ def check_send_webhook_message(
def standardize_headers(input_headers: Union[None, Dict[str, Any]]) -> Dict[str, str]: def standardize_headers(input_headers: Union[None, Dict[str, Any]]) -> Dict[str, str]:
"""This method can be used to standardize a dictionary of headers with """This method can be used to standardize a dictionary of headers with
the standard format that Django expects. For reference, refer to: the standard format that Django expects. For reference, refer to:
https://docs.djangoproject.com/en/3.2/ref/request-response/#django.http.HttpRequest.headers https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpRequest.headers
NOTE: Historically, Django's headers were not case-insensitive. We're still NOTE: Historically, Django's headers were not case-insensitive. We're still
capitalizing our headers to make it easier to compare/search later if required. capitalizing our headers to make it easier to compare/search later if required.

View File

@ -57,7 +57,7 @@ def do_bulk_backfill_extra_data(
# OLD_VALUE and NEW_VALUE is mapped from the value of the extra_data # OLD_VALUE and NEW_VALUE is mapped from the value of the extra_data
# field (which is just a old full name string) and None, respectively. # field (which is just a old full name string) and None, respectively.
# Documentation for JSONObject: # Documentation for JSONObject:
# https://docs.djangoproject.com/en/4.2/ref/models/database-functions/#jsonobject # https://docs.djangoproject.com/en/5.0/ref/models/database-functions/#jsonobject
).update(extra_data_json=JSONObject(**{OLD_VALUE: "extra_data", NEW_VALUE: None})) ).update(extra_data_json=JSONObject(**{OLD_VALUE: "extra_data", NEW_VALUE: None}))
inconsistent_extra_data_json: List[Tuple[int, str, object, object]] = [] inconsistent_extra_data_json: List[Tuple[int, str, object, object]] = []

View File

@ -545,7 +545,7 @@ class UserProfile(AbstractBaseUser, PermissionsMixin, UserBaseSettings):
# #
# In Django, the convention is to use an empty string instead of NULL/None # In Django, the convention is to use an empty string instead of NULL/None
# for text-based fields. For more information, see # for text-based fields. For more information, see
# https://docs.djangoproject.com/en/3.2/ref/models/fields/#django.db.models.Field.null. # https://docs.djangoproject.com/en/5.0/ref/models/fields/#django.db.models.Field.null.
timezone = models.CharField(max_length=40, default="") timezone = models.CharField(max_length=40, default="")
AVATAR_FROM_GRAVATAR = "G" AVATAR_FROM_GRAVATAR = "G"

View File

@ -19,7 +19,7 @@ from zerver.models.users import get_user_by_delivery_email
# Most Zulip tests use ZulipTestCase, which inherits from django.test.TestCase. # Most Zulip tests use ZulipTestCase, which inherits from django.test.TestCase.
# We recommend learning Django basics first, so search the web for "django testing". # We recommend learning Django basics first, so search the web for "django testing".
# A common first result is https://docs.djangoproject.com/en/3.2/topics/testing/ # A common first result is https://docs.djangoproject.com/en/5.0/topics/testing/
class TestBasics(ZulipTestCase): class TestBasics(ZulipTestCase):
def test_basics(self) -> None: def test_basics(self) -> None:
# Django's tests are based on Python's unittest module, so you # Django's tests are based on Python's unittest module, so you

View File

@ -353,7 +353,7 @@ def json_change_settings(
do_change_password(user_profile, new_password) do_change_password(user_profile, new_password)
# Password changes invalidates sessions, see # Password changes invalidates sessions, see
# https://docs.djangoproject.com/en/3.2/topics/auth/default/#session-invalidation-on-password-change # https://docs.djangoproject.com/en/5.0/topics/auth/default/#session-invalidation-on-password-change
# for details. To avoid this logging the user out of their own # for details. To avoid this logging the user out of their own
# session (which would provide a confusing UX at best), we # session (which would provide a confusing UX at best), we
# update the session hash here. # update the session hash here.

View File

@ -222,7 +222,7 @@ SILENCED_SYSTEM_CHECKS = [
# `unique=True`. For us this is `email`, and it's unique only per-realm. # `unique=True`. For us this is `email`, and it's unique only per-realm.
# Per Django docs, this is perfectly fine so long as our authentication # Per Django docs, this is perfectly fine so long as our authentication
# backends support the username not being unique; and they do. # backends support the username not being unique; and they do.
# See: https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#django.contrib.auth.models.CustomUser.USERNAME_FIELD # See: https://docs.djangoproject.com/en/5.0/topics/auth/customizing/#django.contrib.auth.models.CustomUser.USERNAME_FIELD
"auth.W004", "auth.W004",
# models.E034 limits index names to 30 characters for Oracle compatibility. # models.E034 limits index names to 30 characters for Oracle compatibility.
# We aren't using Oracle. # We aren't using Oracle.

View File

@ -484,7 +484,7 @@ TERMS_OF_SERVICE_MESSAGE: Optional[str] = None
# Configuration for JWT auth (sign in and API key fetch) # Configuration for JWT auth (sign in and API key fetch)
JWT_AUTH_KEYS: Dict[str, JwtAuthKey] = {} JWT_AUTH_KEYS: Dict[str, JwtAuthKey] = {}
# https://docs.djangoproject.com/en/3.2/ref/settings/#std:setting-SERVER_EMAIL # https://docs.djangoproject.com/en/5.0/ref/settings/#std:setting-SERVER_EMAIL
# Django setting for what from address to use in error emails. # Django setting for what from address to use in error emails.
SERVER_EMAIL = ZULIP_ADMINISTRATOR SERVER_EMAIL = ZULIP_ADMINISTRATOR
# Django setting for who receives error emails. # Django setting for who receives error emails.

View File

@ -44,7 +44,7 @@ EXTERNAL_HOST = "zulip.example.com"
## representing the host/domain names that your users can enter in ## representing the host/domain names that your users can enter in
## their browsers to access Zulip. This is a security measure; for ## their browsers to access Zulip. This is a security measure; for
## details, see the Django documentation: ## details, see the Django documentation:
## https://docs.djangoproject.com/en/3.2/ref/settings/#allowed-hosts ## https://docs.djangoproject.com/en/5.0/ref/settings/#allowed-hosts
## ##
## Zulip automatically adds to this list "localhost", "127.0.0.1", and ## Zulip automatically adds to this list "localhost", "127.0.0.1", and
## patterns representing EXTERNAL_HOST and subdomains of it. If you are ## patterns representing EXTERNAL_HOST and subdomains of it. If you are

View File

@ -100,7 +100,7 @@ def setup_sentry(dsn: Optional[str], environment: str) -> None:
) )
# Ignore all of the loggers from django.security that are for user # Ignore all of the loggers from django.security that are for user
# errors; see https://docs.djangoproject.com/en/3.2/ref/exceptions/#suspiciousoperation # errors; see https://docs.djangoproject.com/en/5.0/ref/exceptions/#suspiciousoperation
ignore_logger("django.security.SuspiciousOperation") ignore_logger("django.security.SuspiciousOperation")
ignore_logger("django.security.DisallowedHost") ignore_logger("django.security.DisallowedHost")
ignore_logger("django.security.DisallowedModelAdminLookup") ignore_logger("django.security.DisallowedModelAdminLookup")