Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Hunting For Treasure In Django
Search
Seb
May 28, 2015
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hunting For Treasure In Django
Seb
May 28, 2015
More Decks by Seb
See All by Seb
Double Click - Continue Building Better CLIs
elbaschid
0
500
I Can Be A Speaker, So Can You
elbaschid
0
340
Click - PyCaribbean 2017 - Puerto Rico
elbaschid
0
480
Conferencing - Engineering Meeting
elbaschid
1
54
Show & Tell - PyCon US 2016 Summary
elbaschid
1
110
Click: A Pleasure To Write, A Pleasure To Use
elbaschid
0
700
Hunting for Treasure in Django
elbaschid
1
750
Moby & The Beanstalk
elbaschid
1
560
Docker In Production - A War Story
elbaschid
1
320
Other Decks in Technology
See All in Technology
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
220
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
550
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
200
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
220
Terraformを用いたJamf Pro構成のIaC, GitOps化への挑戦
yukun
0
120
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
330
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
1
110
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
0
150
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
110
個別開発で終わらせない。 現場の課題をプロダクトの強さに変える StockmarkのFDE
ktkrhr
0
490
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.2k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
My Coaching Mixtape
mlcsv
0
330
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Ruling the World: When Life Gets Gamed
codingconduct
0
380
Git: the NoSQL Database
bkeepers
PRO
432
67k
Code Reviewing Like a Champion
maltzj
528
40k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
850
Transcript
Hunting for Treasure in Django Sebastian Vetter @elbaschid
Who Am I?
Sebastian • Django & Python Developer • Backend Engineer @
Mobify • github/twitter: elbaschid
What's The Treasure?
Awesome Django Features • Forms, • Views, • Models, •
the ORM, or • other commonly used APIs.
But They Are Boring
Real Treasure
What Does That Mean? • Useful pieces of Django code.
• Considered public API. • Documentation is available (sort of). • Mainly used within Django itself.
My Hunting Strategy • Digging through the Django source. •
Hanging out with Funkybob. • Learning from other great people.
What I'll Do • Show a few "hidden" treasures. •
Explain what they do. • Look at examples.
cached_property
Where is it useful? • Time or compute heavy properties
on a class. • Synchronous calls to remote servers. • Used more than once, e.g. code & template.
What does it do? • It's a decorator. • Caches
the return value. • Lives as long as the instance.
It looks like this class MyObject(object): @cached_property def compute_heavy_method(self): ...
return result
Imagine A Color API class Color(object): def __init__(self, hex): self.hex
= hex def _request_colour_name(self, hex): print "Requesting #{}".format(hex) rsp = requests.get(API_ENDPOINT.format(hex)) return rsp.json()[0].get("title") @property def name(self): return self._request_colour_name(self.hex)
Here's the problem • Using the name attribute will call
the API • Every time!
Here's the problem >>> c = Color('ffffff') >>> c.name Requesting
#ffffff white >>> c.name Requesting #ffffff white
Possible solution @property def name(self): if self._name is None: self._name
= self._request_colour_name(self.hex) return self._name
Or you can use cached_property from django.utils.functional import cached_property @cached_property
def name(self): return self._request_colour_name(self.hex)
Using the cached property >>> c = Color('ffffff') >>> c.name
Requesting #ffffff white >>> c.name white
Isn't That Great
All you Need To Know from django.utils.functional import cached_property •
Only cached for the lifetime of the instance. • Be careful with querysets. • Django docs • Source
import_string
Where is it useful? • Make a class or function
configurable. • Allow loading class/function from string.
What does it do? • Takes dotted path to a
class or function. • Loads it. • Returns the class or function object.
It looks like this from django.utils.module_loading import import_string get_func =
import_string('requests.get') print get_func # <function requests.api.get> get_func('https://google.ca') # <Response [200]>
# settings.py UPLOAD_VALIDATION_PIPELINE = [ 'my_project.uploads.validators.is_tarball', 'my_project.uploads.validators.has_readme_file', 'my_project.uploads.validators.has_no_!']
All you Need To Know from django.utils.module_loading import import_string •
Imports a class or function from a dotted path. • Django docs • Source
lazy and lazy_property
Where is it useful? • Accessing settings at parse time,
e.g. class attributes. • Translating strings outside of a view. • Translations in the settings module.
Here's a problem class UserSignupView(CreateView): ... success_url = reverse('signup-confirmed')
How can we fix it? from django.utils.functional import lazy class
UserSignupView(CreateView): ... success_url = lazy(reverse('signup-confirmed'), unicode)
Lazy Django • The Settings object is lazy. • Several
helpers have lazy siblings: • reverse_lazy • ugettext_lazy • Not sure what lazy_property is useful for.
All you Need To Know from django.utils.functional import lazy from
django.utils.functional import SimpleLazyObject • Imports a class or function from a dotted path. • Django docs • Source
RequestFactory
Where Is It Useful? • Testing request related code. •
Mocking will be too much work. • Using the test client doesn't make sense.
Create GET Request from django.test import RequestFactory request = RequestFactory().get('/some/path')
# with a query string query_params = {"token": "secret-token"} request = RequestFactory().get('/some/path', data=query_params)
Create POST Request from django.test import RequestFactory post_params = {'username':'testuser',
'password':'supersecret'} request = RequestFactory().post('/login', data=post_params)
All you Need To Know from django.test import RequestFactory •
Creates a fake request for given URL. • Can handle all HTTP methods. • Will save you some mocking work. • Django docs • Source
The Treasure Is Yours
Thanks! Questions? • www.roadsi.de • @elbaschid • github.com/elbaschid Slides: https://speakerdeck.com/elbaschid