Django Chat

Django 3.1 Preview - Mariusz Felisiak

Episode Summary

Django Fellow Mariusz Felisiak joins us to discuss the new features in Django 3.1, including async views/middleware/tests, cross-db JSONFields, improved admin, the addition of pathlib, and more.

Episode Notes


Episode Transcription

Carlton Gibson 0:06
Hello, welcome to another episode of Django chat weekly podcast on the Django web framework. I'm Carlton Gibson joined as ever by will Vincent that will hi Carlton, though and this way we got back back with us my fellow fellow Marius, felice yak, who say hello, Marius, thanks for having me. Thanks for coming on. Um, what we're going to talk about, we're going to talk about something.

Will Vincent 0:27
Django 3.1, Carlton,

Carlton Gibson 0:28
right. So yeah, we're going to talk about Django 3.1, which is in beta now. So Maurice Khan, you're the guest, you tell us what's in the what the highlights what are we looking for?

Will Vincent 0:38
Well tell the people when I tell people when.

Mariusz Felisiak 0:41
So we'll have a final version at the beginning of August, on August, I think and release candidates two weeks before it. So it's currently is the best time to try it to install it on your existing projects and see if it works. See if everything works properly, especially with new features. So everyone that use, for example, Jason field from Django contrib package can now try to use it directly from Django models. That's probably the easiest way to contribute to Django to try to release packages.

Will Vincent 1:26
Yeah, because this is going to come out July 15. So there's still be a couple weeks for folks. And I just will link to there's a very comprehensive release notes that go through all these things, but we're going to spend this episode talking about them a little bit. So

Mariusz Felisiak 1:40
currently, we have better released on July 20, we have a first release candidate, and I'm sure Joe was the final release.

Will Vincent 1:50
Okay. And and the JSON field was done by sage, who Google Summer of Code student from last summer. I want to talk about the features but I also The two of you could could take off your humble hats and just talk about what is it? What do you two have to do to prepare a new release? Because I know there's a whole lot of steps. But just to let people know what, you know, what are all the things you have to do to get something ready to be pushed out? So we

Mariusz Felisiak 2:15
have a release schedule?

We have really detailed instruction, what to change when what should be done before the release. So

we just need to remember to do not omit any step.

Carlton Gibson 2:30
Yeah. And to update it when we make a change. Exactly. If something's broken. The big issue I think, is the point releases later, like 3.0 or 3.1. Or, you know, 3.2, like the major releases, they're the difficult ones because they're only once every nine months and the steps are there's a lot more steps it's like what did we do last time? Oh, yeah, they trying to remember all those pieces can be can be tricky, and it's not all one Why don't the docks building with the you know, the Chinese translation

Mariusz Felisiak 2:59
there is A lot of small steps that should be done like for example, open pull request in read the docs, or at a new classifier to pi pi, or really, truly leads to Django project to really run the experience, etc.

Will Vincent 3:16
When this is your was a second, third, third major release that you've been a fellow for Maurice, which was

Mariusz Felisiak 3:24
the second. The second, okay. Yeah, that's a second. And, honestly, the first major release that we are making totally without team, I think,

Will Vincent 3:41
Tim, so Tim Graham, I mean, we've had him on and I just recall Carlton telling me about, you know, doing it largely on his own but with Tim's help, and so I imagine you went through a similar process of all the little steps that are documented and perhaps not documented,

Carlton Gibson 3:56
but I think Tim's still secretly watching because every so often as a comment But it's really so insightful. And to the point, he's like, has this been updated or something, you know, something really like my new show?

Will Vincent 4:10
Exactly. Okay, so let's talk about the highlights of the release. So one of them is that it requires Python 3.6 and up, right, it's not supporting lower versions of, of Python.

Carlton Gibson 4:24
Yes. Yes. So three to 3.5 is still support is like it's it's still within? Yeah, um, no, no, no, sorry. Sorry. Support for sure. Yeah, yeah.

version, right.

I mean, it's in what do they call extended support, so it's only security fixes now for play 3.5. But in order to move Django forward, like the three point so the last two, so for 3.0 for 3.2 for the LTS, we dropped the version, and then that will happen again, probably for 4.2 will probably go 3.7

