mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-30 23:47:53 +03:00 
			
		
		
		
	Standardize spelling to American English in documentation (#9804)
* Standardize spelling to American English (only in .md files) * Update remaining British english spell words to American english style * Configures the codespell pre-commit hook to enforce US English consistency changes: - Activates the `en-GB_to_en-US` built-in dictionary to flag British spellings - Created codespell-ignore-words.txt file to ignore specific words - include `code` and `names` for comprehensive typo checking in technical contexts. - changed the 'lets' to 'let's'.
This commit is contained in:
		
							parent
							
								
									0653a63e6d
								
							
						
					
					
						commit
						ade172e1d5
					
				|  | @ -29,6 +29,11 @@ repos: | |||
|   rev: v2.4.1 | ||||
|   hooks: | ||||
|   - id: codespell | ||||
|     args: [ | ||||
|             "--builtin", "clear,rare,code,names,en-GB_to_en-US", | ||||
|             "--ignore-words", "codespell-ignore-words.txt", | ||||
|             "--skip", "*.css", | ||||
|           ] | ||||
|     exclude: locale|kickstarter-announcement.md|coreapi-0.1.1.js | ||||
|     additional_dependencies: | ||||
|       # python doesn't come with a toml parser prior to 3.11 | ||||
|  |  | |||
							
								
								
									
										6
									
								
								codespell-ignore-words.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								codespell-ignore-words.txt
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| Tim | ||||
| assertIn | ||||
| IAM | ||||
| endcode | ||||
| deque | ||||
| thead | ||||
|  | @ -416,7 +416,7 @@ JSON Web Token is a fairly new standard which can be used for token-based authen | |||
| 
 | ||||
| ## Hawk HTTP Authentication | ||||
| 
 | ||||
| The [HawkREST][hawkrest] library builds on the [Mohawk][mohawk] library to let you work with [Hawk][hawk] signed requests and responses in your API. [Hawk][hawk] lets two parties securely communicate with each other using messages signed by a shared key. It is based on [HTTP MAC access authentication][mac] (which was based on parts of [OAuth 1.0][oauth-1.0a]). | ||||
| The [HawkREST][hawkrest] library builds on the [Mohawk][mohawk] library to let you work with [Hawk][hawk] signed requests and responses in your API. [Hawk][hawk] let's two parties securely communicate with each other using messages signed by a shared key. It is based on [HTTP MAC access authentication][mac] (which was based on parts of [OAuth 1.0][oauth-1.0a]). | ||||
| 
 | ||||
| ## HTTP Signature Authentication | ||||
| 
 | ||||
|  |  | |||
|  | @ -180,7 +180,7 @@ The `allow_null` option is also available for string fields, although its usage | |||
| 
 | ||||
| ## EmailField | ||||
| 
 | ||||
| A text representation, validates the text to be a valid e-mail address. | ||||
| A text representation, validates the text to be a valid email address. | ||||
| 
 | ||||
| Corresponds to `django.db.models.fields.EmailField` | ||||
| 
 | ||||
|  | @ -762,7 +762,7 @@ suitable for updating our target object. With `source='*'`, the return from | |||
|                      ('y_coordinate', 4), | ||||
|                      ('x_coordinate', 3)]) | ||||
| 
 | ||||
| For completeness lets do the same thing again but with the nested serializer | ||||
| For completeness let's do the same thing again but with the nested serializer | ||||
| approach suggested above: | ||||
| 
 | ||||
|     class NestedCoordinateSerializer(serializers.Serializer): | ||||
|  |  | |||
|  | @ -300,7 +300,7 @@ For example, the following serializer: | |||
| 
 | ||||
| Would serialize to a nested representation like this: | ||||
| 
 | ||||
