From d8dbd8679080035de4e785a8e7b998fb01f4052b Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Sat, 10 Jan 2015 10:41:12 +0100 Subject: [PATCH] Update documentation --- .DS_Store | Bin 6148 -> 0 bytes api-guide/authentication/index.html | 4 +- api-guide/exceptions/index.html | 10 ++++- api-guide/fields/index.html | 3 +- api-guide/filtering/index.html | 1 + api-guide/format-suffixes/index.html | 10 +++++ api-guide/generic-views/index.html | 2 + api-guide/relations/index.html | 1 + api-guide/routers/index.html | 42 +++++++++++++++++++++ api-guide/serializers/index.html | 2 +- img/.DS_Store | Bin 15364 -> 0 bytes img/1-kuwaitnet.png | Bin 12302 -> 0 bytes img/autocomplete.png | Bin 58140 -> 0 bytes img/sponsors/.DS_Store | Bin 6148 -> 0 bytes index.html | 4 +- topics/3.0-announcement/index.html | 5 ++- topics/project-management/index.html | 5 +++ topics/release-notes/index.html | 23 ++++++++++- tutorial/1-serialization/index.html | 4 +- tutorial/6-viewsets-and-routers/index.html | 1 + 20 files changed, 104 insertions(+), 13 deletions(-) delete mode 100644 .DS_Store delete mode 100644 img/.DS_Store delete mode 100644 img/1-kuwaitnet.png delete mode 100644 img/autocomplete.png delete mode 100644 img/sponsors/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index e1d77174bc6377a44550174d5d207307874cfa00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Wl&^6rJ0o;PgRF-#i4S*&sDS=_8a%2uvt~ibbO)qN$ovoY+k*9FJ=|2_*!= zjz8c7*t6pU_yLw|S+HZphCO#Ylk^c-ltqOqUuouC-^Yya@nj}L2!V7}pCLphgh<#J zM*Fb)gD^j9UD6{gy@`h=yXMghLC}ff&YyG_S=mRlT=8#SU>ptwM@@X zCci>YB-(rCtQ3n$1BEry)@eOWtG4cKWOryiYwAW(b2kIs*ZiuN*4)68(fl3s1bU8A z3-yACUNd!nXG@-FG*Zd=gp!(XCX~j)>_S4hIWyO6#v~~w6KQPf#_dNrt?{b)`VA)y zaE}ROP+%M0q9STAOEs|v!H=TDYxpM1ohthJ2L{g#$>)bhM#sh{CNEsPbb0v7Rb@*a zDQczXWtWw9pIX#STUBFA9`dlrhdYx+>lT12l zyiIhsBFWG(#&Wh+G2&`QjHEsmc@mi>_eho$$S!G-_v8clL_U)*-$h8N2=sB9KRQQO8v)A4KqRpLIzGb18jd#urX8x zwm1e`2X?^~05OW@Ku~9Q36`S>R0Xy;q6Yam4_hj&?=FsRCOZc{%}c`2aC9 zh#Lw7v*Y+m5Kchl81^9pAp?gQi10_5o&OL1e*Zt56h4IvgbbW21|YhWT}op~;%x0I zj-9m%wrALwu(%e-AO$;d90v+JiYKuJfQh^oLAN3@`Xe*^*=!Y*XsL>c%Ejzs|2 diff --git a/api-guide/authentication/index.html b/api-guide/authentication/index.html index a41c7bb04..ac8f46292 100644 --- a/api-guide/authentication/index.html +++ b/api-guide/authentication/index.html @@ -487,7 +487,7 @@

If no class authenticates, request.user will be set to an instance of django.contrib.auth.models.AnonymousUser, and request.auth will be set to None.

The value of request.user and request.auth for unauthenticated requests can be modified using the UNAUTHENTICATED_USER and UNAUTHENTICATED_TOKEN settings.

Setting the authentication scheme

-

The default authentication schemes may be set globally, using the DEFAULT_AUTHENTICATION setting. For example.

