From 76fa169a15ef670d57772f17ab1f020dbf987ee3 Mon Sep 17 00:00:00 2001
From: Tom Christie If you want to create a custom field, you'll need to subclass The The Note that the Let's look at an example of serializing a class that represents an RGB color value: For example: Note: These methods replace the old-style version 2.x Other methods: You won't typically need to override the following methods, although you might need to call into them if you're writing custom views using Field
and then override either one or both of the .to_representation()
and .to_internal_value()
methods. These two methods are used to convert between the initial datatype, and a primitive, serializable datatype. Primitive datatypes will typically be any of a number, string, boolean, date
/time
/datetime
or None
. They may also be any list or dictionary like object that only contains other primitive objects. Other types might be supported, depending on the renderer that you are using..to_representation()
method is called to convert the initial datatype into a primitive, serializable datatype.to_internal_value()
method is called to restore a primitive datatype into its internal python representation. This method should raise a serializers.ValidationError
if the data is invalid.WritableField
class that was present in version 2.x no longer exists. You should subclass Field
and override to_internal_value()
if the field supports data input.Examples
A Basic Custom Field
pre_save
, post_save
, pre_delete
and post_delete
methods, which are no longer available.GenericAPIView
.
diff --git a/api-guide/schemas/index.html b/api-guide/schemas/index.html
index 767711b46..ac2465fee 100644
--- a/api-guide/schemas/index.html
+++ b/api-guide/schemas/index.html
@@ -449,14 +449,16 @@ can interact with your API.
Django REST Framework provides support for automatic generation of OpenAPI schemas.
pyyaml
You'll need to install pyyaml
, so that you can render your generated schema
-into the commonly used YAML-based OpenAPI format.
pip install pyyaml
+Install dependencies
+pip install pyyaml uritemplate
+
+pyyaml
is used to generate schema into YAML-based OpenAPI format.
+uritemplate
is used internally to get parameters in path.
+
Generating a static schema with the generateschema
management command
If your schema is static, you can use the generateschema
management command:
-./manage.py generateschema > openapi-schema.yml
+./manage.py generateschema --file openapi-schema.yml
Once you've generated a schema in this way you can annotate it with any
@@ -542,7 +544,7 @@ schema_view = get_schema_view(
You may customize schema generation at the level of the schema as a whole, or
on a per-view basis.
Schema Level Customization
-In order to customize the top-level schema sublass
+
In order to customize the top-level schema subclass
rest_framework.schemas.openapi.SchemaGenerator
and provide it as an argument
to the generateschema
command or get_schema_view()
helper function.
SchemaGenerator
@@ -616,6 +618,185 @@ provide richer path field descriptions. (The key hooks here are the relevant
If you wish to provide a base AutoSchema
subclass to be used throughout your
project you may adjust settings.DEFAULT_SCHEMA_CLASS
appropriately.
+Grouping Operations With Tags
+Tags can be used to group logical operations. Each tag name in the list MUST be unique.
+
+Django REST Framework generates tags automatically with the following logic:
+Tag name will be first element from the path. Also, any _
in path name will be replaced by a -
.
+Consider below examples.
+Example 1: Consider a user management system. The following table will illustrate the tag generation logic.
+Here first element from the paths is: users
. Hence tag wil be users
+
+
+
+Http Method
+Path
+Tags
+
+
+
+
+PUT, PATCH, GET(Retrieve), DELETE
+/users/{id}/
+['users']
+
+
+POST, GET(List)
+/users/
+['users']
+
+
+
+Example 2: Consider a restaurant management system. The System has restaurants. Each restaurant has branches.
+Consider REST APIs to deal with a branch of a particular restaurant.
+Here first element from the paths is: restaurants
. Hence tag wil be restaurants
.
+
+
+
+Http Method
+Path
+Tags
+
+
+
+
+PUT, PATCH, GET(Retrieve), DELETE:
+/restaurants/{restaurant_id}/branches/{branch_id}
+['restaurants']
+
+
+POST, GET(List):
+/restaurants/{restaurant_id}/branches/
+['restaurants']
+
+
+
+Example 3: Consider Order items for an e commerce company.
+
+
+
+Http Method
+Path
+Tags
+
+
+
+
+PUT, PATCH, GET(Retrieve), DELETE
+/order_items/{id}/
+['order-items']
+
+
+POST, GET(List)
+/order_items/
+['order-items']
+
+
+
+
+Overriding auto generated tags:
+You can override auto-generated tags by passing tags
argument to the constructor of AutoSchema
. tags
argument must be a list or tuple of string.
+from rest_framework.schemas.openapi import AutoSchema
+from rest_framework.views import APIView
+
+class MyView(APIView):
+ schema = AutoSchema(tags=['tag1', 'tag2'])
+ ...
+
+
+If you need more customization, you can override the get_tags
method of AutoSchema
class. Consider the following example:
+from rest_framework.schemas.openapi import AutoSchema
+from rest_framework.views import APIView
+
+class MySchema(AutoSchema):
+ ...
+ def get_tags(self, path, method):
+ if method == 'POST':
+ tags = ['tag1', 'tag2']
+ elif method == 'GET':
+ tags = ['tag2', 'tag3']
+ elif path == '/example/path/':
+ tags = ['tag3', 'tag4']
+ else:
+ tags = ['tag5', 'tag6', 'tag7']
+
+ return tags
+
+class MyView(APIView):
+ schema = MySchema()
+ ...
+
+
+OperationId
+The schema generator generates an operationid for each operation. This operationId
is deduced from the model name, serializer name or view name. The operationId may looks like "listItems", "retrieveItem", "updateItem", etc..
+The operationId
is camelCase by convention.
+If you have several views with the same model, the generator may generate duplicate operationId.
+In order to work around this, you can override the second part of the operationId: operation name.
+from rest_framework.schemas.openapi import AutoSchema
+
+class ExampleView(APIView):
+ """APIView subclass with custom schema introspection."""
+ schema = AutoSchema(operation_id_base="Custom")
+
+
+The previous example will generate the following operationId: "listCustoms", "retrieveCustom", "updateCustom", "partialUpdateCustom", "destroyCustom".
+You need to provide the singular form of he operation name. For the list operation, a "s" will be appended at the end of the operation.
+If you need more configuration over the operationId
field, you can override the get_operation_id_base
and get_operation_id
methods from the AutoSchema
class:
+class CustomSchema(AutoSchema):
+ def get_operation_id_base(self, path, method, action):
+ pass
+
+ def get_operation_id(self, path, method):
+ pass
+
+class MyView(APIView):
+ schema = AutoSchema(component_name="Ulysses")
+
+
+Components
+Since DRF 3.12, Schema uses the OpenAPI Components. This method defines components in the schema and references them inside request and response objects. By default, the component's name is deduced from the Serializer's name.
+Using OpenAPI's components provides the following advantages:
+* The schema is more readable and lightweight.
+* If you use the schema to generate an SDK (using openapi-generator or swagger-codegen). The generator can name your SDK's models.
+Handling component's schema errors
+You may get the following error while generating the schema:
+"Serializer" is an invalid class name for schema generation.
+Serializer's class name should be unique and explicit. e.g. "ItemSerializer".
+
+
+This error occurs when the Serializer name is "Serializer". You should choose a component's name unique across your schema and different than "Serializer".
+You may also get the following warning:
+Schema component "ComponentName" has been overriden with a different value.
+
+
+This warning occurs when different components have the same name in one schema. Your component name should be unique across your project. This is likely an error that may lead to an invalid schema.
+You have two ways to solve the previous issues:
+* You can rename your serializer with a unique name and another name than "Serializer".
+* You can set the component_name
kwarg parameter of the AutoSchema constructor (see below).
+* You can override the get_component_name
method of the AutoSchema class (see below).
+Set a custom component's name for your view
+To override the component's name in your view, you can use the component_name
parameter of the AutoSchema constructor:
+from rest_framework.schemas.openapi import AutoSchema
+
+class MyView(APIView):
+ schema = AutoSchema(component_name="Ulysses")
+
+
+Override the default implementation
+If you want to have more control and customization about how the schema's components are generated, you can override the get_component_name
and get_components
method from the AutoSchema class.
+from rest_framework.schemas.openapi import AutoSchema
+
+class CustomSchema(AutoSchema):
+ def get_components(self, path, method):
+ # Implement your custom implementation
+
+ def get_component_name(self, serializer):
+ # Implement your custom implementation
+
+class CustomView(APIView):
+ """APIView subclass with custom schema introspection."""
+ schema = CustomSchema()
+
diff --git a/api-guide/serializers/index.html b/api-guide/serializers/index.html
index dd4763d03..8b0269aee 100644
--- a/api-guide/serializers/index.html
+++ b/api-guide/serializers/index.html
@@ -906,7 +906,7 @@ serializer.errors
def update(self, instance, validated_data):
profile_data = validated_data.pop('profile')
# Unless the application properly enforces that this field is
- # always set, the follow could raise a `DoesNotExist`, which
+ # always set, the following could raise a `DoesNotExist`, which
# would need to be handled.
profile = instance.profile
@@ -949,8 +949,8 @@ serializer.errors
def create(self, validated_data):
return User.objects.create(
username=validated_data['username'],
- email=validated_data['email']
- is_premium_member=validated_data['profile']['is_premium_member']
+ email=validated_data['email'],
+ is_premium_member=validated_data['profile']['is_premium_member'],
has_support_contract=validated_data['profile']['has_support_contract']
)
diff --git a/community/release-notes/index.html b/community/release-notes/index.html
index 81bcacece..0a9302d2d 100644
--- a/community/release-notes/index.html
+++ b/community/release-notes/index.html
@@ -421,6 +421,10 @@
Upgrading
+
+ 3.11.x series
+
+
3.10.x series
@@ -508,8 +512,27 @@
pip show djangorestframework
+3.11.x series
+3.11.0
+Date: 12th December 2019
+
+- Drop
.set_context
API in favour of a requires_context
marker.
+- Changed default widget for TextField with choices to select box. #6892
+- Supported nested writes on non-relational fields, such as JSONField. #6916
+- Include request/response media types in OpenAPI schemas, based on configured parsers/renderers. #6865
+- Include operation descriptions in OpenAPI schemas, based on the docstring on the view. #6898
+- Fix representation of serializers with all optional fields in OpenAPI schemas. #6941, #6944
+- Fix representation of
serializers.HStoreField
in OpenAPI schemas. #6914
+- Fix OpenAPI generation when title or version is not provided. #6912
+- Use
int64
representation for large integers in OpenAPI schemas. #7018
+- Improved error messages if no
.to_representation
implementation is provided on a field subclass. #6996
+- Fix for serializer classes that use multiple inheritance. #6980
+- Fix for reversing Hyperlinked URL fields with percent encoded components in the path. #7059
+- Update bootstrap to 3.4.1. #6923
+
3.10.x series
3.10.3
+Date: 4th September 2019
- Include API version in OpenAPI schema generation, defaulting to empty string.
- Add pagination properties to OpenAPI response schemas.
@@ -520,12 +543,7 @@
- Use consistent
lowerInitialCamelCase
style in OpenAPI operation IDs.
- Fix
minLength
/maxLength
/minItems
/maxItems
properties in OpenAPI schemas.
- Only call
FileField.url
once in serialization, for improved performance.
--
-
Fix an edge case where throttling calcualtions could error after a configuration change.
-
--
-
TODO
-
+- Fix an edge case where throttling calculations could error after a configuration change.
3.10.2
Date: 29th July 2019
@@ -1645,6 +1663,8 @@ Previously may have been stored internally as None
.
+
+
diff --git a/community/third-party-packages/index.html b/community/third-party-packages/index.html
index cb29b3459..a7c43521e 100644
--- a/community/third-party-packages/index.html
+++ b/community/third-party-packages/index.html
@@ -644,6 +644,7 @@ You probably want to also tag the version now:
django-rest-framework-condition - Decorators for managing HTTP cache headers for Django REST framework (ETag and Last-modified).
django-rest-witchcraft - Provides DRF integration with SQLAlchemy with SQLAlchemy model serializers/viewsets and a bunch of other goodies
djangorestframework-mvt - An extension for creating views that serve Postgres data as Map Box Vector Tiles.
+drf-viewset-profiler - Lib to profile all methods from a viewset line by line.
djangorestframework-features - Advanced schema generation and more based on named features.
diff --git a/community/tutorials-and-resources/index.html b/community/tutorials-and-resources/index.html
index 88d91fc12..69b028eda 100644
--- a/community/tutorials-and-resources/index.html
+++ b/community/tutorials-and-resources/index.html
@@ -450,8 +450,8 @@
-
-
+
+
diff --git a/css/default.css b/css/default.css
index bb17a3a11..e9d7f23bf 100644
--- a/css/default.css
+++ b/css/default.css
@@ -74,6 +74,12 @@ pre {
white-space: pre;
}
+code, pre {
+ font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,sans-serif;
+ font-size: 13px;
+}
+
+
/* Preserve the spacing of the navbar across different screen sizes. */
.navbar-inner {
/*padding: 5px 0;*/
@@ -432,3 +438,4 @@ ul.sponsor {
margin: 0 !important;
display: inline-block !important;
}
+
diff --git a/img/books/dfa-cover.jpg b/img/books/dfa-cover.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..09ed268f2f9a3eb94cef28117b5c2ccc54e2c5e9
GIT binary patch
literal 50099
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
literal 0
HcmV?d00001
diff --git a/img/books/rad-cover.png b/img/books/rad-cover.png
deleted file mode 100644
index 75b19df64a683f3a9e1681bf14c58da65026d007..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 14060
zcmeIZ