Community Update: Python Software Foundation with Dawn Wages
Published October 23, 2025
This video features Ayaz Amlani, Dawn Wages, Dustin Ingram, Kojo Idrissa, Pandy Knight, Paul Stieber, Tyler Rudie and Wayne Merry at DjangoCon US 2019 in San Diego, California, USA.
DjangoCon 2019 - Lightning Talks Day 1 by Various Speakers
Wayne Merry 00:00
Ayaz Amlani 5:24
Tyler Rudie 9:37
Pandy Knight 14:30
Dustin Ingram 18:32
Paul Stieber 22:23
Dawn Wages 26:16
This talk was presented at: https://2019.djangocon.us/talk/lightning-talks/
LINKS:
Follow Kojo Idrissa 👇
On Twitter: https://twitter.com/Transition
Official homepage: http://kojoidrissa.com/
Follow DjangCon US 👇
https://twitter.com/djangocon
Follow DEFNA 👇
https://twitter.com/defnado
https://www.defna.org/
Intro music: "This Is How We Quirk It" by Avocado Junkie.
Video production by Confreaks TV.
Captions by White Coat Captioning.
The speakers presented practical ways to use Django and related tools: contributing ideas to Victoria’s mental-health-system review, fetching and parsing API data with Requests and JSON, and building a Linux-only Django backup command that exports models and media into archives. They showed how to translate the Django admin for bilingual users, including a Chinese-language family export business, and demonstrated that Google Cloud Run can host containerized applications built with remarkably old Python versions. Other projects combined django-filter with DataTables for efficient Ajax pagination and sought contributors to improve a secure Django system for Black and Pink, an organization supporting LGBTQ and HIV-positive incarcerated people.
Summarised automatically from the transcript.
Automatically transcribed, so expect mistakes in names and technical terms.
Speaker 1: Right, so my lightning talks about speaking to government about mental health. Mental health is uh a rising challenge. uh in in the world today. Um few of us will go through life without any impact uh from uh mental wellness in our lives. So mental health needs are rising throughout the community. The rates of depression and anxiety are orders of magnitude greater now than what they were a generation or two ago. We're seeing things like imposter syndrome, burnout rising significantly. In Australia, suicide is the leading cause of death for people under the age of 45. We also have traditional mental illnesses such as bipolar disorder and schizophrenia.
Speaker 1: Thirty years ago some people felt that's all mental illness was, but now we understand it's much broader than that. Our community is changing. Two generations ago you could expect to go to school and get an education and then at the end of that education go get a job. And then work in that job until you retire 30 years later. And that's the extent of what you need to do. Now we're reskilling throughout our working lives. we might work four, five or even more careers. Our physical environment is very different. It used to be very structured. We used to have um a lot of social um constructs such as clubs
Speaker 1: or religion or various ways where we'd we'd be interacting with the same kind of people for an extended period of time. But uh now um now that's in a great straight um a great uh state of flux. Um When it comes to clubs and communities, fewer and fewer people are are engaging in such things. So our relationships are becoming much more transitory. Even in the work environment, we may be working remotely and not working and connecting with people on that one-to-one basis. And social networks are a poor replacement for that individual whites of the eyes connection. So in response, the Victorian government in Australia is has a commission about
Speaker 1: what a modern mental health system should look like. And I've been encouraged among with others is this is the time to communicate to government about what a mental health system should look like. And some of the ideas that we have to put into that submission are concepts of mental wellness. So not just waiting until we actually are depressed or have a level of anxiety that that puts us out of control. But how do we stay in a good place? A number of talks at Django Cons over the past have looked at things like um imposter syndrome and how do we personally manage that. But sometimes these issues can be beyond what we can just personally manage. How does the state help us?
Speaker 1: I've been looking at schematherapy and that is effective in situations where cognitive behavioural therapy has proven to be ineffective. There's been exciting research looking at psychedelics and how they can really affect change. One particular study with Rick Doblin has been looking at MDMA. uh with uh um soldiers that have been suffering from PTSD. So there's lots of things out there um but government often isn't aware of these things or if they are it's disconnected So there's an opportunity to talk and the what's going on in Victoria has been watched by other states in Australia. It's been watched by governments here in the United States So it's a bit of a it's a bit of a template for
Speaker 1: what may be an effective mental health system going forward. So it is time to talk and so what I'm doing is I'm preparing a submission to the Royal Commission. And um and my invitation is while we're at this conference, if you've got ideas, come and talk to me. If your ideas are significant enough You might wish to consider putting your own submission into the Royal Commission. You don't need to be from Australia or for Victoria to actually do this. Anyone in this room can put a submission in. So that's the opportunity. Talk to me or make your own submission to the Royal Commission. They're going to get an interim report next month and so the plan is to submit into between the interim and the final reports.
Speaker 1: And that's about it.
Speaker 2: Thank you, Wayne.
Speaker 3: My name is Ayaz Amlani. I'm from Dallas, Texas. I love Python. I've been coding for about four years, using Python as my first real language, not like a markup language or design language So um what I'm gonna be doing is actually doing a live demo with you guys, going grabbing data from an API. A lot of you guys, your first time here. You're gonna be grabbing data from Django REST Framework Views. You need to understand what an API is, how to get these objects from an API, and how to display them in your views. So you can actually follow along with me if you'd like. We're going to start by going to Google. And you can type in Bitcoin Price API, that's what we're gonna get today. You can grab a link. This is the Bitcoin price. It'll give you an API endpoint. I'm using a free program called Postman just to make this look nice for you. And in Postman, you can grab an API and you can say, I want to view this in actual JSON data, which is what you would normally do.
Speaker 3: And you can see that these are the keys that you'll want. So if we want to get this price of Bitcoin, we're going to need to be able to say, okay, hey, we need the BPI USD rate. These are the keys you'll need to get this data, which is what we're doing in this live demo. Let's get started. So first we'll need a URL and actually first we'll need to import our libraries. So there are two libraries you're gonna need. When you're working with these projects, one is called requests. Okay, this is really easy to install. You can look it up. It says pip install requests. Pretty, pretty simple. Once you pip install requests, you have it. JSON comes included with Python. It's the second library you'll need. Import JSON. This comes included with Python, you just have to import it. Okay. With JSON there are two functions that you'll mainly need.
Speaker 3: These are dumps and loads. Dumps takes an object and turns it into a string. Loads takes a string and turns it into a JSON object that you can now play with in Python. Alright, so let's do this. First we're gonna take our URL And save it as a string that we're gonna access. Oops, sorry. Then we're going to do a requests. get To get this URL, if I can type, then we're gonna say our data is gonna be equal to that content. Page dot content, which is just like a string version of
Speaker 3: this page, of this API data. So if I print this page right now, this data. You'll see I'll just get a string, but I won't be able to do anything with it. Um it'll just return to me the string with all of the data that you saw here. Not very pretty. So how can I play with this string data? I just literally have to load it into JSON. json dot loads my my string. And now I have a Python object that I can play with. And so if I want to grab something here, I just put in the keys and I can look the keys that I need are BPI, USD, rate. So let's do that. Uh BPI USD rate
Speaker 3: And I should now just get the price. So I just grabbed data from an API within less than five minutes and a live demo. You guys can do this too, especially if it's your first time here at DjangoCon. I encourage you to go back and do this on your own. Practice. This is what I teach my students at home. And um I tried to do it beforehand and yeah, it looks like I was able to do it just fine. So these are the same steps that you're gonna take every single time. Okay, so all you really need to do is like save all this in a function and pass a URL, and you can do this over and over and over again. I hope that you can see how easy it was and this gives you the confidence to do it on your own if you've never done it. If you have any questions, I probably have like 30 seconds to a minute. Um feel free now. Nothing? Yeah, go ahead.
Speaker 3: Yeah, you can you can use requests to just put it in a JSON too. Yeah, you're absolutely right. And a lot of um libraries like I believe like Django comes with its own http. request library. you can even say just return it in JSON format. The only reason I didn't do that is because a lot of times these API endpoints are not API endpoints that you're getting data from. You're just getting data from a website and you're scraping it, so you need the JSON library to do that. Okay. Thank you guys so much for your time. I really appreciate it. Welcome to Django Conference.
Speaker 4: So a quick question. How many of you guys actually backup your application with a SQL backup? How many people are not actually backing up their application? Okay, maybe we'll have today something that's a little bit cheap and easy. I ran into an issue. I use Django and Siemens as a data pipeline. So I pass data in via REST, it goes and does stuff. It's basically making my job job a lot easier. So thank you to the guys who write Django. My boss thanks you also. Um I needed to be the I had two goals. One, I needed to be able to get my
Speaker 4: site backed up because the last thing I need is So that data going away. The other thing was is I needed to get production data into my development environment so I could actually test this. Um so I wrote something wrapped around dump data. So I agree. And if you guys know of a way around this that doesn't require doing shell, this only works on Linux. And I'm interested if you guys want me to actually put more data into time into this. Basically, this is how you wrap around the dump data command inside of Django. Um I'm indenting it because I'm human. I cannot read JSON data
Speaker 4: when it's a giant blob. I also had a requirement because like imposed on myself that it can't be one whole file. I've had incidents where One part of the my application that has tons of data doesn't have to be restored or I don't want to import it and wait for that. So I have it this thing dump. each model out of each application one at a time into its own JSON file. The backup model here um does that. So it will take in uh the target, which is the dotted notation of the model and
Speaker 4: the time so I can save that to the f file name. And that's pulling from this loop here. Basically it loops through every application. If I blacklist a light a uh app inside of Django, usually because I'm not using those those tables, I can then save each file out to a folder. The folder then uh I also have to for some odd reason I don't know why. Auth and auth token and content types, which auth and content types are Django native apps for the authentication and
Speaker 4: Content type I believe is part of the migrations. Do not like me breaking them down. Then after that, there is a I copy out my media folder because not all data is in the actual database. Then I tar it all up, remove what I cut saved out, and yes, I have a bad habit of doing exception as e print e. because this is caught by the utility that shells into my my box and says run the backup. I do register it as a task within
Speaker 4: Django itself and I need to put in a document on how to actually or so this is a management camp man. Um and I've been using this for the last three months, getting data off of my server and into a tape backup without having to pay a license for Commvault. What I will do is I'll dump this gist into the general channel on Slack if you want to have a question. Or right now this only works on Linux, but I'm willing to actually put in some time to get it to run on Windows or Mac if you guys are interested. Thoughts, questions?
Speaker 4: It's one of those crazy those technical depth things that will will come back and bite you in the rear end. Okay.
Speaker 5: Xeshe, Nihau, Wo Ja Andy, W Sange Yi Sui, Wall Tong Ba Ardi Molai, Dan, Wa Juzai Raleigh, North Carolina. How many people understood that? Couple? Oh yeah. I'm speaking Mandarin Chinese. Awesome. Now the problem is most people didn't understand that. Because we need translations in our apps to be able to understand when we don't know the language Sorry, a little finicky there. Uh oh. Okay, so a full introduction. My name is Andy Knight. You may also know me as Pandy or the Automation Panda. And you might be wondering why
Speaker 5: Oh come on. You may be wondering why I'm speaking to you in Chinese. Well my family is from China. Uh here's a picture of myself with my wife in the middle and her mom. This is taken in Shandong province They're from China, they speak Mandarin. Why does this apply to Django? Well, we have a little bit of a story. My wife and her mom, oh come on. Technical difficulties. So my wife and her mom run an export business where we ship stuff to China and they were struggling to keep up with their orders. So I developed a Django application for them where I use the admin with the data models to show their full order processing and state and all the stuff that has to go with the orders.
Speaker 5: Django's wonderful. I love it. That's why I'm here today because I started Django with that project. Oh my gosh. I hope this isn't being recorded. So um so I used Django's admin site. I hosted on Heroku. It's still being used today. We can take images and put them in Amazon S3. So awesome But the problem is, English is not Chinese. And I speak English. I speak just a very, very little bit of conversational Chinese. My wife speaks both English and Chinese, but mama, she does not speak English at all. Yet we all have to use this application for the business. So the solution is let's translate the entire application between English and Chinese. Oh not now. There we go. Oh boy.
Speaker 5: Okay. So I'll show you the application here. It is well, let me full screen this. So oh let me Get it a little bigger here. So this is just the basic Django admin site and Chinese export order system If I go to something like orders, we can see all of the orders, but most of this stuff is in English, right? I found a way that you can actually translate the Django admin. And I create a cool little little widget here at the top where I can click the flag. And boom, everything's in Mandarin. Look at this. So awesome. Um it's a little bit of a trick to get uh translations working in the admin for any language, not just Chinese. You have to make sure that you do
Speaker 5: translation strings on all of your models. That's the big thing. The admin does provide some basic translations on its core pages, which is really nice. But um I look at one of these orders, right? You can see all the fields themselves are in Mandarin. And if I ever need to switch back to English, because let's say now I'm looking at this, I have I have no idea what any of this is. I can change the back like, oh, this is the customer and this is the status and this is all the cool stuff. So if you want to learn how to do this, you're I've written a blog article on automationpanda. com. It's called Django Admin Translations. I'll show you how to do full translations of the entire app as well as parts for the admin, in addition to that cool flag little widget at the top. So again, my name is Pandy. Thank you for listening to my awesome story of how I use Django to help my family solve a business problem.
Speaker 5: You can follow me on Twitter at automationpanda. com and if you want some cool panda stickers, come find me sometime during the conference. Thank you
Speaker 6: Hey, so I'm Dustin. I work at Google. I do developer advocacy. So I care about Google Cloud and Python. And it actually kind of looks like this, because a lot of things have Python. Uh one of our new products doesn't have Python. It's called CloudRun. Uh it's called stateless HTTP containers in a fully managed environment, but really that's just Docker imaging. As a service, which means that if you create a Docker image that listens for requests on localhosts, listens on a specific port, and starts an HTTP server in four minutes, that's plenty of time. Uh it works. So you can do like a little flask app like this and do your requirements. txt and write a Docker file that looks like this and you deploy it and it's awesome. The cool thing about this is it uses the Python base image here in this example. So uh If you look at the container contract for CloudRun, it actually says that you can use any programming language of your choice and any base image,
Speaker 6: provided that it respects the uh requirements I listed before. So when I saw this, I didn't think of this so much. as a feature but more of like a challenge like hmm uh what could I possibly run like could I run a super super old version of Python instead so this is what I did. I went to python. org and I went to the downloads section and I scrolled down because I was looking for a specific release. But this just lists releases of Python 3 and 2. So I clicked view older releases and I got this page, which is older source releases. But these are mostly just binaries, so I clicked on older source releases. And I got on this page, which is at legacy. python. org, which you know is awesome. And I scroll down here and I found Python 1. 0. 1, which was uploaded here in 2002, but actually came out in uh the nineties. So all I need to do is make a really small patch, actually just change one function, and I was able to get this compile on the
Speaker 6: latest version of Ubuntu. So with a small Docker file like this, I could inherit from Ubuntu, install some necessary dependencies, download the source. apply my patch and make and configure it and then I execute a Python command and I get a REPL. I get a Python shell. And I actually get root. So I'm like hacked awesome. The fun thing about this Python version though is it's so old that it doesn't have the double dash version flag. So I can't actually show you which version it is. But trust me, it's 101. Uh yeah, who knows. But the Python REPL works and it's really cool and you can see it's Python 101 there. And the thing about this though, it doesn't have the base HTTP server. HTTP server at all, because it didn't exist yet in this version of Python. So what I did is
Speaker 6: I went back to this page 1. 3 instead, because I didn't feel like backporting, which happily came out in 2002. instead of 2001. I don't understand why. Again, a patch, again a Docker file, again I get root. Version still doesn't exist, but I can import base HTTP server, which is awesome. Internet. So with that, you can write something that kind of if you squint at it, looks like a flask app, but really it's using this little handler thing to write. And here it says hello from Python and includes sys. version. And then I just run that forever. And then I build a Docker-based image. So you put these on Docker Hub. So you you have Docker-based images that give you this version of Python for 1. 0. 1 to 1. 0. Cool. So then I can write another Docker file that inherits from that base image, copies my app in, runs it on a specific port, and runs the app.
Speaker 6: So it does all those things, runs on port, runs the app. And with just those two files, Dockerfile and app. py, I can first build my image with gcloud. So it does a bunch of stuff, and eventually it says success, but like is it really those exist. And then I can deploy that to Cloud Runs with this command, and then I get a URL. And I can go and visit that URL and it says hello from Python 1. 3. Hooray. We did it. We save Python 1. 3. So we can run a serverless runtime with Python 3 now. Uh so here's some links. If you're interested in doing something like this, I will say you probably don't want to try this at home. Uh try it at work instead.
Speaker 7: Hi, I'm Paul. So I made this little um pet project that combines Django filter with Uh this little JavaScript plugin called data tables. So, why would you want to combine Django filter and data tables. js, you may ask? It's a great question. Well, the answer is Django filter is awesome. And
Speaker 7: data tables is awesome. But there's n there wasn't a really clear way for me to combine them. So I built a way. So in my demo project, I have a silly little model that just first name, last name, some Rolodex fields. And I created like 10,000 records here. And normally if you were to Build this with
Speaker 7: Django filter and try to render everything, it would obviously take too long to display it on the page. So data tables has this Ajax feature. where it will do pagination among other things. And so in my demo project I have a view. I don't know where is where is everything I have a view that will take the value take the
Speaker 7: response that datatables. js gives to you and then Query the data that you want and send it back in the format that it's expecting in JSON. So just to give you an idea, this is Some of this stuff you have to do to initialize data tables. And right here is the URL, my endpoint And to kind of tie this all together,
Speaker 7: I have a little bit of JavaScript here. And all the JavaScript does is take any values that you put in these fields, packages it up. Into uh the initialize function. So data tables knows what to do with it. So that's all I got for ya. If uh you find this interesting, here's the link to it Thanks.
Speaker 8: Um you may have seen me on the interwebs Twittering. Um I do that uh I do that a fair amount. Okay there you go that works. I'm a freelance developer um and I do React and Django Um Django Girls is amazing. If you're not familiar with Django Girls, it's amazing. I came in through 2016. It was the first thing that made me feel like I could be a real software engineer and now this is how I pay my bills. So that's like I don't know. Um and I uh switched from project management uh successfully uh about a year ago, I'm about to anniversary, but I've been doing Django since twenty six So I've been uh volunteering and working with Black and Pink. Anyone familiar with the nonprofit organization, Black and Pink? Raise your hands.
Speaker 8: Ah, okay, cool, a few people. Um so they've been around for fifteen years. Don't need to read all of this, there's a link and I'm just gonna tell you Their objective is to match free world people with LGBTQ and HIV. positive um prisoner members um incarcerated. So uh it started out really really basic and fundamental just like Excel document and it's just hard to navigate. And then we have Django and we all kind of understand the really um effective use case that Django will provide. Um also with the Django admin, there's a lot of support that they want um for their teams and case management of these uh highly vulnerable populations. Um
Speaker 8: so their overall overall goals um a lot are in the background um back end with kind of CMS kinds of things and safety, and then also to kind of quantify what their success metrics are. There's also a lot of things that we would want from the outside world, population interacting with the database and with the incarcerated members. um like um adding uh ability to donate easily with act blue um and also sending up um out updates and and things like that and encouraging people to continue to contact attack their incarcerated um pin pals. Um so some things that I want to uh highlight. We are going to be sprinting on it. Yay on Thursday. Thursday only I'm sorry.
Speaker 8: I have a flight on Friday. Um but uh please come and help me sprint on such a really great cause. We have a lot of really great minds here. Um I want to say that we did start sprinting on it at PyCon UK and we logged a lot of really awesome issues, had great contributions, and I know we can one up PyCon UK. Um so some things uh that we are um we need help with are uh we want Wanna add Wagtail in there? Uh DRF uh renderer that was talked about at Tim Allen's talk. That was like that would be really, really cool. We have safety, bandit, docker. We need to state um have a staging server, Redis, Ansible, DigitalOcean, React 15, Redux, Postgres QL, um Django, Rust
Speaker 8: Framework, Factory Boy, we wanna uh have some demo data in data in there. We need setup scripts to be kind of fixed and and and helped. So if you know bash, uh UIUX because the front end is kind of just a little We we I do Django first and then I did JavaScript, so you know. Um and security security security. So we have a highly vulnerable population. Currently the c um code is closed. And we are sprinting on it, so I will give you access to that. Um and then once the security uh um is all covered, then we can open it up because it's just a very highly vulnerable population. Um and we've also added black on there So these are the things. If any of those sound like your skill sets, please come and see me. And you can also Twitter at me.
Speaker 8: And yeah, here's one of my one of my Twitter. So we are welcome with first timers. I mean documentation is a thing that we need to do. So all levels will be incredibly valuable, and I'm just a very thankful person. And I'll just you know. Uh yeah. Oh and we are karaoke at the hive after reception. We haven't picked a time. please uh join the slack and look at the uh gathering social channel thing and I'll be singing something I'm not so well but you know it'll happen and I'll embarrass myself and you can embarrass yourself Anyway, that's me. Uh thank you.
It should support mental wellness proactively, helping people stay in a good place rather than waiting until depression or anxiety becomes disabling. Government can also help with problems that individuals cannot manage alone and should consider newer approaches and research.
Discussed at 2:36Anyone can share ideas with Kojo or make their own submission, even if they are not from Victoria or Australia. The suggested timing is between the interim and final reports.
Discussed at 4:08Install and import `requests`, use `requests.get()` to retrieve the endpoint, then use `json.loads()` to turn the response content into a Python object. You can then access nested values with their keys, such as `data['bpi']['USD']['rate']`.
Discussed at 6:46Wrap Django’s `dumpdata` command in a management task, exporting each model from each application to its own JSON file and optionally excluding blacklisted apps. Copy the media directory as well, then archive the files; the speaker’s implementation is Linux-oriented.
Discussed at 10:25Add translation strings for the application’s models and use Django’s translation support; the admin already provides some translations for its built-in pages. A language-switching flag widget can let users move between languages such as English and Mandarin.
Discussed at 16:48Yes. Because Cloud Run accepts containers built from any base image, the speaker patched and compiled Python 1.0.1 and 1.3 in Ubuntu-based Docker images, then deployed a simple HTTP server to Cloud Run.
Discussed at 20:54Use DataTables’ Ajax mode for pagination, send the filter and table parameters to a Django view, query the matching records, and return the results as JSON in the format DataTables expects. JavaScript packages the filter values into the DataTables initialization/request.
Discussed at 23:44It supports Black and Pink’s work matching free-world people with LGBTQ and HIV-positive incarcerated members, while providing case-management and administrative tools for the organization’s teams.
Discussed at 27:06The project needs help with areas including Wagtail, Django REST Framework, security, testing, deployment, Redis, Ansible, React, PostgreSQL, setup scripts, UI/UX, documentation, and demo data. Volunteers can join the scheduled sprint, with access provided while the code remains closed for security reasons.
Discussed at 28:37Note: We understand that names change, people change, and bodies change. We respect each individual's journey and privacy. If you have any concerns about a video or need us to remove content, please don't hesitate to contact us. We will handle your request with care and promptly address any issues.
Published October 23, 2025
Published July 19, 2024
Published July 11, 2024
Published October 25, 2019
Published October 23, 2025
Published December 6, 2024
Published November 22, 2023
Published November 14, 2018
Published September 8, 2017
Published September 7, 2017
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 15, 2026
Published July 14, 2026