7 ms·
Learn web development: Django Web Framework
- molly0 10y agoGreat to see Mozilla supporting Django. But isn't the official Django tutorial cover all of this, Why not just link to it?
- diminoten 10y agoThis is an order of magnitude more detailed, IMO.
- vivekd 10y agoDjango's basic tutorial is great to get started, but once you get into the nitty gritty I find myself often going to stacks rather than the docs to get the information I need because the docs get kinda sparse. One example is if you want to forgo modelforms and pass the information from the forms to the model manually through your view (for example because you want to manipulate the information before passing it to the database). I couldn't find anything in the tutorial that gave clear instructions on this and had to go to stacks to find an example. Maybe the solution is simple and obvious for most experienced programmers, but ordinarily the django tutorial explains things clearly so even newbees like me can get into it so it was disappointing that this was not done in this instance. Another example is sessions, here is the sessions in the official django docs - https://docs.djangoproject.com/en/1.10/topics/http/sessions/ https://docs.djangoproject.com/en/1.10/topics/http/sessions/ it's great on how to configure and set up sessions, but as soon as you get to how you use sessions in views it gets vague, confusing and way too sparse for what its trying to explain. I didn't know how to use sessions after reading it.
- Lxr 10y agoI think the Django docs are pretty comprehensive in the scheme of things. Maybe not perfect but better than average in this space.
- vivekd 10y agoI would definitely agree with that, the first we program I tried to work with was PHP and I think I might have given up on programming altogether had I not discovered django with it's much better documentation. I appreciate what they have done and appreciate the time and effort the Django team put into their documentation, but more is always better and I think other independent contributions on how to use django are also needed, especially since most of the published books you can find on how to use django are out of date
- ubercore 10y agoI'm not trying to be argumentative, but to me https://docs.djangoproject.com/en/1.10/topics/http/sessions/#using-sessions-in-views https://docs.djangoproject.com/en/1.10/topics/http/sessions/... is pretty thorough. Did you come into Django knowing Python already?
- chubuntu 10y agoHow did you solve the problem of bypassing modelforms? Same roadblock here...
- vivekd 10y agoyou reference the model in the view and then tell the view to save it directly to the model using the "model = form field" type syntax to assign value and then .save() method to save. In the form field you are saving from, you write the form field value and then an empty space where the input value goes sort of like "form.cleaned_data.get("field name", " "). The second blank ""is the empty space where the field value goes. The claned_data is django's internal form validator. That sounds confusing so I'll give an example This is what your views would look like from django.shortcuts import render from sample.models import Test from sample.forms import TestForm def Example(request): if request.method == 'POST': form = TestForm(request.POST) if form.is_valid(): testmodel = Test() testmodel.modelfield1 = form.cleaned_data.get('formfield1','') testmodel.modelfield2 = form.cleaned_data.get('formfield2','') testmodel.save() return render(request, 'sample/nextpage.html') else: form =TestForm context_data = {'form':form} return render(request, 'sample/testformpage.html', context_data)
- voyou 10y ago"The second blank ""is the empty space where the field value goes." I'm not sure I understand what you're saying here, but I don't think this is right. cleaned_data is a dictionary, and so the second argument to get is a default value to use if there is no value corresponding to the key. So, in your example, if there's no value for "formfield1" in cleaned_data, it would return a string with a space in. This is probably not what you want to do. cleaned_data will always contain values for declared form fields, so the only way the default would be used is if you've made a mistake in specifying the key (for instance, if there's a typo and you've written 'formfeild1' instead of 'formfield1'). If you've made that kind of mistake, you don't want the program to continue using a single space instead of the valid data (you'll lose data) - you want the program to report that there's something wrong. So I think you should probably use form.cleaned_data['formfield1'] which will do the same thing if formfield1 is a real field name specified in the form, but will raise an exception if it isn't.
- acjohnson55 10y agoYou should consider contributing to the docs if there are things you think could be clearer or more thorough. It's a great way to get your feet wet in OSS, and really helps the next person.
- farabove 10y agoMozilla are really explaining the details between the lines here.
- TheOneTrueKyle 10y agoOh man, this is far superior to the official Django tutorial I think. MDN really does a good job at holding your hand through the process. There are moments when going through docs where way too many assumptions are made about what I know. This is where prerequisites and objectives really help out. I know what I am getting into before grokking.
- soapdog 10y agoThey also released a similar one about NodeJS + Express at https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs https://developer.mozilla.org/en-US/docs/Learn/Server-side/E... both are very good at hand holding and helping you out. The learning sites from MDN are very good. ;-)
- voycey 10y agoIt has been years since I have used Django - do they still expect everything in the model to go in a single file or can you put each model in it's own file now?
- nicolaslem 10y agoCreate a models.py and import there your models from wherever they are. This should do the trick.
- anewhnaccount 10y agoYeah, or another way of splitting up huge models files is to convert models from a module to a package by making a directory models and adding models/__init__.py, models/foo_models.py, models/bar_models.py then doing from .foo_models import * from .bar_models import * in your __init__.py
- ageofwant 10y agoSeparating models like this is a hint that you may need another app. It has happened numerous times with me now that my models.py gets large and unwieldy, I spends a hour breaking it all out and then I realise my one big God app needs to be 3 smaller ones.
- farabove 10y agoTotally agreed.
- cponeill 10y agoThis is pretty fantastic. I was just thinking about diving into learning Django for an idea I want to build so this link is timely.
- farabove 10y agoBest Django tut I have seen
- nicolaslem 10y agoDjango is such an important building block of the web, it completely deserves this tutorial on MDN. As someone who came to Django quite late, I cannot stress enough how coding in Django is refreshing. Yes it's not about microservices nor it bring all the trendy technologies that we all hear about. And that's just fine, you get things done with it and at the end of the day this is what matters.
- desdiv 10y agoDumb question, why does the guide suggest that you create an empty folder and then initialize the project from there? (django_test/mytestsite, locallibrary/locallibrary) As far as I can tell, no file, hidden or otherwise, is left in the outer folder.
- benwad 10y agoI'm not sure if they do this in the tutorial, but it's a convention that some people use to have the virtual environment next to the project folder in that parent folder so that you don't have to gitignore it (just have the repo in the project folder).
- StavrosK 10y agoThis looks fantastic! May I suggest some syntax highlighting so the code boxes don't look so drab, though?
- gt565k 10y agoI had used Django back in version 1.3 and was just thinking today of how I need to brush up, as it has been a few years. The timing of this article couldn't have been better. Now I've got my weekend cut out :)
- legostormtroopr 10y agoEverything about Django 1.8 and above blows everything below away. Its all the same, but so much better. The admin app keeps getting better, migrations are a first class citizen and make ongoing change management and deployment a snap. If you want to make a solid, stable web-app Django is a perfect backend.
- metachris 10y agoThis is so true. Point in case - Instagram also runs on Django!
- idiotclock 10y agoHuh. Makes me miss php
- farabove 10y agoCould you please elaborate on why it makes you miss PHP?
- terrahutte 10y agoThere's nobody here comparing this to Flask, nice
- nikisweeting 10y agoIf you're curious about how to set up a modern JS frontend on top of Django, I wrote up a tutorial recently. It might be helpful if you're debating between trying a Single Page App approach or some other design: https://medium.com/@theSquashSH/reconciling-djangos-mvc-templates-with-react-components-3aa986cf510a https://medium.com/@theSquashSH/reconciling-djangos-mvc-temp...
- sgt 10y agoI think one important lesson here is that by abandoning the traditional SPA approach, you're also opening up your site to be indexed by search engine crawlers much more easily.
- leeoniya 10y agothis is something i struggle to understand. especially with SSR/isomorphic rendering. the vast majority of websites that need indexing should not need JS to create the html. the vast majority of web apps that benefit from being SPAs are behind some form of login/auth and so do not need indexing. yet there's this obsession with writing SPAs that can be pre-rendered for better indexing. i only assume this is a solution to the desire of using nodejs and javascript as a server-side language regardless of merit.
- dermotbrennan 10y agoSome sites are a combination of content (blog, products etc) and a login area with a complex UI. A SPA works well for sophisticated user interfaces but is overkill for content that is just for reading. But then you have to decide is it worth jumping back and forth between JS and your server side language (Java/Ruby/Python) or maybe it would be nice to just have one language to rule them all...
- dopeboy 10y agoAnd if you're going down the React + Redux + REST framework path and need a boilerplate to start off on, I'd highly recommend Seedstars': https://github.com/Seedstars/django-react-redux-base https://github.com/Seedstars/django-react-redux-base
- icn2 10y agoIs Django restful in current version? Or I still need these if request.GET and if request.POST ?
- haikuginger 10y agoSo, there are a few ways to handle it. DRF gives you a REST-oriented paradigm to work with, but in standard Django, you can do class-based views with either get, post, etc methods, or you can use generics like "ListView" and just provide some stock methods like get_queryset to flesh it out.