Mariusz Felisiak 5:01
so this policy is quite clear, we are doing a conversion only after the LTS version. So by Django 2.2. We end its extended support after dropping support for Python 2.5. Yes, so they will not support python 3.5. And before Django, 2.2 and 603 support, Python 3.6 will be supported a bit longer.

Will Vincent 5:42
while. So these are all the things as a developer that make Django great to work with because it doesn't break on you but I know it requires lots of extra work for you and you know, the two of you and others in the community to maintain that non breaking support.

Carlton Gibson 5:54
Well, today, just today, Marius was fixing a test failure on 2.2 against Paul

You know, and

it that gets harder and harder as you get, you know, when one point 11 was at the end, and we're still supporting 2.7, or one point, 11. And like, like a number of fixes every month, we're causing issues only on 2.7 only on one point 11. It's like, we forgot that we got to go back and change it because of this. And, you know, it just gets harder and harder to look for that long term support as it gets. And that's and that's the type of work too that volunteers just really don't want to do either.

Will Vincent 6:33
Because it's really not that much fun, but it requires a lot of focus and expertise to do so. Hence the fellows. So 3.1 so what's the headline? I mean, I'll tell you what, I think you guys can tell me what it actually is. To me when people ask me it's, you know, async views are in there. There's JSON fields. I'm excited about the new path lib in the settings file. So when you run start project now it will default pathway, which just makes setting your path lives a lot easier. But there's a host of other features. And maybe we could just start with async. So what's what should people take away from 3.1? async? Is it? You know, the question is, is it finally ready to use the Django project? Or what are we waiting on?

Mariusz Felisiak 7:18
Carson? He's an expert.

Carlton Gibson 7:23

Yeah, it's ready to use. So the first thing is, don't change anything, just keep running your whiskey server. And then all of a sudden, you want to make some API requests to pull up some data from a couple of places. And so you can now just define without changing anything else, you can define an async depth view, like so instead of a depth view, which is a sync function, you can find an async def view, which is an async function. And then you can make use HTTP x or, you know, whatever your favorite networking library is to go and make the API calls you want to do concurrently, and Jango will run that for you in a thread pool in a thread, it will run that that single view in a thread. And you'll get concurrency in fetching the API views, but you haven't had to change anything else. So for a lot of people in a lot of use cases, that's that's kind of what you want to do for years. For years now, I've been spinning up Node JS projects on the side, in order to make concurrent requests to the API to an API in order to pull together data for a client. And then the last few years, we've been able to do that with Python web frameworks instead of spinning up. No, but now you can just define that view in your Django project. And that's super, and that's without doing anything else. async related,

Will Vincent 8:42
well, that relies in part on I've just been updating my books and one thing that in 3.0, when you run start project, you get the as file with the ASCII server that powers all this so someone who's updating if they just update from like, 2.2 to 3.1 Do they need to manually add the ascii.pi? file? Or

Carlton Gibson 9:04
right? No, but so this is this is the into this this to this is the sort of great, amazing thing about the views implementation is it will run async views fully within the whiskey pipeline. So you don't have to change anything to do this first, though, you don't need to get up at arcanist. You can you continue to, you know, you can continue to run whiskey with ganache or whatever you're using. And you can just define these single async views to make use of a thread pool to go and do things right. And that's the that's the, that's what's so beautiful, you can just literally upgrade and then you just think, Oh, I'd like to try fetching two HTTP requests simultaneously. And then when they're both back, I'll combine them and return them to the client. And you can do that without anything else. It's our This is your really is dipping your toe in async. You don't have to change your way of thinking very much you don't know you know, you just have to write this one async death you That's, that's what's super. And then the step up. The second step is if you wanted to get involved with response types that are more interesting, I don't know, let's say you want to do server side events where you open a connection to the client. And every so often you pump some more data down to it. So I don't know, like a ticker tape application, this would be in the textbook example here, you open a connection, and the server can every so often feed you some more information, these kind of more interesting things. At that point, you'd need to switch to as and you'd need to create an file. And then you'd either use Daphne or unicorn or hyper corn or one of the ASCII servers. So this is instead of going to corn as your application server to serve your ASCII pipeline. And what's amazing so and the other side of the amazingness is that if you switch to ASCII, all your sync view Yeah, will exactly to work exactly as they had because underneath the hood, Django is Swift is determining is this view, an async view or a sync view. And if it's an async view, also have it the right way. And if it's a sync view, also at the right way, as well, now, there's a certain performance overhead to that, in that there's a certain context switching every time you call context switch has a really small performance penalty. So if you really, really, really after throughput, then you need to make sure that you're running ASCII with only ASCII middleware with only with only as give you at the end. And if you if you've got as the all the way through, then you don't get any context switching performance benefits, but for most use cases, that extra teeny bit of throughputs that's not what you need for most use cases. Certainly not when you're beginning. Does that sound about right merits it is kind of my