|     >>> album = Album.objects.create(album_name="The Grey Album", artist='Danger Mouse') | ||||
|     >>> album = Album.objects.create(album_name="The Gray Album", artist='Danger Mouse') | ||||
|     >>> Track.objects.create(album=album, order=1, title='Public Service Announcement', duration=245) | ||||
|     <Track: Track object> | ||||
|     >>> Track.objects.create(album=album, order=2, title='What More Can I Say', duration=264) | ||||
|  | @ -310,7 +310,7 @@ Would serialize to a nested representation like this: | |||
|     >>> serializer = AlbumSerializer(instance=album) | ||||
|     >>> serializer.data | ||||
|     { | ||||
|         'album_name': 'The Grey Album', | ||||
|         'album_name': 'The Gray Album', | ||||
|         'artist': 'Danger Mouse', | ||||
|         'tracks': [ | ||||
|             {'order': 1, 'title': 'Public Service Announcement', 'duration': 245}, | ||||
|  | @ -344,7 +344,7 @@ By default nested serializers are read-only. If you want to support write-operat | |||
|             return album | ||||
| 
 | ||||
|     >>> data = { | ||||
|         'album_name': 'The Grey Album', | ||||
|         'album_name': 'The Gray Album', | ||||
|         'artist': 'Danger Mouse', | ||||
|         'tracks': [ | ||||
|             {'order': 1, 'title': 'Public Service Announcement', 'duration': 245}, | ||||
|  |  | |||
|  | @ -134,7 +134,7 @@ An example of a view that uses `TemplateHTMLRenderer`: | |||
| 
 | ||||
| You can use `TemplateHTMLRenderer` either to return regular HTML pages using REST framework, or to return both HTML and API responses from a single endpoint. | ||||
| 
 | ||||
| If you're building websites that use `TemplateHTMLRenderer` along with other renderer classes, you should consider listing `TemplateHTMLRenderer` as the first class in the `renderer_classes` list, so that it will be prioritised first even for browsers that send poorly formed `ACCEPT:` headers. | ||||
| If you're building websites that use `TemplateHTMLRenderer` along with other renderer classes, you should consider listing `TemplateHTMLRenderer` as the first class in the `renderer_classes` list, so that it will be prioritized first even for browsers that send poorly formed `ACCEPT:` headers. | ||||
| 
 | ||||
| See the [_HTML & Forms_ Topic Page][html-and-forms] for further examples of `TemplateHTMLRenderer` usage. | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ source: | |||
| 
 | ||||
| REST framework supports HTTP content negotiation by providing a `Response` class which allows you to return content that can be rendered into multiple content types, depending on the client request. | ||||
| 
 | ||||
| The `Response` class subclasses Django's `SimpleTemplateResponse`.  `Response` objects are initialised with data, which should consist of native Python primitives.  REST framework then uses standard HTTP content negotiation to determine how it should render the final response content. | ||||
| The `Response` class subclasses Django's `SimpleTemplateResponse`.  `Response` objects are initialized with data, which should consist of native Python primitives.  REST framework then uses standard HTTP content negotiation to determine how it should render the final response content. | ||||
| 
 | ||||
| There's no requirement for you to use the `Response` class, you can also return regular `HttpResponse` or `StreamingHttpResponse` objects from your views if required.  Using the `Response` class simply provides a nicer interface for returning content-negotiated Web API responses, that can be rendered to multiple formats. | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ package and then subsequently retired over the next releases. | |||
| 
 | ||||
| As a full-fledged replacement, we recommend the [drf-spectacular] package. | ||||
| It has extensive support for generating OpenAPI 3 schemas from | ||||
| REST framework APIs, with both automatic and customisable options available. | ||||
| REST framework APIs, with both automatic and customizable options available. | ||||
| For further information please refer to | ||||
| [Documenting your API](../topics/documenting-your-api.md#drf-spectacular). | ||||
| 
 | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ We can now use `CommentSerializer` to serialize a comment, or list of comments. | |||
|     serializer.data | ||||
|     # {'email': 'leila@example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'} | ||||
| 
 | ||||
| At this point we've translated the model instance into Python native datatypes.  To finalise the serialization process we render the data into `json`. | ||||
| At this point we've translated the model instance into Python native datatypes.  To finalize the serialization process we render the data into `json`. | ||||
| 
 | ||||
|     from rest_framework.renderers import JSONRenderer | ||||
| 
 | ||||
|  | @ -155,7 +155,7 @@ When deserializing data, you always need to call `is_valid()` before attempting | |||
|     serializer.is_valid() | ||||
|     # False | ||||
|     serializer.errors | ||||
|     # {'email': ['Enter a valid e-mail address.'], 'created': ['This field is required.']} | ||||
|     # {'email': ['Enter a valid email address.'], 'created': ['This field is required.']} | ||||
| 
 | ||||
| Each key in the dictionary will be the field name, and the values will be lists of strings of any error messages corresponding to that field.  The `non_field_errors` key may also be present, and will list any general validation errors. The name of the `non_field_errors` key may be customized using the `NON_FIELD_ERRORS_KEY` REST framework setting. | ||||
| 
 | ||||
|  | @ -298,7 +298,7 @@ When dealing with nested representations that support deserializing the data, an | |||
|     serializer.is_valid() | ||||
|     # False | ||||
|     serializer.errors | ||||
|     # {'user': {'email': ['Enter a valid e-mail address.']}, 'created': ['This field is required.']} | ||||
|     # {'user': {'email': ['Enter a valid email address.']}, 'created': ['This field is required.']} | ||||
| 
 | ||||
| Similarly, the `.validated_data` property will include nested data structures. | ||||
| 
 | ||||
|  | @ -430,7 +430,7 @@ The context dictionary can be used within any serializer field logic, such as a | |||
| 
 | ||||
| Often you'll want serializer classes that map closely to Django model definitions. | ||||
| 
 | ||||
| The `ModelSerializer` class provides a shortcut that lets you automatically create a `Serializer` class with fields that correspond to the Model fields. | ||||
| The `ModelSerializer` class provides a shortcut that let's you automatically create a `Serializer` class with fields that correspond to the Model fields. | ||||
| 
 | ||||
| **The `ModelSerializer` class is the same as a regular `Serializer` class, except that**: | ||||
| 
 | ||||
|  |  | |||
|  | @ -264,7 +264,7 @@ For example... | |||
|     csrftoken = response.cookies['csrftoken'] | ||||
| 
 | ||||
|     # Interact with the API. | ||||
|     response = client.post('http://testserver/organisations/', json={ | ||||
|     response = client.post('http://testserver/organizations/', json={ | ||||
|         'name': 'MegaCorp', | ||||
|         'status': 'active' | ||||
|     }, headers={'X-CSRFToken': csrftoken}) | ||||
|  | @ -292,12 +292,12 @@ The CoreAPIClient allows you to interact with your API using the Python | |||
|     client = CoreAPIClient() | ||||
|     schema = client.get('http://testserver/schema/') | ||||
| 
 | ||||
|     # Create a new organisation | ||||
|     # Create a new organization | ||||
|     params = {'name': 'MegaCorp', 'status': 'active'} | ||||
|     client.action(schema, ['organisations', 'create'], params) | ||||
|     client.action(schema, ['organizations', 'create'], params) | ||||
| 
 | ||||
|     # Ensure that the organisation exists in the listing | ||||
|     data = client.action(schema, ['organisations', 'list']) | ||||
|     # Ensure that the organization exists in the listing | ||||
|     data = client.action(schema, ['organizations', 'list']) | ||||
|     assert(len(data) == 1) | ||||
|     assert(data == [{'name': 'MegaCorp', 'status': 'active'}]) | ||||
| 
 | ||||
|  |  | |||
|  | @ -175,7 +175,7 @@ If you want the date field to be entirely hidden from the user, then use `Hidden | |||
| Validators that are applied across multiple fields in the serializer can sometimes require a field input that should not be provided by the API client, but that *is* available as input to the validator. | ||||
| For this purposes use `HiddenField`. This field will be present in `validated_data` but *will not* be used in the serializer output representation. | ||||
| 
 | ||||
| **Note:** Using a `read_only=True` field is excluded from writable fields so it won't use a `default=…` argument. Look [3.8 announcement](https://www.django-rest-framework.org/community/3.8-announcement/#altered-the-behaviour-of-read_only-plus-default-on-field). | ||||
| **Note:** Using a `read_only=True` field is excluded from writable fields so it won't use a `default=…` argument. Look [3.8 announcement](https://www.django-rest-framework.org/community/3.8-announcement/#altered-the-behavior-of-read_only-plus-default-on-field). | ||||
| 
 | ||||
| REST framework includes a couple of defaults that may be useful in this context. | ||||
| 
 | ||||
|  |  | |||
|  | @ -632,7 +632,7 @@ The `MultipleChoiceField` class has been added. This field acts like `ChoiceFiel | |||
| 
 | ||||
| The `from_native(self, value)` and `to_native(self, data)` method names have been replaced with the more obviously named `to_internal_value(self, data)` and `to_representation(self, value)`. | ||||
| 
 | ||||
| The `field_from_native()` and `field_to_native()` methods are removed. Previously you could use these methods if you wanted to customise the behavior in a way that did not simply lookup the field value from the object. For example... | ||||
| The `field_from_native()` and `field_to_native()` methods are removed. Previously you could use these methods if you wanted to customize the behavior in a way that did not simply lookup the field value from the object. For example... | ||||
| 
 | ||||
|     def field_to_native(self, obj, field_name): | ||||
|         """A custom read-only field that returns the class name.""" | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ See [the schema documentation](https://www.django-rest-framework.org/api-guide/s | |||
| ## Customizing the operation ID. | ||||
| 
 | ||||
| REST framework automatically determines operation IDs to use in OpenAPI | ||||
| schemas. The latest version provides more control for overriding the behaviour | ||||
| schemas. The latest version provides more control for overriding the behavior | ||||
| used to generate the operation IDs. | ||||
| 
 | ||||
| See [the schema documentation](https://www.django-rest-framework.org/api-guide/schemas/#operationid) for more information. | ||||
|  | @ -96,7 +96,7 @@ for details on using custom `AutoSchema` subclasses. | |||
| ## Support for JSONField. | ||||
| 
 | ||||
| Django 3.1 deprecated the existing `django.contrib.postgres.fields.JSONField` | ||||
| in favour of a new database-agnositic `JSONField`. | ||||
| in favor of a new database-agnositic `JSONField`. | ||||
| 
 | ||||
| REST framework 3.12 now supports this new model field, and `ModelSerializer` | ||||
| classes will correctly map the model field. | ||||
|  |  | |||
|  | @ -50,6 +50,6 @@ They must now use the more explicit keyword argument style... | |||
| aliases = serializers.ListField(child=serializers.CharField()) | ||||
| ``` | ||||
| 
 | ||||
| This change has been made because using positional arguments here *does not* result in the expected behaviour. | ||||
| This change has been made because using positional arguments here *does not* result in the expected behavior. | ||||
| 
 | ||||
| See Pull Request [#7632](https://github.com/encode/django-rest-framework/pull/7632) for more details. | ||||
|  |  | |||
|  | @ -39,12 +39,12 @@ By default the URLs created by `SimpleRouter` use regular expressions. This beha | |||
| 
 | ||||
| Dependency on pytz has been removed and deprecation warnings have been added, Django will provide ZoneInfo instances as long as USE_DEPRECATED_PYTZ is not enabled. More info on the migration can be found [in this guide](https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html). | ||||
| 
 | ||||
| ##  Align `SearchFilter` behaviour to `django.contrib.admin` search | ||||
| ##  Align `SearchFilter` behavior to `django.contrib.admin` search | ||||
| 
 | ||||
| Searches now may contain _quoted phrases_ with spaces, each phrase is considered as a single search term, and it will raise a validation error if any null-character is provided in search. See the [Filtering API guide](../api-guide/filtering.md) for more information. | ||||
| 
 | ||||
| ## Other fixes and improvements | ||||
| 
 | ||||
| There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour. | ||||
| There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behavior. | ||||
| 
 | ||||
| See the [release notes](release-notes.md) page for a complete listing. | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ The current minimum versions of Django is now 4.2 and Python 3.9. | |||
| 
 | ||||
| ## Django LoginRequiredMiddleware | ||||
| 
 | ||||
| The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behaviour can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information. | ||||
| The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behavior can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information. | ||||
| 
 | ||||
| ## Improved support for UniqueConstraint | ||||
| 
 | ||||
|  | @ -37,6 +37,6 @@ The generation of validators for [UniqueConstraint](https://docs.djangoproject.c | |||
| 
 | ||||
| ## Other fixes and improvements | ||||
| 
 | ||||
| There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour. | ||||
| There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behavior. | ||||
| 
 | ||||
| See the [release notes](release-notes.md) page for a complete listing. | ||||
|  |  | |||
|  | @ -157,7 +157,7 @@ will result in a list of the available choices being returned in the response. | |||
| In cases where there is a relational field, the previous behavior would be | ||||
| to return a list of available instances to choose from for that relational field. | ||||
| 
 | ||||
| In order to minimise exposed information the behavior now is to *not* return | ||||
| In order to minimize exposed information the behavior now is to *not* return | ||||
| choices information for relational fields. | ||||
| 
 | ||||
| If you want to override this new behavior you'll need to [implement a custom | ||||
|  |  | |||
|  | @ -81,7 +81,7 @@ a dynamic client library to interact with your API. | |||
| 
 | ||||
| Finally, we're also now exposing the schema generation as a | ||||
| [publicly documented API][schema-generation-api], allowing you to more easily | ||||
| override the behaviour. | ||||
| override the behavior. | ||||
| 
 | ||||
| ## Requests test client | ||||
| 
 | ||||
|  | @ -106,12 +106,12 @@ client library. | |||
|     client = CoreAPIClient() | ||||
|     schema = client.get('http://testserver/schema/') | ||||
| 
 | ||||
|     # Create a new organisation | ||||
|     # Create a new organization | ||||
|     params = {'name': 'MegaCorp', 'status': 'active'} | ||||
|     client.action(schema, ['organisations', 'create'], params) | ||||
|     client.action(schema, ['organizations', 'create'], params) | ||||
| 
 | ||||
|     # Ensure that the organisation exists in the listing | ||||
|     data = client.action(schema, ['organisations', 'list']) | ||||
|     # Ensure that the organization exists in the listing | ||||
|     data = client.action(schema, ['organizations', 'list']) | ||||
|     assert(len(data) == 1) | ||||
|     assert(data == [{'name': 'MegaCorp', 'status': 'active'}]) | ||||
| 
 | ||||
|  | @ -204,10 +204,10 @@ The `'pk'` identifier in schema paths is now mapped onto the actually model fiel | |||
| name by default. This will typically be `'id'`. | ||||
| 
 | ||||
| This gives a better external representation for schemas, with less implementation | ||||
| detail being exposed. It also reflects the behaviour of using a ModelSerializer | ||||
| detail being exposed. It also reflects the behavior of using a ModelSerializer | ||||
| class with `fields = '__all__'`. | ||||
| 
 | ||||
| You can revert to the previous behaviour by setting `'SCHEMA_COERCE_PATH_PK': False` | ||||
| You can revert to the previous behavior by setting `'SCHEMA_COERCE_PATH_PK': False` | ||||
| in the REST framework settings. | ||||
| 
 | ||||
| ### Schema action name representations | ||||
|  | @ -215,7 +215,7 @@ in the REST framework settings. | |||
| The internal `retrieve()` and `destroy()` method names are now coerced to an | ||||
| external representation of `read` and `delete`. | ||||
| 
 | ||||
| You can revert to the previous behaviour by setting `'SCHEMA_COERCE_METHOD_NAMES': {}` | ||||
| You can revert to the previous behavior by setting `'SCHEMA_COERCE_METHOD_NAMES': {}` | ||||
| in the REST framework settings. | ||||
| 
 | ||||
| ### DjangoFilterBackend | ||||
|  |  | |||
|  | @ -53,7 +53,7 @@ In order to try to address this we're now adding the ability for per-view custom | |||
| 
 | ||||
| Let's take a quick look at using the new functionality... | ||||
| 
 | ||||
| The `APIView` class has a `schema` attribute, that is used to control how the Schema for that particular view is generated. The default behaviour is to use the `AutoSchema` class. | ||||
| The `APIView` class has a `schema` attribute, that is used to control how the Schema for that particular view is generated. The default behavior is to use the `AutoSchema` class. | ||||
| 
 | ||||
|     from rest_framework.views import APIView | ||||
|     from rest_framework.schemas import AutoSchema | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ If you use REST framework commercially and would like to see this work continue, | |||
| 
 | ||||
| ## Breaking Changes | ||||
| 
 | ||||
| ### Altered the behaviour of `read_only` plus `default` on Field. | ||||
| ### Altered the behavior of `read_only` plus `default` on Field. | ||||
| 
 | ||||
| [#5886][gh5886] `read_only` fields will now **always** be excluded from writable fields. | ||||
| 
 | ||||
|  | @ -44,7 +44,7 @@ Previously `read_only` fields when combined with a `default` value would use the | |||
| operations. This was counter-intuitive in some circumstances and led to difficulties supporting dotted `source` | ||||
| attributes on nullable relations. | ||||
| 
 | ||||
| In order to maintain the old behaviour you may need to pass the value of `read_only` fields when calling `save()` in | ||||
| In order to maintain the old behavior you may need to pass the value of `read_only` fields when calling `save()` in | ||||
| the view: | ||||
| 
 | ||||
|     def perform_create(self, serializer): | ||||
|  |  | |||
|  | @ -152,7 +152,7 @@ See [#5990][gh5990]. | |||
| 
 | ||||
| ### `action` decorator replaces `list_route` and `detail_route` | ||||
| 
 | ||||
| Both `list_route` and `detail_route` are now deprecated in favour of the single `action` decorator. | ||||
| Both `list_route` and `detail_route` are now deprecated in favor of the single `action` decorator. | ||||
| They will be removed entirely in 3.10. | ||||
| 
 | ||||
| The `action` decorator takes a boolean `detail` argument. | ||||
|  |  | |||
|  | @ -105,7 +105,7 @@ This release fixes a few bugs, clean-up some old code paths for unsupported Pyth | |||
| 
 | ||||
| **Date**: 28th March 2025 | ||||
| 
 | ||||
| This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behaviour of existing features and pre-existing behaviour. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation. | ||||
| This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behavior of existing features and pre-existing behavior. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation. | ||||
| 
 | ||||
| #### Features | ||||
| 
 | ||||
|  | @ -215,7 +215,7 @@ Date: 15th March 2024 | |||
| * Partial serializer should not have required fields [[#7563](https://github.com/encode/django-rest-framework/pull/7563)] | ||||
| * Propagate 'default' from model field to serializer field. [[#9030](https://github.com/encode/django-rest-framework/pull/9030)] | ||||
| * Allow to override child.run_validation call in ListSerializer [[#8035](https://github.com/encode/django-rest-framework/pull/8035)] | ||||
| * Align SearchFilter behaviour to django.contrib.admin search [[#9017](https://github.com/encode/django-rest-framework/pull/9017)] | ||||
| * Align SearchFilter behavior to django.contrib.admin search [[#9017](https://github.com/encode/django-rest-framework/pull/9017)] | ||||
| * Class name added to unknown field error [[#9019](https://github.com/encode/django-rest-framework/pull/9019)] | ||||
| * Fix: Pagination response schemas. [[#9049](https://github.com/encode/django-rest-framework/pull/9049)] | ||||
| * Fix choices in ChoiceField to support IntEnum [[#8955](https://github.com/encode/django-rest-framework/pull/8955)] | ||||
|  | @ -369,7 +369,7 @@ Date: 28th September 2020 | |||
| 
 | ||||
| * Add `--file` option to `generateschema` command. [#7130] | ||||
| * Support `tags` for OpenAPI schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#grouping-operations-with-tags). [#7184] | ||||
| * Support customising the operation ID for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#operationid). [#7190] | ||||
| * Support customizing the operation ID for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#operationid). [#7190] | ||||
| * Support OpenAPI components for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#components). [#7124] | ||||
| * The following methods on `AutoSchema` become public API: `get_path_parameters`, `get_pagination_parameters`, `get_filter_parameters`, `get_request_body`, `get_responses`, `get_serializer`, `get_paginator`, `map_serializer`, `map_field`, `map_choice_field`, `map_field_validators`, `allows_filters`. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#autoschema) | ||||
| * Add support for Django 3.1's database-agnositic `JSONField`. [#7467] | ||||
|  | @ -407,7 +407,7 @@ Date: 28th September 2020 | |||
| * Fix `PrimaryKeyRelatedField` and `HyperlinkedRelatedField` when source field is actually a property. [#7142] | ||||
| * `Token.generate_key` is now a class method. [#7502] | ||||
| * `@action` warns if method is wrapped in a decorator that does not preserve information using `@functools.wraps`. [#7098] | ||||
| * Deprecate `serializers.NullBooleanField` in favour of `serializers.BooleanField` with `allow_null=True` [#7122] | ||||
| * Deprecate `serializers.NullBooleanField` in favor of `serializers.BooleanField` with `allow_null=True` [#7122] | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
|  | @ -417,7 +417,7 @@ Date: 28th September 2020 | |||
| 
 | ||||
| **Date**: 30th September 2020 | ||||
| 
 | ||||
| * **Security**: Drop `urlize_quoted_links` template tag in favour of Django's built-in `urlize`. Removes a XSS vulnerability for some kinds of content in the browsable API. | ||||
| * **Security**: Drop `urlize_quoted_links` template tag in favor of Django's built-in `urlize`. Removes a XSS vulnerability for some kinds of content in the browsable API. | ||||
| 
 | ||||
| ### 3.11.1 | ||||
| 
 | ||||
|  | @ -429,7 +429,7 @@ Date: 28th September 2020 | |||
| 
 | ||||
| **Date**: 12th December 2019 | ||||
| 
 | ||||
| * Drop `.set_context` API [in favour of a `requires_context` marker](3.11-announcement.md#validator-default-context). | ||||
| * Drop `.set_context` API [in favor of a `requires_context` marker](3.11-announcement.md#validator-default-context). | ||||
| * Changed default widget for TextField with choices to select box. [#6892][gh6892] | ||||
| * Supported nested writes on non-relational fields, such as JSONField. [#6916][gh6916] | ||||
| * Include request/response media types in OpenAPI schemas, based on configured parsers/renderers. [#6865][gh6865] | ||||
|  | @ -621,13 +621,13 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. | |||
| **Date**: [3rd April 2018][3.8.0-milestone] | ||||
| 
 | ||||
| 
 | ||||
| * **Breaking Change**: Alter `read_only` plus `default` behaviour. [#5886][gh5886] | ||||
| * **Breaking Change**: Alter `read_only` plus `default` behavior. [#5886][gh5886] | ||||
| 
 | ||||
|     `read_only` fields will now **always** be excluded from writable fields. | ||||
| 
 | ||||
|     Previously `read_only` fields with a `default` value would use the `default` for create and update operations. | ||||
| 
 | ||||
|     In order to maintain the old behaviour you may need to pass the value of `read_only` fields when calling `save()` in | ||||
|     In order to maintain the old behavior you may need to pass the value of `read_only` fields when calling `save()` in | ||||
|     the view: | ||||
| 
 | ||||
|         def perform_create(self, serializer): | ||||
|  | @ -635,13 +635,13 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. | |||
| 
 | ||||
|     Alternatively you may override `save()` or `create()` or `update()` on the serializer as appropriate. | ||||
| 
 | ||||
| * Correct allow_null behaviour when required=False [#5888][gh5888] | ||||
| * Correct allow_null behavior when required=False [#5888][gh5888] | ||||
| 
 | ||||
|     Without an explicit `default`, `allow_null` implies a default of `null` for outgoing serialization. Previously such | ||||
|     fields were being skipped when read-only or otherwise not required. | ||||
| 
 | ||||
|     **Possible backwards compatibility break** if you were relying on such fields being excluded from the outgoing | ||||
|     representation. In order to restore the old behaviour you can override `data` to exclude the field when `None`. | ||||
|     representation. In order to restore the old behavior you can override `data` to exclude the field when `None`. | ||||
| 
 | ||||
|     For example: | ||||
| 
 | ||||
|  | @ -698,7 +698,7 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. | |||
| * Add HStoreField, postgres fields tests [#5654][gh5654] | ||||
| * Always fully qualify ValidationError in docs [#5751][gh5751] | ||||
| * Remove unreachable code from ManualSchema [#5766][gh5766] | ||||
| * Allowed customising API documentation code samples [#5752][gh5752] | ||||
| * Allowed customizing API documentation code samples [#5752][gh5752] | ||||
| * Updated docs to use `pip show` [#5757][gh5757] | ||||
| * Load 'static' instead of 'staticfiles' in templates [#5773][gh5773] | ||||
| * Fixed a typo in `fields` docs [#5783][gh5783] | ||||
|  | @ -761,7 +761,7 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. | |||
| 
 | ||||
| * Schema: Extract method for `manual_fields` processing [#5633][gh5633] | ||||
| 
 | ||||
|     Allows for easier customisation of `manual_fields` processing, for example | ||||
|     Allows for easier customization of `manual_fields` processing, for example | ||||
|     to provide per-method manual fields. `AutoSchema` adds `get_manual_fields`, | ||||
|     as the intended override point, and a utility method `update_fields`, to | ||||
|     handle by-name field replacement from a list, which, in general, you are not | ||||
|  | @ -883,7 +883,7 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. | |||
| * Don't strip microseconds from `time` when encoding. Makes consistent with `datetime`. | ||||
|     **BC Change**: Previously only milliseconds were encoded. [#5440][gh5440] | ||||
| * Added `STRICT_JSON` setting (default `True`) to raise exception for the extended float values (`nan`, `inf`, `-inf`) accepted by Python's `json` module. | ||||
|     **BC Change**: Previously these values would converted to corresponding strings. Set `STRICT_JSON` to `False` to restore the previous behaviour. [#5265][gh5265] | ||||
|     **BC Change**: Previously these values would converted to corresponding strings. Set `STRICT_JSON` to `False` to restore the previous behavior. [#5265][gh5265] | ||||
| * Add support for `page_size` parameter in CursorPaginator class [#5250][gh5250] | ||||
| * Make `DEFAULT_PAGINATION_CLASS` `None` by default. | ||||
|     **BC Change**: If your were **just** setting `PAGE_SIZE` to enable pagination you will need to add `DEFAULT_PAGINATION_CLASS`. | ||||
|  | @ -921,10 +921,10 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. | |||
| * Fix naming collisions in Schema Generation [#5464][gh5464] | ||||
| * Call Django's authenticate function with the request object [#5295][gh5295] | ||||
| * Update coreapi JS to 0.1.1 [#5479][gh5479] | ||||
| * Have `is_list_view` recognise RetrieveModel… views [#5480][gh5480] | ||||
| * Have `is_list_view` recognize RetrieveModel… views [#5480][gh5480] | ||||
| * Remove Django 1.8 & 1.9 compatibility code [#5481][gh5481] | ||||
| * Remove deprecated schema code from DefaultRouter [#5482][gh5482] | ||||
| * Refactor schema generation to allow per-view customisation. | ||||
| * Refactor schema generation to allow per-view customization. | ||||
|     **BC Change**: `SchemaGenerator.get_serializer_fields` has been refactored as `AutoSchema.get_serializer_fields` and drops the `view` argument [#5354][gh5354] | ||||
| 
 | ||||
| ## 3.6.x series | ||||
|  |  | |||
|  | @ -53,7 +53,7 @@ Some reasons you might want to use REST framework: | |||
| * [Serialization][serializers] that supports both [ORM][modelserializer-section] and [non-ORM][serializer-section] data sources. | ||||
| * Customizable all the way down - just use [regular function-based views][functionview-section] if you don't need the [more][generic-views] [powerful][viewsets] [features][routers]. | ||||
| * Extensive documentation, and [great community support][group]. | ||||
| * Used and trusted by internationally recognised companies including [Mozilla][mozilla], [Red Hat][redhat], [Heroku][heroku], and [Eventbrite][eventbrite]. | ||||
| * Used and trusted by internationally recognized companies including [Mozilla][mozilla], [Red Hat][redhat], [Heroku][heroku], and [Eventbrite][eventbrite]. | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
|  |  | |||
|  | @ -181,7 +181,7 @@ The context that's available to the template: | |||
| * `FORMAT_PARAM`        : The view can accept a format override | ||||
| * `METHOD_PARAM`        : The view can accept a method override | ||||
| 
 | ||||
| You can override the `BrowsableAPIRenderer.get_context()` method to customise the context that gets passed to the template. | ||||
| You can override the `BrowsableAPIRenderer.get_context()` method to customize the context that gets passed to the template. | ||||
| 
 | ||||
| #### Not using base.html | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ REST framework also includes [serialization] and [parser]/[renderer] components | |||
| 
 | ||||
| ## What REST framework doesn't provide. | ||||
| 
 | ||||
| What REST framework doesn't do is give you machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labelled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope. | ||||
| What REST framework doesn't do is give you machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labeled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope. | ||||
| 
 | ||||
| [cite]: https://vimeo.com/channels/restfest/49503453 | ||||
| [dissertation]: https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| """ | ||||
| Generic views that provide commonly needed behaviour. | ||||
| Generic views that provide commonly needed behavior. | ||||
| """ | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.db.models.query import QuerySet | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| """ | ||||
| Basic building blocks for generic class based views. | ||||
| 
 | ||||
| We don't bind behaviour to http method handlers yet, | ||||
| We don't bind behavior to http method handlers yet, | ||||
| which allows mixin classes to be composed in interesting ways. | ||||
| """ | ||||
| from rest_framework import status | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ Position conflicts with coreapi.Link for URL path {target_url}. | |||
| Attempted to insert link with keys: {keys}. | ||||
| 
 | ||||
| Adjust URLs to avoid naming collision or override `SchemaGenerator.get_keys()` | ||||
| to customise schema structure. | ||||
| to customize schema structure. | ||||
| """ | ||||
| 
 | ||||
| 
 | ||||
|  | @ -513,7 +513,7 @@ class AutoSchema(ViewInspector): | |||
|         Default implementation looks for ModelViewSet or GenericAPIView | ||||
|         actions/methods that cause filtering on the default implementation. | ||||
| 
 | ||||
|         Override to adjust behaviour for your view. | ||||
|         Override to adjust behavior for your view. | ||||
| 
 | ||||
|         Note: Introduced in v3.7: Initially "private" (i.e. with leading underscore) | ||||
|             to allow changes based on user experience. | ||||
|  |  | |||
|  | @ -86,7 +86,7 @@ class SchemaGenerator(BaseSchemaGenerator): | |||
| 
 | ||||
|             components_schemas.update(components) | ||||
| 
 | ||||
|             # Normalise path for any provided mount url. | ||||
|             # Normalize path for any provided mount url. | ||||
|             if path.startswith('/'): | ||||
|                 path = path[1:] | ||||
|             path = urljoin(self.url or '/', path) | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ Serialization in REST framework is a two-phase process: | |||
| 
 | ||||
| 1. Serializers marshal between complex types like model instances, and | ||||
| python primitives. | ||||
| 2. The process of marshalling between python primitives and request and | ||||
| 2. The process of marshaling between python primitives and request and | ||||
| response content is handled by parsers and renderers. | ||||
| """ | ||||
| 
 | ||||
|  |  | |||
|  | @ -33,7 +33,7 @@ class AnonymousUserTests(TestCase): | |||
| 
 | ||||
| @override_settings(ROOT_URLCONF='tests.browsable_api.auth_urls') | ||||
| class DropdownWithAuthTests(TestCase): | ||||
|     """Tests correct dropdown behaviour with Auth views enabled.""" | ||||
|     """Tests correct dropdown behavior with Auth views enabled.""" | ||||
|     def setUp(self): | ||||
|         self.client = APIClient(enforce_csrf_checks=True) | ||||
|         self.username = 'john' | ||||
|  | @ -74,7 +74,7 @@ class DropdownWithAuthTests(TestCase): | |||
| 
 | ||||
| @override_settings(ROOT_URLCONF='tests.browsable_api.no_auth_urls') | ||||
| class NoDropdownWithoutAuthTests(TestCase): | ||||
|     """Tests correct dropdown behaviour with Auth views NOT enabled.""" | ||||
|     """Tests correct dropdown behavior with Auth views NOT enabled.""" | ||||
|     def setUp(self): | ||||
|         self.client = APIClient(enforce_csrf_checks=True) | ||||
|         self.username = 'john' | ||||
|  |  | |||
|  | @ -28,7 +28,7 @@ urlpatterns = [ | |||
| 
 | ||||
| 
 | ||||
| class DropdownWithAuthTests(TestCase): | ||||
|     """Tests correct dropdown behaviour with Auth views enabled.""" | ||||
|     """Tests correct dropdown behavior with Auth views enabled.""" | ||||
| 
 | ||||
|     @override_settings(ROOT_URLCONF='tests.browsable_api.test_browsable_nested_api') | ||||
|     def test_login(self): | ||||
|  |  | |||
|  | @ -332,7 +332,7 @@ class TestInitialWithCallable: | |||
| 
 | ||||
|     def test_initial_should_accept_callable(self): | ||||
|         """ | ||||
|         Follows the default ``Field.initial`` behaviour where they accept a | ||||
|         Follows the default ``Field.initial`` behavior where they accept a | ||||
|         callable to produce the initial value""" | ||||
|         assert self.serializer.data == { | ||||
|             'initial_field': 123, | ||||
|  |  | |||
|  | @ -287,7 +287,7 @@ class TestNestedListSerializer: | |||
| 
 | ||||
| 
 | ||||
| class TestNestedListSerializerAllowEmpty: | ||||
|     """Tests the behaviour of allow_empty=False when a ListSerializer is used as a field.""" | ||||
|     """Tests the behavior of allow_empty=False when a ListSerializer is used as a field.""" | ||||
| 
 | ||||
|     @pytest.mark.parametrize('partial', (False, True)) | ||||
|     def test_allow_empty_true(self, partial): | ||||
|  | @ -643,7 +643,7 @@ class TestSerializerPartialUsage: | |||
| 
 | ||||
| class TestEmptyListSerializer: | ||||
|     """ | ||||
|     Tests the behaviour of ListSerializers when there is no data passed to it | ||||
|     Tests the behavior of ListSerializers when there is no data passed to it | ||||
|     """ | ||||
| 
 | ||||
|     def setup_method(self): | ||||
|  | @ -672,7 +672,7 @@ class TestEmptyListSerializer: | |||
| 
 | ||||
| class TestMaxMinLengthListSerializer: | ||||
|     """ | ||||
|     Tests the behaviour of ListSerializers when max_length and min_length are used | ||||
|     Tests the behavior of ListSerializers when max_length and min_length are used | ||||
|     """ | ||||
| 
 | ||||
|     def setup_method(self): | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user