Skip to content

Commit a4f4dd0

Browse files
authored
Merge branch 'encode:master' into jsonencoder_ipaddress
2 parents afdcf5c + ccfe0a9 commit a4f4dd0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1113
-1687
lines changed

.github/ISSUE_TEMPLATE/1-issue.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ about: Please only raise an issue if you've been advised to do so after discussi
55

66
## Checklist
77

8+
<!--
9+
Note: REST framework is considered feature-complete. New functionality should be implemented outside the core REST framework. For details, please check the docs: https://www.django-rest-framework.org/community/third-party-packages/#about-third-party-packages
10+
-->
11+
812
- [ ] Raised initially as discussion #...
9-
- [ ] This cannot be dealt with as a third party library. (We prefer new functionality to be [in the form of third party libraries](https://www.django-rest-framework.org/community/third-party-packages/#about-third-party-packages) where possible.)
13+
- [ ] This is not a feature request suitable for implementation outside this project. Please elaborate what it is:
14+
- [ ] compatibility fix for new Django/Python version ...
15+
- [ ] other type of bug fix
16+
- [ ] other type of improvement that does not touch existing code or change existing behavior (e.g. wrapper for new Django field)
1017
- [ ] I have reduced the issue to the simplest possible case.

.github/workflows/main.yml

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ jobs:
1414
strategy:
1515
matrix:
1616
python-version:
17-
- '3.6'
18-
- '3.7'
1917
- '3.8'
2018
- '3.9'
2119
- '3.10'
@@ -37,18 +35,9 @@ jobs:
3735
- name: Install dependencies
3836
run: python -m pip install --upgrade codecov tox
3937

40-
- name: Install tox-py
41-
if: ${{ matrix.python-version == '3.6' }}
42-
run: python -m pip install --upgrade tox-py
43-
4438
- name: Run tox targets for ${{ matrix.python-version }}
45-
if: ${{ matrix.python-version != '3.6' }}
4639
run: tox run -f py$(echo ${{ matrix.python-version }} | tr -d .)
4740

48-
- name: Run tox targets for ${{ matrix.python-version }}
49-
if: ${{ matrix.python-version == '3.6' }}
50-
run: tox --py current
51-
5241
- name: Run extra tox targets
5342
if: ${{ matrix.python-version == '3.9' }}
5443
run: |

PULL_REQUEST_TEMPLATE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
*Note*: Before submitting this pull request, please review our [contributing guidelines](https://www.django-rest-framework.org/community/contributing/#pull-requests).
1+
*Note*: Before submitting a code change, please review our [contributing guidelines](https://www.django-rest-framework.org/community/contributing/#pull-requests).
22

33
## Description
44

README.md

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ The initial aim is to provide a single full-time position on REST framework.
2828
[![][cryptapi-img]][cryptapi-url]
2929
[![][fezto-img]][fezto-url]
3030
[![][svix-img]][svix-url]
31+
[![][zuplo-img]][zuplo-url]
3132

32-
Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry][sentry-url], [Stream][stream-url], [Spacinov][spacinov-url], [Retool][retool-url], [bit.io][bitio-url], [PostHog][posthog-url], [CryptAPI][cryptapi-url], [FEZTO][fezto-url], and [Svix][svix-url].
33+
Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry][sentry-url], [Stream][stream-url], [Spacinov][spacinov-url], [Retool][retool-url], [bit.io][bitio-url], [PostHog][posthog-url], [CryptAPI][cryptapi-url], [FEZTO][fezto-url], [Svix][svix-url], and [Zuplo][zuplo-url].
3334

3435
---
3536

@@ -45,8 +46,6 @@ Some reasons you might want to use REST framework:
4546
* 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].
4647
* [Extensive documentation][docs], and [great community support][group].
4748

48-
There is a live example API for testing purposes, [available here][sandbox].
49-
5049
**Below**: *Screenshot from the browsable API*
5150

5251
![Screenshot][image]
@@ -55,8 +54,8 @@ There is a live example API for testing purposes, [available here][sandbox].
5554

5655
# Requirements
5756

58-
* Python 3.6+
59-
* Django 5.0, 4.2, 4.1, 4.0, 3.2, 3.1, 3.0
57+
* Python 3.8+
58+
* Django 5.0, 4.2
6059

6160
We **highly recommend** and only officially support the latest patch release of
6261
each Python and Django series.
@@ -174,8 +173,6 @@ Full documentation for the project is available at [https://www.django-rest-fram
174173

175174
For questions and support, use the [REST framework discussion group][group], or `#restframework` on libera.chat IRC.
176175

177-
You may also want to [follow the author on Twitter][twitter].
178-
179176
# Security
180177

181178
Please see the [security policy][security-policy].
@@ -186,9 +183,7 @@ Please see the [security policy][security-policy].
186183
[codecov]: https://codecov.io/github/encode/django-rest-framework?branch=master
187184
[pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg
188185
[pypi]: https://pypi.org/project/djangorestframework/
189-
[twitter]: https://twitter.com/starletdreaming
190186
[group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
191-
[sandbox]: https://restframework.herokuapp.com/
192187

193188
[funding]: https://fund.django-rest-framework.org/topics/funding/
194189
[sponsors]: https://fund.django-rest-framework.org/topics/funding/#our-sponsors
@@ -202,6 +197,7 @@ Please see the [security policy][security-policy].
202197
[cryptapi-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/cryptapi-readme.png
203198
[fezto-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/fezto-readme.png
204199
[svix-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/svix-premium.png
200+
[zuplo-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/zuplo-readme.png
205201

206202
[sentry-url]: https://getsentry.com/welcome/
207203
[stream-url]: https://getstream.io/?utm_source=DjangoRESTFramework&utm_medium=Webpage_Logo_Ad&utm_content=Developer&utm_campaign=DjangoRESTFramework_Jan2022_HomePage
@@ -212,6 +208,7 @@ Please see the [security policy][security-policy].
212208
[cryptapi-url]: https://cryptapi.io
213209
[fezto-url]: https://www.fezto.xyz/?utm_source=DjangoRESTFramework
214210
[svix-url]: https://www.svix.com/?utm_source=django-REST&utm_medium=sponsorship
211+
[zuplo-url]: https://zuplo.link/django-gh
215212

216213
[oauth1-section]: https://www.django-rest-framework.org/api-guide/authentication/#django-rest-framework-oauth
217214
[oauth2-section]: https://www.django-rest-framework.org/api-guide/authentication/#django-oauth-toolkit

docs/api-guide/caching.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,29 @@ class PostView(APIView):
5959
return Response(content)
6060
```
6161

62+
63+
## Using cache with @api_view decorator
64+
65+
When using @api_view decorator, the Django-provided method-based cache decorators such as [`cache_page`][page],
66+
[`vary_on_cookie`][cookie] and [`vary_on_headers`][headers] can be called directly.
67+
68+
```python
69+
from django.views.decorators.cache import cache_page
70+
from django.views.decorators.vary import vary_on_cookie
71+
72+
from rest_framework.decorators import api_view
73+
from rest_framework.response import Response
74+
75+
76+
@cache_page(60 * 15)
77+
@vary_on_cookie
78+
@api_view(["GET"])
79+
def get_user_list(request):
80+
content = {"user_feed": request.user.get_user_feed()}
81+
return Response(content)
82+
```
83+
84+
6285
**NOTE:** The [`cache_page`][page] decorator only caches the
6386
`GET` and `HEAD` responses with status 200.
6487

docs/api-guide/fields.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,6 @@ When serializing the instance, default will be used if the object attribute or d
6868

6969
Note that setting a `default` value implies that the field is not required. Including both the `default` and `required` keyword arguments is invalid and will raise an error.
7070

71-
Notes regarding default value propagation from model to serializer:
72-
73-
All the default values from model will pass as default to the serializer and the options method.
74-
75-
If the default is callable then it will be propagated to & evaluated every time in the serializer but not in options method.
76-
77-
If the value for given field is not given then default value will be present in the serializer and available in serializer's methods. Specified validation on given field will be evaluated on default value as that field will be present in the serializer.
78-
7971
### `allow_null`
8072

8173
Normally an error will be raised if `None` is passed to a serializer field. Set this keyword argument to `True` if `None` should be considered a valid value.

docs/api-guide/permissions.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,11 @@ This permission is suitable if you want to your API to allow read permissions to
173173

174174
This permission class ties into Django's standard `django.contrib.auth` [model permissions][contribauth]. This permission must only be applied to views that have a `.queryset` property or `get_queryset()` method. Authorization will only be granted if the user *is authenticated* and has the *relevant model permissions* assigned. The appropriate model is determined by checking `get_queryset().model` or `queryset.model`.
175175

176-
* `GET` requests require the user to have the `view` or `change` permission on the model
177176
* `POST` requests require the user to have the `add` permission on the model.
178177
* `PUT` and `PATCH` requests require the user to have the `change` permission on the model.
179178
* `DELETE` requests require the user to have the `delete` permission on the model.
180179

181-
The default behaviour can also be overridden to support custom model permissions.
180+
The default behavior can also be overridden to support custom model permissions. For example, you might want to include a `view` model permission for `GET` requests.
182181

183182
To use custom model permissions, override `DjangoModelPermissions` and set the `.perms_map` property. Refer to the source code for details.
184183

docs/api-guide/renderers.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ By default this will include the following keys: `view`, `request`, `response`,
283283

284284
The following is an example plaintext renderer that will return a response with the `data` parameter as the content of the response.
285285

286-
from django.utils.encoding import smart_text
286+
from django.utils.encoding import smart_str
287287
from rest_framework import renderers
288288

289289

@@ -292,7 +292,7 @@ The following is an example plaintext renderer that will return a response with
292292
format = 'txt'
293293

294294
def render(self, data, accepted_media_type=None, renderer_context=None):
295-
return smart_text(data, encoding=self.charset)
295+
return smart_str(data, encoding=self.charset)
296296

297297
## Setting the character set
298298

docs/api-guide/schemas.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ The following sections explain more.
5656

5757
### Install dependencies
5858

59-
pip install pyyaml uritemplate
59+
pip install pyyaml uritemplate inflection
6060

6161
* `pyyaml` is used to generate schema into YAML-based OpenAPI format.
6262
* `uritemplate` is used internally to get parameters in path.
63+
* `inflection` is used to pluralize operations more appropriately in the list endpoints.
6364

6465
### Generating a static schema with the `generateschema` management command
6566

docs/api-guide/serializers.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -845,8 +845,6 @@ Here's an example of how you might choose to implement multiple updates:
845845
class Meta:
846846
list_serializer_class = BookListSerializer
847847

848-
It is possible that a third party package may be included alongside the 3.1 release that provides some automatic support for multiple update operations, similar to the `allow_add_remove` behavior that was present in REST framework 2.
849-
850848
#### Customizing ListSerializer initialization
851849

852850
When a serializer with `many=True` is instantiated, we need to determine which arguments and keyword arguments should be passed to the `.__init__()` method for both the child `Serializer` class, and for the parent `ListSerializer` class.

0 commit comments

Comments
 (0)