Mariusz Felisiak 11:51
I cannot allow that. If you really would like to use the entire async stuff that should probably let him Python 2.7 because in Python 2.6 is still a bit immature. And of course, everything works properly. But

But still, I think in the journey has begun in python 2.6. And seven is it really works well.

Carlton Gibson 12:22
And I think that's like as well I just be up to date because async IO is still evolving. And you know, there's still debates about the API and how it looks and what the the recommended call paths are, and all this kind of stuff. And so if you're going to be using async, then do yourself a favor and get onto 3.8 or the latest versions, rather than trying to run it in 3.6. Because you're caught you're going to create yourself lots of issues that I see see issues on channels on definitely where it's like, oh, no, if I updated to 3.8 this issue went away.

Will Vincent 12:55
Well as ever, it's like a car Carlton, right. You have to tune it up. And

Carlton Gibson 12:59
yeah, To send you you have to send your car in for service. Yeah.

Will Vincent 13:05
I wonder as well, and I don't have an answer to this, but I'll pose it to you to you too anyways, if perhaps one of the ways people start. So one of the things people think with a sink is Oh, now I can maybe replace Redis or some of these other services that are or Cubase things. And I mean, that's a imperfect statement, but I think that's one that someone could think that could you disabuse, you know, either of you have of that comment? Like, oh, yeah, async Django, so now I don't need you know, Redis or memcached. I say this because I've had that thought and because I'm asked that by my reader, so it is out there.

Carlton Gibson 13:40
So okay, so you're not going to get rid of like memcached is totally different kettle of fish right? caching server, you're not going to get rid of that. And if you're using Redis, in that same ballpark, you're not going to get rid

Will Vincent 13:52
of caching for for like queue stuff.

Carlton Gibson 13:54
If you're using rubber. If you're going to use Redis as a cue, you're probably not going to get rid of that either. Right. So, in principle, we will be able to create hooks for lightweight background tasks that will just be able to spin off using an async go and do this async task and about now style at Tom Christie's framework has got that kind of ability already in it. And we're, you know, we keep looking at that and thinking, oh, maybe you know, 3123 foot 410. Who knows? But it's not going to replace a queue. You know, it's not lightweight background tasks. Yeah. replacing your full your your queue with years of battle tested coding behind it. No, I don't think you're going to replace that. Keep. Keep Django q keep salary for using Huey that can? Cause Yeah,

Will Vincent 14:43
I saw you. You mentioned that someone wrote a nice post about using Huey with Django.

Carlton Gibson 14:48
So that's a nice lightweight option. But don't like don't use it. You're not going to replace those instantly, like maybe over time, but this stuff is still fresh and young and what sort of Oh, yeah, we could do this doesn't mean it's, you know, the same as Rob. Wrapping an existing task or function with a decorator, and it just happening by itself, because all of that's written, I thought you'd say that I just wanted to tee that up. So you could

Will Vincent 15:09
disabuse that statement. And I mean, the cool thing about starlet too, just with async is, you know, there's this fast API framework that uses starlet under the hood. And I'm sure, you know, we in the Django community will take some inspiration from how that's going. But that seems to be I don't know if there's examples of it at scale, but it's very people are enjoying using it. I've heard a number of developers who've dealt with it and really, really liked it.

