dynamic plans
TRANSCRIPT
![Page 1: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/1.jpg)
Dynamic PlansConnecting backend and mobile
Stockholm Python MeetupJun 16, 2016
![Page 2: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/2.jpg)
About me
Ilian Iliev
Platform Engineer
www.ilian.io
![Page 3: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/3.jpg)
Plans - the next step towards healthy life
![Page 4: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/4.jpg)
Feature requirements
● Multilingual support● Different images based on the screen density● Color fields● Serialization● Caching● Administration
![Page 5: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/5.jpg)
Multilingual supportDjango Parler
class Plan(TranslatableModel):
detail_image = ScreenDensityImageField(upload_to='plans/detail_images')
translations = TranslatedFields(
title=models.CharField(max_length=255),
short_description=models.TextField(),
description=models.TextField(),
)
![Page 6: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/6.jpg)
![Page 7: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/7.jpg)
Different images based on screen density● Our screen sizes : 1x, 1.5x, 2x, 3x● Pixel perfect design● Django Multiupload
![Page 8: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/8.jpg)
Color fieldsDjango Colorful
class Plan(TranslatableModel):
start_color = RGBColorField()
end_color = RGBColorField()
content_color = RGBColorField()
![Page 9: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/9.jpg)
![Page 10: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/10.jpg)
Serialization● DRF Serializers● Different fields for list and detail
class PlanSerializer(ShortListSerializerMixin, serializers.ModelSerializer):
class Meta:
model = Plan
list_fields = ['id', 'title', 'short_description']
fields = list_fields + ['description']
![Page 11: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/11.jpg)
Caching● Per object caching● Key attributes
○ Language○ Screen Density
● Redis HSET
● Easy to invalidate
![Page 12: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/12.jpg)
{
"plan_list_20" : {...},
"plan_list_14": {...},
"plan_detail_8": {
"en-3": "{\"key\": \"value\"}",
"de-2": "...",
"en-2": "...",
"sv-2": "...",
"sv-1": "...",
}
![Page 13: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/13.jpg)
Administration
![Page 14: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/14.jpg)
![Page 15: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/15.jpg)
![Page 16: Dynamic plans](https://reader031.vdocuments.us/reader031/viewer/2022030219/5885ae591a28abd2348b6143/html5/thumbnails/16.jpg)
Questions?