Will Vincent, a Django author, writes about Python, web development, technical book publishing, and databases.
HN commenters recommend his Django books, especially Django for Beginners, as easy to follow, and also link to his blog.
I don't use JavaScript very much, so keep that context in mind.
As far as JavaScript the language goes, my biggest complaints are to do with the sparse standard library (leftpad should be something easy to do with built-in string formatting functions[0], not a 3rd-party library), unexpected behaviour (the map/parseInt thing[1] being one example), etc.
The unexpected behaviour stuff is truly a case of needing to understand the language - after all, why should JavaScript behave like Python? However, as someone who doesn't use JS much, these bits of weirdness make it more difficult to use when I need to.
[0] https://docs.python.org/2/library/stdtypes.html#str.rjust - this is a Python example, but why doesn't JS have this in its stdlib?
[1] https://wsvincent.com/javascript-parseint-map/
A lot of these are pretty inaccurate, at least for modern Django.
1. I'm pretty sure that's not true if I'm correctly interpreting what you mean...You can do things like `path('myapp/', include(myapp.urls))`
4. Custom User models are now very straightforward (and recommended for non-trivial projects since it's easier to start with a Custom model that defaults to the default model for all options then modify it later)[1]
5. All these things are fairly straightforward and libraries like Django-Auth/Django-Rest-Auth cover a huge set of the normal use cases (OAuth, JWT, tokens, etc.)
6. Django Rest Framework is a best-in-class solution for Rest APIs
9. See 6.
[1] https://wsvincent.com/django-custom-user-model-tutorial/
>Is that really what's going on here? I'm in way too deep to be sure what's best for beginner programmers, but I feel like Python must surely optimise...
For these particular numbers, CPython has one optimization I know of: Small integers (from -5 to 256) are pre-initialized and shared.
See https://docs.python.org/3/c-api/long.html#c.PyLong_FromLong
This is generally invisible to the python programmer, but leads to https://wsvincent.com/python-wat-integer-cache/
Three resources I always recommend for beginners:
1. The Django Girls tutorial (multi-language): https://tutorial.djangogirls.org/
2. Will Vincent's books (also recommend his blog): https://wsvincent.com/best-django-books/
3. Tango with Django: https://www.tangowithdjango.com/
Also, here's a somewhat more comprehensive list of Django learning resources:
https://www.fullstackpython.com/django.html
Small integer caching: https://wsvincent.com/python-wat-integer-cache/
The objects for small integers are built-in and static, but 17^2 is too big, and so new integer objects are created when the expressions are evaluated. "is" checks if two expressions represent the same object in memory. "==" checks for equality of values.
You can also check out William Vincent's books [0]. They're easy to read and follow.
A nice blog to also include in your django learning resources bookmarks is Simple is Better than Complex [1].
[0] http://wsvincent.com/books/
[1] https://simpleisbetterthancomplex.com/