Carlton Gibson 15:32
I think Microsoft are using it a lot into you know, in there stuck around as you are and things like that. So, you know, it's very popular. And what's really in great we ASCII so cool. Like because every, every level of ASCII is a middleware. It's every app, every bit of every middleware, and every view is an asiya. Right? It's a it's so you can nest Yeah, you will. It's kind of like an onion, but it's kind of like a tree as well in that you can nest them inside each other and you Can you can have a middleware that would route between two as the app. So let's say you're using Django. And then alongside of it, you want WebSockets. Well, we've got channels, which is, you know, we still go for WebSockets, even now. And then, but let's say you've got something that's written in fast API, you could put that next to it. And it was from the same server. And you could route it within your kind of ASCII framework. and combine the best of both worlds. And if there's a nice middle ASCII middleware out there that you want to use, where you can wrap your Django app in that as the middleware and you know, it's a lovely position for us to be in. It's kind of really, what's the word I want, like, fertile. It's a really fertile environment for us to be building web apps in now. I think

Will Vincent 16:40
I'm quite excited as well. Mrs. has a question for you. So testing, how does async testing work? Or how will it work? Because there's some there's some of that now and then going forward. How should people think about that?

Mariusz Felisiak 16:52
Yeah, so

we face abuse and diversity also

have transit can be used for testing like special, a separate class of test client. So there is currently there is a icing client that is built in testing framework

that can or

should use for async stuff.

To be honest For me it was

a big challenge to review

the entire change created facing use mirrors and testing. But I think that that's something that probably allow us to to find at least use model regressions where a person that's that's not an expert in async court, try to try to work with I think that's not why you A bit better in it.

But But, but still so for,

for async tests, you can use async client, you still can use the same methods for testing, get posts or anything cause it is just called whiff of it. So it needs to be outdated. And in insert about everything works similar as well,

Carlton Gibson 18:36
there's one thing to know for test case, which is if you could define an async def test in a test case, it will run in the right context and be run in an event loop for you. So you can you can test it asynchronous functions using Django test test.

Will Vincent 18:49
Yeah, that was pretty. That was very nice, which is nice. Mario's if I could have you answer this. Can you describe to people what it's like mentoring a Google Summer of Code student because we've had them over In the past, we have several now they add major new features. But I don't know if people I know that people don't know what the mentoring role is like. So could you talk about maybe specifically with Sage? So we've had him on and, you know, he's student he added cross DB JSON fields, so not just in Postgres. What does that process like, you know, for you as a fellow to mentor someone,

Mariusz Felisiak 19:21
it's just pretty smooth to be honest. Mainly because it was very hard worker. So he made a lot of a lot of jump on his own. Yeah. So he made a lot of investigation about how it is supported in different DBAs because it's not really a straightforward think. Because we have different implementation in different database, we have PostgreSQL where there is not a field that's in in other databases. For example, that food that is just looks like JSON food. It's, for example, text me with some extra constraint that are built in a database. So it's it's it's extremely complicated, but it was a


nice experience to build it. To be honest, the hardest part was to polish it at the end, because it contains a lot of small pieces in different parts of Django. So we have changes in schema. We have changes in introspection in different lookups implementation decoders and coders. We need to deprecate all fields. We added some extra system checks, etc. So a lot of different pieces that are on the different layers in Django. I can say that it was the biggest request, I think that I ever merge it Jenkins touch, it touches around 3000 clients, it's, it has more than 400 comments. So before before kicking marriage, you need to check for hundred comments and see if all of them are addressed properly.

Will Vincent 21:22
Well, I think that's a great feature. I mean, it speaks to sometimes people, you know, want to know what database should I use with Django. And it is true that Postgres has more features just like search. And just because people have built them, so it's, it's nice to have more uniformity, but it takes a tremendous amount of work. Obviously, I have

Carlton Gibson 21:45
to say Maris put just so much time and effort into polishing the PR and like the different like, you know, sage got it in place during his project, it was there. But then, Maris went through and was able to adjust it and make sure it was going to be maintainable in the long run and clear up the The implementations and the amount of time you spent on it was a Herculean task. It was it was fantastic. And, you know, at the end is this the, the way that key parts are determined, if you try and do a look up on a nested JSON field in their lives, you've got my data with pets with, you know, dog Rex, I want the dog who's got the name, you know, and you try and fetch that value. That's really complicated. It's just mind bogglingly complicated. And fortunately, Marius finds it. Easy, but you know, to get that right, and to get that into the state, it's, it's in and it's ready. And it's, you know, so well done marriage. I think that was super what I want to ask their marriage is if if I've got so I've got my project and I'm on 2.2 and I'm using post contract Postgres JSON field, what's the steps I have to take to upgrade? Is it going to be easy for me or is it going to be difficult? It's extremely easy to To be honest,

