Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hunting For Treasure In Django
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
330
Click - PyCaribbean 2017 - Puerto Rico
elbaschid
0
470
Conferencing - Engineering Meeting
elbaschid
1
51
Show & Tell - PyCon US 2016 Summary
elbaschid
1
110
Click: A Pleasure To Write, A Pleasure To Use
elbaschid
0
690
Hunting for Treasure in Django
elbaschid
1
740
Moby & The Beanstalk
elbaschid
1
540
Docker In Production - A War Story
elbaschid
1
320
Other Decks in Technology
See All in Technology
AI Native なプロダクト組織の立ち上げ方 : 生産性 100 倍への挑戦
mikesorae
0
1.3k
全社でのソフトウェアサプライチェーン攻撃対策をやってみた with Takumi Guard
z63d
0
280
JAWS_ICEBERG_BASECAMP
iqbocchi
2
110
AI_Dev_Day_製造業領域でのAI活用から見た活用の罠と成功に導く実践知.pdf
kintotechdev
0
170
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
940
SRENEXT_2026_Chairs__Talks_in_Tamachi.sre.pdf
srenext
1
150
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
810
kaonavi Tech Night#1
kaonavi
0
160
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
2
530
発表と総括 / Presentations and Summary
ks91
PRO
0
190
穢れた技術選定について
watany
19
6.2k
PHPで作って学ぶリアルタイム音声対話AIとWebSocket入門 by ムナカタ
munakata
0
140
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
350
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Discover your Explorer Soul
emna__ayadi
2
1.2k
Mind Mapping
helmedeiros
PRO
1
290
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.6k
Done Done
chrislema
186
16k
Embracing the Ebb and Flow
colly
88
5.1k
The agentic SEO stack - context over prompts
schlessera
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