+

The default authentication schemes may be set globally, using the DEFAULT_AUTHENTICATION_CLASSES setting. For example.

REST_FRAMEWORK = {
     'DEFAULT_AUTHENTICATION_CLASSES': (
         'rest_framework.authentication.BasicAuthentication',
@@ -672,7 +672,7 @@ python manage.py createsuperuser
     'provider.oauth2',
 )
 
-

Then add OAuth2Authentication to your global DEFAULT_AUTHENTICATION setting:

+

Then add OAuth2Authentication to your global DEFAULT_AUTHENTICATION_CLASSES setting:

'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.OAuth2Authentication',
 ),
diff --git a/api-guide/exceptions/index.html b/api-guide/exceptions/index.html
index a0734a149..f9403f1d0 100644
--- a/api-guide/exceptions/index.html
+++ b/api-guide/exceptions/index.html
@@ -442,7 +442,7 @@
 
  • Django's PermissionDenied exception.
  • In each case, REST framework will return a response with an appropriate status code and content-type. The body of the response will include any additional details regarding the nature of the error.

    -

    By default all error responses will include a key detail in the body of the response, but other keys may also be included.

    +

    Most error responses will include a key detail in the body of the response.

    For example, the following request:

    DELETE http://api.example.com/foo/bar HTTP/1.1
     Accept: application/json
    @@ -454,6 +454,14 @@ Content-Length: 42
     
     {"detail": "Method 'DELETE' not allowed."}
     
    +

    Validation errors are handled slightly differently, and will include the field names as the keys in the response. If the validation error was not specific to a particular field then it will use the "non_field_errors" key, or whatever string value has been set for the NON_FIELD_ERRORS_KEY setting.

    +

    Any example validation error might look like this:

    +
    HTTP/1.1 400 Bad Request
    +Content-Type: application/json
    +Content-Length: 94
    +
    +{"amount": ["A valid integer is required."], "description": ["This field may not be blank."]}
    +

    Custom exception handling

    You can implement custom exception handling by creating a handler function that converts exceptions raised in your API views into response objects. This allows you to control the style of error responses used by your API.

    The function must take a single argument, which is the exception to be handled, and should either return a Response object, or return None if the exception cannot be handled. If the handler returns None then the exception will be re-raised and Django will return a standard HTTP 500 'server error' response.

    diff --git a/api-guide/fields/index.html b/api-guide/fields/index.html index aedc4ea1c..9cac530a9 100644 --- a/api-guide/fields/index.html +++ b/api-guide/fields/index.html @@ -595,6 +595,7 @@

    required

    Normally an error will be raised if a field is not supplied during deserialization. Set to false if this field is not required to be present during deserialization.

    +

    Setting this to False also allows the object attribute or dictionary key to be omitted from output when serializing the instance. If the key is not present it will simply not be included in the output representation.

    Defaults to True.

    allow_null

    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.

    @@ -879,7 +880,7 @@ class UserSerializer(serializers.ModelSerializer): class ColorField(serializers.Field): """ - Color objects are serialized into "rgb(#, #, #)" notation. + Color objects are serialized into 'rgb(#, #, #)' notation. """ def to_representation(self, obj): return "rgb(%d, %d, %d)" % (obj.red, obj.green, obj.blue) diff --git a/api-guide/filtering/index.html b/api-guide/filtering/index.html index 6a55b9995..fa0a15f82 100644 --- a/api-guide/filtering/index.html +++ b/api-guide/filtering/index.html @@ -702,6 +702,7 @@ class ProductFilter(django_filters.FilterSet): queryset = User.objects.all() serializer_class = UserSerializer filter_backends = (filters.OrderingFilter,) + ordering_fields = ('username', 'email') ordering = ('username',)

    The ordering attribute may be either a string or a list/tuple of strings.

    diff --git a/api-guide/format-suffixes/index.html b/api-guide/format-suffixes/index.html index 22181b1bf..d7d74db91 100644 --- a/api-guide/format-suffixes/index.html +++ b/api-guide/format-suffixes/index.html @@ -428,6 +428,16 @@ def comment_list(request, format=None):

    The name of the kwarg used may be modified by using the FORMAT_SUFFIX_KWARG setting.

    Also note that format_suffix_patterns does not support descending into include URL patterns.

    +

    Using with i18n_patterns

    +

    If using the i18n_patterns function provided by Django, as well as format_suffix_patterns you should make sure that the i18n_patterns function is applied as the final, or outermost function. For example:

    +
    url patterns = [
    +    …
    +]
    +
    +urlpatterns = i18n_patterns(
    +    format_suffix_patterns(urlpatterns, allowed=['json', 'html'])
    +)
    +

    Accept headers vs. format suffixes

    There seems to be a view among some of the Web community that filename extensions are not a RESTful pattern, and that HTTP Accept headers should always be used instead.

    diff --git a/api-guide/generic-views/index.html b/api-guide/generic-views/index.html index 18910b4e8..675220d72 100644 --- a/api-guide/generic-views/index.html +++ b/api-guide/generic-views/index.html @@ -666,6 +666,7 @@ class UserList(generics.ListCreateAPIView):

    Mixins

    The mixin classes provide the actions that are used to provide the basic view behavior. Note that the mixin classes provide action methods rather than defining the handler methods, such as .get() and .post(), directly. This allows for more flexible composition of behavior.

    +

    The mixin classes can be imported from rest_framework.mixins.

    ListModelMixin

    Provides a .list(request, *args, **kwargs) method, that implements listing a queryset.

    If the queryset is populated, this returns a 200 OK response, with a serialized representation of the queryset as the body of the response. The response data may optionally be paginated.

    @@ -688,6 +689,7 @@ class UserList(generics.ListCreateAPIView):

    Concrete View Classes

    The following classes are the concrete generic views. If you're using generic views this is normally the level you'll be working at unless you need heavily customized behavior.

    +

    The view classes can be imported from rest_framework.generics.

    CreateAPIView

    Used for create-only endpoints.

    Provides a post method handler.

    diff --git a/api-guide/relations/index.html b/api-guide/relations/index.html index 85378cc5c..ee51a7e32 100644 --- a/api-guide/relations/index.html +++ b/api-guide/relations/index.html @@ -664,6 +664,7 @@ class Track(models.Model):
    • view_name - The view name that should be used as the target of the relationship. If you're using the standard router classes this will be a string with the format <model_name>-detail. required.
    • lookup_field - The field on the target that should be used for the lookup. Should correspond to a URL keyword argument on the referenced view. Default is 'pk'.
    • +
    • lookup_url_kwarg - The name of the keyword argument defined in the URL conf that corresponds to the lookup field. Defaults to using the same value as lookup_field.
    • format - If using format suffixes, hyperlinked fields will use the same format suffix for the target unless overridden by using the format argument.

    diff --git a/api-guide/routers/index.html b/api-guide/routers/index.html index 32022b86c..70d136f4c 100644 --- a/api-guide/routers/index.html +++ b/api-guide/routers/index.html @@ -475,6 +475,32 @@ urlpatterns = router.urls

    This means you'll need to explicitly set the base_name argument when registering the viewset, as it could not be automatically determined from the model name.


    +

    Using include with routers

    +

    The .urls attribute on a router instance is simply a standard list of URL patterns. There are a number of different styles for how you can include these URLs.

    +

    For example, you can append router.urls to a list of existing views…

    +
    router = routers.SimpleRouter()
    +router.register(r'users', UserViewSet)
    +router.register(r'accounts', AccountViewSet)
    +
    +urlpatterns = [
    +    url(r'^forgot-password/$, ForgotPasswordFormView.as_view(),
    +]
    +
    +urlpatterns += router.urls
    +
    +

    Alternatively you can use Django's include function, like so…

    +
    urlpatterns = [
    +    url(r'^forgot-password/$, ForgotPasswordFormView.as_view(),
    +    url(r'^', include(router.urls))
    +]
    +
    +

    Router URL patterns can also be namespaces.

    +
    urlpatterns = [
    +    url(r'^forgot-password/$, ForgotPasswordFormView.as_view(),
    +    url(r'^api/', include(router.urls, namespace='api'))
    +]
    +
    +

    If using namespacing with hyperlinked serializers you'll also need to ensure that any view_name parameters on the serializers correctly reflect the namespace. In the example above you'd need to include a parameter such as view_name='api:user-detail' for serializer fields hyperlinked to the user detail view.

    Any methods on the viewset decorated with @detail_route or @list_route will also be routed. For example, given a method like this on the UserViewSet class:

    @@ -492,6 +518,22 @@ class UserViewSet(ModelViewSet):
    • URL pattern: ^users/{pk}/set_password/$ Name: 'user-set-password'
    +

    If you do not want to use the default URL generated for your custom action, you can instead use the url_path parameter to customize it.

    +

    For example, if you want to change the URL for our custom action to ^users/{pk}/change-password/$, you could write:

    +
    from myapp.permissions import IsAdminOrIsSelf
    +from rest_framework.decorators import detail_route
    +
    +class UserViewSet(ModelViewSet):
    +    ...
    +
    +    @detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf], url_path='change-password')
    +    def set_password(self, request, pk=None):
    +        ...
    +
    +

    The above example would now generate the following URL pattern:

    +
      +
    • URL pattern: ^users/{pk}/change-password/$ Name: 'user-change-password'
    • +

    For more information see the viewset documentation on marking extra actions for routing.

    API Guide

    SimpleRouter

    diff --git a/api-guide/serializers/index.html b/api-guide/serializers/index.html index 64d6c8b9b..4bb06d3ba 100644 --- a/api-guide/serializers/index.html +++ b/api-guide/serializers/index.html @@ -868,7 +868,7 @@ serializer.errors has_support_contract=validated_data['profile']['has_support_contract'] ) -

    For more details on this approach see the Django documentation on model managers, and this blogpost on using model and manger classes.

    +

    For more details on this approach see the Django documentation on model managers, and this blogpost on using model and manager classes.

    Dealing with multiple objects

    The Serializer class can also handle serializing or deserializing lists of objects.

    Serializing multiple objects

    diff --git a/img/.DS_Store b/img/.DS_Store deleted file mode 100644 index ad96cb498be3afce5fd939b21547ee9bd29f67b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15364 zcmeHMS!~=y82P;YBfCm~G}+OX|P5NJ{*MQ!P!cDqfJrW}o$v`J`6>b0H3tz&O( z?}icrDIio3AT9|cgt&PC1TUNqNE{Coal8;AKpYRi3lC6b~gwKA)zu8 zdH(UteE-aR^UbVh0sxrG8XW*}0FdZmR+TBL5Lh{T%0g9?Q%4pF58%NuSOXbwV63dR z$Pf$&1_T3w0l|P^;J?5C{bsWuEe@@S1p|Ts!9allwm-z_VKy1rnb7jBgCc$eAX`n@ zJW!g>0UQ&LY%;Plq2*BW8J-?6f?{;Uzz|O5aaNsdGO{zF4dH+x958AbqZ119)(IEq z)d7>C6|rDIFi_3_JG(Cejn3>A#YN}$9^2K^wwtDMwxqh~Y59W(O0hf*vJij^Iz1DF zx51=$Gk^Xs!GBPKmkDQ5ds&Xt=*A$rH<*jVy(PE?FyJt?&2AW6Xd@3M_|$G2#gmjj zMt{t2WpAIBcv}pkgvrs^*(g{acxrAR_}CvR8hbOfVbe`V2F43WpL#G(zHIVnQ!eWt z%bVnN{+gF!-^>2C@5&=&d=>kX$e&03G5&&);`-;oQJNFR!V%6Z(?n1i%XmSlh?j<< z*%+m?M!GPG0hiK8hzo;KI(e3-L>DLow39hg|_t?~68mrYN{Bq^qXRKIG?mR7eix$huc}vuq+Pd@Wmo_YGY`S21ZS#fk5w$L@=|{#q z#=s8OcDalFP0uG= zh95j=YiZNo z#s#S0Qe1_ru@%?hR!m|K?!^OWpowFc!K0YNNG4TznXHWbMg~t%qD%?4pX&`pU-f)m z37=zL^jrr!ySf{8$@3CBcj`yf8eOyXtgQv+cH3rD`UARaXD1xLY#N4&giI=F!aCN<%0Mm@rg}w` zxxQXj26cC0f;#6%d7CyX%C)T7D>XmZlQA9Y(n)H2TXK7y(xi0GH$+JqVyNwgVH%0# zt-td5Kcn2dDiX=|Fc~9Ntbn!934?Hmw%#eY3m$^U;U#zlUWM1-9on*I;dA&FeuPu- z6P$+MunL!84c1~EF2@$U1TV$Q@N(RQn{f;7#NBu$UWHfV03O5yukQgGe_04Y%^ccOtK`Mn%9-C zkG!bVg=}?5yfz74Q6;WD2EMq3UaM$zgr%)*imWc+Yk-w9d8_AewX@gt8)R9n=IepI zZr(zr=W^LEZ@QpSZkAIq`nBWDEN)R`iMH5(uGsfUuiubbPs8u<2QEYz8)@%s!8N4O zB&JBAUD%Diw1f8JKHN_l)llbqsY83Ihdya_nv{ARZ^m2jPP`lM!F%yOd>9|WNAWRy z9G}JK@OgZJl=~XKj&I}pIE!DFX!eQ{&3;u$v$;Ocv0aD#8;$MTHS__)KB(BID*LQt zpSb9bfGkO(4Fd!HZ4CEPD5GLa6{(mPO>F4?Xf4;h~f&sz6S;zoZ zclLFrXkhshV(A#!U3;9KL-eq~>dl0fLnvZZSU$gwrx$h|&(Fk^7o8_~c`~Xu6Iu=@ z9EXz)Z}b24e+G#2Kchbk;{5-=JpbpXUs%C_U_dY+7!V8y1_T3w0l|P^KrkQ}5DW+g P1OtKr!GK`k>|@|h3DNFE diff --git a/img/1-kuwaitnet.png b/img/1-kuwaitnet.png deleted file mode 100644 index c73b68154dd3768118d5f623f21a4231f78d0da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12302 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
      Q9|>9VxyGV>=r#^(|L?p*IDxk9faW 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 JDrX$@e*g+EQ#b$s diff --git a/img/autocomplete.png b/img/autocomplete.png deleted file mode 100644 index 29075b257ccfc85c0939fd9ddcc000243c0ab4ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58140 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

      `IFPYHfaS7A8ra9IoG7nM&FQf50 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 framework requires the following:

      • Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
      • -
      • Django (1.4.11+, 1.5.5+, 1.6, 1.7)
      • +
      • Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7)

      The following packages are optional:

        @@ -655,7 +655,7 @@ Framework.

        If you believe you’ve found something in Django REST framework which has security implications, please do not raise the issue in a public forum.

        Send a description of the issue via email to rest-framework-security@googlegroups.com. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure.

        License

        -

        Copyright (c) 2011-2014, Tom Christie +

        Copyright (c) 2011-2015, Tom Christie All rights reserved.

        Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

        diff --git a/topics/3.0-announcement/index.html b/topics/3.0-announcement/index.html index 96e688267..25d0131c1 100644 --- a/topics/3.0-announcement/index.html +++ b/topics/3.0-announcement/index.html @@ -472,9 +472,9 @@ ExampleSerializer(data=request.DATA, files=request.FILES)

    The resulting API changes are further detailed below.

    The .create() and .update() methods.

    -

    The .restore_object() method is now replaced with two separate methods, .create() and .update().

    -

    These methods also replace the optional .save_object() method, which no longer exists.

    +

    The .restore_object() method is now removed, and we instead have two separate methods, .create() and .update(). These methods work slightly different to the previous .restore_object().

    When using the .create() and .update() methods you should both create and save the object instance. This is in contrast to the previous .restore_object() behavior that would instantiate the object but not save it.

    +

    These methods also replace the optional .save_object() method, which no longer exists.

    The following example from the tutorial previously used restore_object() to handle both creating and updating object instances.

    def restore_object(self, attrs, instance=None):
         if instance:
    @@ -1136,6 +1136,7 @@ amount = serializers.DecimalField(
     
  • The serializer ChoiceField does not currently display nested choices, as was the case in 2.4. This will be address as part of 3.1.
  • Due to the new templated form rendering, the 'widget' option is no longer valid. This means there's no easy way of using third party "autocomplete" widgets for rendering select inputs that contain a large number of choices. You'll either need to use a regular select or a plain text input. We may consider addressing this in 3.1 or 3.2 if there's sufficient demand.
  • Some of the default validation error messages were rewritten and might no longer be pre-translated. You can still create language files with Django if you wish to localize them.
  • +
  • APIException subclasses could previously take could previously take any arbitrary type in the detail argument. These exceptions now use translatable text strings, and as a result call force_text on the detail argument, which must be a string. If you need complex arguments to an APIException class, you should subclass it and override the __init__() method. Typically you'll instead want to use a custom exception handler to provide for non-standard error responses.

  • What's coming next

    diff --git a/topics/project-management/index.html b/topics/project-management/index.html index e1e7d7565..91fa23596 100644 --- a/topics/project-management/index.html +++ b/topics/project-management/index.html @@ -432,6 +432,8 @@ The following people are the current maintenance team. Please checkmark your nam #### New members. If you wish to be considered for this or a future date, please comment against this or subsequent issues. + +To modify this process for future maintenance cycles make a pull request to the [project management](http://www.django-rest-framework.org/topics/project-management/) documentation.

    Responsibilities of team members

    Team members have the following responsibilities.

    @@ -475,6 +477,8 @@ Checklist: - [ ] Make a release announcement on the [discussion group](https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework). - [ ] Make a release announcement on twitter. - [ ] Close the milestone on GitHub. + +To modify this process for future releases make a pull request to the [project management](http://www.django-rest-framework.org/topics/project-management/) documentation.

    When pushing the release to PyPI ensure that your environment has been installed from our development requirement.txt, so that documentation and PyPI installs are consistently being built against a pinned set of packages.


    @@ -488,6 +492,7 @@ Checklist:
  • Ensure @jamie has back-up access to the django-rest-framework.org domain setup and admin.
  • Document ownership of the live example API.
  • Document ownership of the mailing list and IRC channel.
  • +
  • Document ownership and management of the security mailing list.
  • diff --git a/topics/release-notes/index.html b/topics/release-notes/index.html index fb25f224c..389c9b795 100644 --- a/topics/release-notes/index.html +++ b/topics/release-notes/index.html @@ -439,6 +439,25 @@

    3.0.x series

    +

    3.0.3

    +

    Date: 8th January 2015.

    +
      +
    • Fix MinValueValidator on models.DateField. (#2369)
    • +
    • Fix serializer missing context when pagination is used. (#2355)
    • +
    • Namespaced router URLs are now supported by the DefaultRouter. (#2351)
    • +
    • required=False allows omission of value for output. (#2342)
    • +
    • Use textarea input for models.TextField. (#2340)
    • +
    • Use custom ListSerializer for pagination if required. (#2331, #2327)
    • +
    • Better behavior with null and '' for blank HTML fields. (#2330)
    • +
    • Ensure fields in exclude are model fields. (#2319)
    • +
    • Fix IntegerField and max_length argument incompatibility. (#2317)
    • +
    • Fix the YAML encoder for 3.0 serializers. (#2315, #2283)
    • +
    • Fix the behavior of empty HTML fields. (#2311, #1101)
    • +
    • Fix Metaclass attribute depth ignoring fields attribute. (#2287)
    • +
    • Fix format_suffix_patterns to work with Django's i18n_patterns. (#2278)
    • +
    • Ability to customize router URLs for custom actions, using url_path. (#2010)
    • +
    • Don't install Django REST Framework as egg. (#2386)
    • +

    3.0.2

    Date: 17th December 2014.

      @@ -983,8 +1002,8 @@

      For older release notes, please see the GitHub repo.

      - - +

      +

      diff --git a/tutorial/1-serialization/index.html b/tutorial/1-serialization/index.html index a0e975d0a..2363f3550 100644 --- a/tutorial/1-serialization/index.html +++ b/tutorial/1-serialization/index.html @@ -512,7 +512,7 @@ class SnippetSerializer(serializers.Serializer):

      The first part of the serializer class defines the fields that get serialized/deserialized. The create() and update() methods define how fully fledged instances are created or modified when calling serializer.save()

      A serializer class is very similar to a Django Form class, and includes similar validation flags on the various fields, such as required, max_length and default.

      -

      The field flags can also control how the serializer should be displayed in certain circumstances, such as when rendering to HTML. The style={'type': 'textarea'} flag above is equivelent to using widget=widgets.Textarea on a Django Form class. This is particularly useful for controlling how the browsable API should be displayed, as we'll see later in the tutorial.

      +

      The field flags can also control how the serializer should be displayed in certain circumstances, such as when rendering to HTML. The {'base_template': 'textarea.html'} flag above is equivelent to using widget=widgets.Textarea on a Django Form class. This is particularly useful for controlling how the browsable API should be displayed, as we'll see later in the tutorial.

      We can actually also save ourselves some time by using the ModelSerializer class, as we'll see later, but for now we'll keep our serializer definition explicit.

      Working with Serializers

      Before we go any further we'll familiarize ourselves with using our new Serializer class. Let's drop into the Django shell.

      @@ -578,7 +578,7 @@ Open the file snippets/serializers.py again, and edit the Sni SnippetSerializer(): id = IntegerField(label='ID', read_only=True) title = CharField(allow_blank=True, max_length=100, required=False) - code = CharField(style={'type': 'textarea'}) + code = CharField(style={'base_template': 'textarea.html'}) linenos = BooleanField(required=False) language = ChoiceField(choices=[('Clipper', 'FoxPro'), ('Cucumber', 'Gherkin'), ('RobotFramework', 'RobotFramework'), ('abap', 'ABAP'), ('ada', 'Ada')... style = ChoiceField(choices=[('autumn', 'autumn'), ('borland', 'borland'), ('bw', 'bw'), ('colorful', 'colorful')... diff --git a/tutorial/6-viewsets-and-routers/index.html b/tutorial/6-viewsets-and-routers/index.html index 4babe7070..254ab7913 100644 --- a/tutorial/6-viewsets-and-routers/index.html +++ b/tutorial/6-viewsets-and-routers/index.html @@ -437,6 +437,7 @@ class SnippetViewSet(viewsets.ModelViewSet):

      This time we've used the ModelViewSet class in order to get the complete set of default read and write operations.

      Notice that we've also used the @detail_route decorator to create a custom action, named highlight. This decorator can be used to add any custom endpoints that don't fit into the standard create/update/delete style.

      Custom actions which use the @detail_route decorator will respond to GET requests. We can use the methods argument if we wanted an action that responded to POST requests.

      +

      The URLs for custom actions by default depend on the method name itself. If you want to change the way url should be constructed, you can include url_path as a decorator keyword argument.

      Binding ViewSets to URLs explicitly

      The handler methods only get bound to the actions when we define the URLConf. To see what's going on under the hood let's first explicitly create a set of views from our ViewSets.