Mariusz Felisiak 23:01
you just shot you just shot

should change inputs from Django contract Postgres, quite a few stations to Django db motorisation. And, honestly, that's it. You also need to run

migrations to create migrations.

But they will, they should not impact your database at all. And even if the attributes are deprecated, then we still will keep that stuck fields. So you don't need to change the circ integrations. That is the outfit, so it should be quite easy.

Will Vincent 23:42
Okay, that's well, you put me at risk. Your beginners often asked you about differences between databases and almost, you know, almost without lying, I can say well, they work all the same, you know, certainly for a beginner level project because the Django ORM but it takes, you know, herculean levels of work to do That'd be the case. So I just want to highlight that. And maybe. So there's currently two Google Summer of Code students. What's, how's that going? for both of you, right? I mean, there's I know there's a online, you know, progress, the things they have to hit each time. But how much? How much work is, is that for the two of you, on top of everything else you do,

Carlton Gibson 24:22
it's okay. It's like, you know, reviewing an extra PR, and then, you know, every week or couple of weeks, I spent a teeny bit of time making sure I've caught up with the students and that, you know, they're doing their thing. So Casper is working on the Django

project, which is like the type stubs for Django

and he's working on the my pipe plugin for that. So that, you know, that will hopefully be improved over the summer. And he's we've just done the first assessment and he's merged a couple of small prs and helped a couple of people and it's going really well. And then Ahmed who's working on Django itself is helping to To make the parallel the test runner work in parallel for Windows, and also now on modern versions of Mac OS. So

recently Mac OS changed the default

protest spawning method to or forking method to post a start method to spawn rather than fork, which is a low level thing. But the difference is a spawn is how Unix does it and it inherits the parent processes memory space, basically. Whereas spawn creates a whole new brand brand new process entirely. And from Python 3.8 that's the default process start method on Mac OS because it will forking will stop working in a future version. And so from Python 3.8, the Django test suite doesn't run in parallel on Mac OS, which is real pain. It's like wow, because it goes from like six minutes to about 20 minutes. This is not a good change. So, you know, we're hoping to get back up to parallel running On Mac OS and on Windows, and he's hoping to add Oracle parallel running as well, because the, the Oracle test suite currently takes over an hour or something it's like, come on Oracle. But if we get in only because we can't run it in parallel. But if we could get that working, then you know that we could cut our CI times. And we could run Oracle tests more often, because quite often, we don't run them because they take too long. And so it's quite a good project. And that's really interesting. And Tom Forbes, and Adam Johnson helping with that. And David Smith, who's a new contributor is helping to on the project management side as well. So there's lots of people involved.

Will Vincent 26:35
Great Well, at Google, in particular, has been very generous to Django, both with Google Summer of Code that some season of docs, which we've been doing has been accepted for. They also donated $5,000 to Django security efforts earlier this year. So Django has been a big help, or Google has been a big help to Django, excuse me. Okay, so other features. So there's so many. I mean, there's so many features in 3.1 I don't know, you probably can't keep them all straight in your head. What is there to say about pathways? I mean, it's more elegant than the current way of doing it. But that's that's a novice answer. What what Where did the two of you excited about with pathway? You know, why was it added? Because it's a major change to swap that out?

Mariusz Felisiak 27:17
It's more readable, that's for sure.

Will Vincent 27:19
Yeah. Was Yeah. Less things to type.

Carlton Gibson 27:22
Okay, so what is it? Tell me tell me what it is memories. What's, what's this Bartlett thing all about

Mariusz Felisiak 27:26
from Jenga to bone. One, basically, all settings, support puffins instead of instead of the old way to do this. So we use

OS hooks to create

a proper paths.

Carlton Gibson 27:47
We still accept strings as well, right? Nothing's good. Yeah,

Mariusz Felisiak 27:50

Carlton Gibson 27:54
So see if I've got a part so like, the classic one is based in your settings, right? And that would know Be What is it? Os dot ABS path or absolute did or you know, blah, blah, blah, their name, their name like this kind of horrible construction you do. And then now you can just create a path, which is path of the file. And then, you know, it's it's an object.

Mariusz Felisiak 28:18
If I am parent, in the sense,

Will Vincent 28:21
now, it's just a lot easier to use. I mean, and you and people have been, you've been able to use it on your own before, but now that it's just baked in, and when you run start project, boom, beginners will have it. So I think it'll make

Carlton Gibson 28:32
you but also you couldn't, there was lots of settings you couldn't pass it to. So there's two things one is that everywhere The path is needed, it will accept a path object is instead of as well as a string. And there's there's one place inside the code where we have to cast back to a string that's in for sequel light, because it doesn't yet accept a string in that path object in that place. But we cast back for you so everywhere In the in the settings that you would have used a string, you can use a path. That's the first bit. And then the second bit is that we've updated the templates. And when you create a new project, they automatically use these new path objects.

Will Vincent 29:13
What else? I mean, it's just, you know, thinking about things that people will see when they use 3.1. So one is the admin, right? There's a side sidebar has been improved, a little bit easier navigation on it, I believe.

Mariusz Felisiak 29:24
Yeah. So we have a new sidebar on the left side on the screen.

That makes navigation razoring easy currently.

Carlton Gibson 29:35
It's kind of cool. You've got a bit you've got this giant screen, you're in real estate, and you've got you know, we now use a little bit more of it more.

Mariusz Felisiak 29:42
Yes. And you don't need to use breadcrumbs to go back right.

few screens ago, you can just choose a different model or a different change case or another different view. That is some diversity are confusing,

Will Vincent 29:57
right? Yeah, that'd be a lot easier than bread comes. There's Also an auth change. Check in the notes here, but we're the hashing algorithms change, right? Sha 256 instead of Sha one.

Mariusz Felisiak 30:08
Yeah, exactly. It's still safe. But

we decided to change hashing in multiple places, to be honest. So currently, by default, it is not used. And we're in in in Django. So cookies, sessions, signer, password reset. All of them are currently using chapter 22.6. And still all support for all hashing algorithm remains until Django 4.0. So

even if you update to Django 3.1, and

Everything should work properly even with old caches,

Carlton Gibson 30:55
and we up we set the secure referral policy now.

Will Vincent 30:59
Yes, that's the one As the other one that's gonna, so that now defaults to a different with a more secure setting, I think

Carlton Gibson 31:05
same origin now. Yeah, same origin, right. So that what that means is you won't send cookies to unknown third party requests from third party sites, right?

Will Vincent 31:14
Yeah. And actually, I had a question about that, because it was changed in 3.0 in the deployment checklist, and I'll put a link it's in the Django forum, Carlton, you and Adam Johnson. Because I think Adam Johnson

Carlton Gibson 31:26
Adam knows most about this kind of stuff. He's he's he's got he he's got a Google calendar reminders to check the spec to see you know, when it's all

Will Vincent 31:36
good, it baffled me too, because there was, you know, it changed. And there were four options. And I was like, I'm Mozilla and I was like, Oh, my God, what is this thing? But

Carlton Gibson 31:44
so the default The interesting thing, which secure referrer policy that people have hit is Chrome. Now, if you were embedded in if you if your site is embedded in an iframe, right, so if you're, like, discusses a sample,

Will Vincent 31:58
then chrome plug in Google Maps if you

Carlton Gibson 32:01
So okay, if you were serving Google Maps, then then chrome defaults to the to not sending a cookie there. Unless you specifically set the string value non in for the secure referral source policy. And that wasn't that was a change that just came came in in 2.2. And so people on 2.2 are having to create a middleware to work around it, okay, it's not a tiny thing, but from 3.1 you can just set that in your settings file, and that will just work. There aren't many people who are embedding their friends in the sites in iframes. But those who are that will, you know, that's useful for them.

Will Vincent 32:38
Yeah, I want to ask because 3.2 is already in process. So knowing ahead, it's on the way Mario's What are your thoughts on what can we look forward to in 3.2? You know, nine months after 3.1 comes out in August

Mariusz Felisiak 32:53
so currently I have one big

released blocker in my mind. So I would like to ask for help. Functional indexes to Django in Django 2.2. So I think that currently is the biggest feature that I would like to include in the next series.

Will Vincent 33:12
What about you, Carlton? Anything?

Carlton Gibson 33:13
Well, yeah, so Okay, so one thing that didn't quite make the cut for Django 3.1 was proper reload.

Support for run server when you're running with ASCII. So at the moment, the way the best way to get that is probably to install channels and use channels version of run server. There is a, you know, it's another option out there Django ASCII run server, I think it's called which which imposing Daphne and we'll do the runs the reload for you. So it's that replaces the run server command. We need to get that in because it's not a great situation where for 3.1 people will be run server, but they won't be getting reload onto the ASCII environment. So we'd like to I'd like to get that done for 3.2. I'd like to get an interview frequently

Will Vincent 34:00
when was when was reload added to run server? Because I remember using Django before that was the case you had to quit and start I mean, I know it was. It was a while ago, but as it you know, as a user, I remember that was one of those things. I was like, Oh, this is so nice that I don't have to quit and restart my server all the time. Maybe it was 1819 something like that. That makes me feel a bit like a dinosaur. I'm like, I used to have to stop and start the server. Although I seem I seem to recall there being like phases of it as well. It sort of had Yeah, that's what detects Python changes but not other things. So I can't remember exactly what but I mean, like you if you added a new template folder that was never picked up, I don't know if is the right. One part of it is because you you know if you make a change to your settings file that's, you know, needs to be those environment variables loaded in and so I think that was later on the reloading, you know, the HTML and CSS came earlier. Anyways, usability thing, so any anything else this is, you know, we wanted to dive a little bit deeper into 3.1 3.2 shed some light on the role of fellows. And honestly, it makes me feel a bit better about I've been grumping around about updating my books. But thinking about all the things that the two of you have to do for Django, in terms of back support makes me feel a lot better. So, thank you for that.

Carlton Gibson 35:15
Well, I'd say is that I don't think there's, there's not that much. It's explicitly on the roadmap. I mean, async was the big thing, right? Okay. So that's in now and Okay, we'll see what happens. So you know, that that needs to grow, it needs to mature people need to start using it, you know, who knows where it goes next. There'll be loads of features to the LRM coming over the next nine months that, you know, it's constantly taking over and, wow, this, the changes that are made over time are just super. But 3.1 is just Well, 3.0 point, you know, extra number, right? It's just, it's not a massive breaking change. It's not a massive jump. It's that evolutionary thing that Django does so well. And three point will be more of the same and, you know, that's what's exciting about it is because you can be on the latest version without worrying. How about

Mariusz Felisiak 36:02
you, Maurice? We do not remove any features in Jenkins you can still so if you have up to 2.1 in yourself, yeah,

Will Vincent 36:08
well, and and you know, so this comes out July 15. We're recording it two weeks before people can still go and pip install dash dash pre Django and try out 3.1 you know if you find any weird breaks, do let the Django community know but should be in pretty good shape. Yeah, no run it against you see I please.

Carlton Gibson 36:28
Yes, yeah. And tell us what what went wrong?

Mariusz Felisiak 36:31
Yeah. Because currently it's it's easier to fix it, then you will need to wait for a month for a minor release to fix anything.

Will Vincent 36:40
Well, Mario, thank you for joining us to talk about what's coming in 3.1. I know I've been you know, looking at your pull requests, and I have some sense of of the work that you and Carlton do, but not a full sense, but it's a lot to make it smooth. And so thank you for all that work. Thanks, Carlton, you want to check us out? Where can people find more info on Django or the podcast

Carlton Gibson 37:00
Right will on Django, you go to docs Django project calm and you know, releases and read the 3.1 release notes. So you go forward slash 3.1 releases. It'll be in the notes. Yeah.

Will Vincent 37:09
Oh, we will link to how to upgrade to there's there's Django Doc's on that we're linking to how to upgrade your version properly.

Carlton Gibson 37:15
Okay, that's a good idea. And then we're obviously Django chat and we chat Django on Twitter. And there's a website, Django And yeah, join us next time.

Will Vincent 37:26
All right. Bye, everyone.