Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Djangocon: React.js workshop - Maik Hoepfel
He compares react.js to angular. Angular basically want to take over your whole page. Multiple apps on one page, mixed with some jquery, isn't really possible. You also have to learn a lot of terminology. It is a full stack framework. And angular 2.0 won't have a migration path from angular 1.x... React.js only does one thing and does it well: the view. It doesn't do data fetching, url routing and so. React.js is quite pythonic. You can start adding little bits at a time to your code. You cannot really do anything wrong with it. A core idea is that the html is in one corner. That's the output. And the state is in the other corner. They're strictly seperated, which makes it easier to reason about. It is build by facebook. They take page load time seriously. You can even run react.js partially on the server side ("react native", inside node.js), taking down rendering time, especially on mobile. Facebook is pretty deeply invested in it, so the chances of it disappearing are low. (As opposed to angular: google is barely using it itself). When you start using react.js on a page, you'll have to start thinking about components. … -
Loop Letters | Tracy Osborn
The following is the second installment of our Loop Letters series, an interview with Tracy Osborn. Tracy is the author of Hello Web App, a book to help designers and non-programmers get up and running with Python and Django. Tracy comes from a designer background herself and offers a unique and refreshing take on programming in her writing. We asked Tracy all about getting involved with Django, recent talks she's given, any advice she has, and what she enjoys doing away from a screen. Let's get started! Your startup, Wedding Lovely, has turned into your full time job. What inspired you to get this going? What’s your favorite part about what you do each day? I have an Art degree and I've always loved wedding invitations — they're such beautiful pieces of art. When I first decided to do a startup, I wanted to build a website to help people do the typography for their own invitations. Unfortunately, that turned into a harder problem to solve than I thought; outputting a PDF with perfect typography is no easy task! Instead, I decided to teach myself programming and start with an easier idea: building a simple directory of freelance and small … -
Djangocon: An ageing coder tackles his ageing code - Owen Campbell
(One of the summaries of a talk at the 2015 Djangocon EU conference). Owen Campbell himself is the ageing coder he talks about. He picked the title because he qualified for early bird tickets because of his age :-) His experience started at age 11 with a 1kB synclair ZX81 that you could only program in z80 assembly language. Storage? Cassette tapes. In university he did assembly programming on the 8086 and 86000. And for an extra course he did Fortran, a "high level language" which meant submitting code to the mainframe and getting a print back that you missed a comma. Please re-submit. He showed an impressive list of programming languages he used in all those years. For his own company he needed an accounting system. He re-used an older Lotus project and re-did it in microsoft access. Later he moved it to MSSQL server and a dotnet frontend. All in all it ran well for 15 years. But he got enough of the server license costs and the microsoft development environment. That accounting system is the "old code" from the title. He wanted to convert it to a web app. He started out with Ruby & Rails. He … -
Djangocon: lookups, transforms and expressions - Anssi Kääriäinen
(One of the summaries of a talk at the 2015 Djangocon EU conference). (Anssi Kääriäinen gave a great talk last year at "django under the hood" about the django ORM. Look at that one, too.) Lookups, transforms and expressions are new features in the ORM (part in 1.7, part in 1.8). They are ways to inject custom SQL in a well-structured way. Custom lookups are things like __glob that you can write yourself in addition to the build-in ones like __gte. Custom transforms? __lower, as an example. How you could do this previously was by using .extra(), you could tweak the sql this way. The new approach is more reusable. It can also be chained (somefield__lower__glob)! Another drawback of .extra() is that it quite a hacky part of the django code. The new functionality Lookups. Those are basically "a condition in the query's WHERE clause". Examples in django are lt, gt, gte, contains and so. To create a custom lookup, you subclass models.Lookup. You set the lookup_name and you implement the .as_sql() method. Afterwards you register it for the various Field types for which it is valid. An example (very quickly and incompletely copied over from the presentation): @models.CharField.register_lookup class … -
Djangocon: Better web applications through user testing - Ludvig Wadenstein
(One of the summaries of a talk at the 2015 Djangocon EU conference). Ludvig Wadenstein is a developer, but he also does a lot of UX (user experience) work and user testing. What is user testing? You make someone use your application and see what comes out of it. Then you fix things. Why user testing? You see if your user "gets" your UI. And you get a fresh look. And perhaps you discover small changes that can make a big difference. Test while you build it and test it when it is finished. Keep in mind that the earlier you test, the cheaper it is to change something. A rule of thumb is to test it once a month. Who should be your test participant? Don't focus too much on finding the perfect participant, almost everybody is OK as long as they don't have much experience with building the system. Aim for a mix of beginners and experts. There are many ways to test. Their method takes about 50 minutes. They have two rooms, one is the test chamber, the other is the observation room. In the test chamber you have the participant and a facilitator. The facilitator should … -
Djangocon: Project templates - alternatives and tools - Emmanuelle Delescolle
(One of the summaries of a talk at the 2015 Djangocon EU conference). Emmanuelle Delescolle says the django community is quite welcoming and friendly. The increased effort that is being poured into diversity is great. She showed a sample django project filesystem structure. It looked like a bit of a mess. Not too standard. Then she showed the structure that has her preference, including the settings that belong to it. Well, once you're happy with such a structure, how can you use it all the time? Django now allows you to pass a template parameter to "startproject". Then your template gets used instead of the standard django one: $ django-admin startproject --template your-preferred_template/ You could make one for your reusable apps you want to release as open source. Automatically include a license file, for instance. See the django docs . How does such a template look? Basically the same as a regular django project, only certain parameters get replaced. A folder project_name gets renamed in your project's name, for instance. Same for python files: you can use {{ project_name }}-like strings in there and they'll get replaced. But it is not enough. Only python files can be templated. Not other … -
Djangocon: CMS Panel - Iacopo Spalletti and Tom Dyson
(One of the summaries of a talk at the 2015 Djangocon EU conference). The panel consisted of Iacopo Spalletti of Django CMS and Tom Dyson of Wagtail. For many people, a CMS is the way they get acquainted with django, so it is pretty important. Often they come from Wordpress originally. What is the main philosophy of your CMS? Django CMS tries to be just another django app. After a while, django cms grew to support multiple roles. The content manager, the front-end designer, the main editors and the other editors. The main editors set up the content structure of the site and the other editors fill it. Wagtail doesn't try to give editors as much power as django CMS (and Drupal and so) do. Often the super-powers aren't even used. It is more aimed at django programmers. It has its own UI (instead of the standard django admin). Performance is a key priority. In practice, how does the philosophy work out for you? Django CMS is build upon the flexibility of the django admin. They use it everywhere and it gives them a lot of power. The only pain point is the URLconf. They love django. They wouldn't be … -
Djangocon: What it’s really like building RESTful APIs with Django - Paul Hallett
(One of the summaries of a talk at the 2015 Djangocon EU conference). Paul Hallett considers himself an "API fanatic". He works for lyst, a website for buying clothes. They had an existing API, json-rpc, and wanted to have a better API that fitted better with http. RPC (remote procedure call) means you only have one endpoint (=url) and everything is a POST request, even if you only request information. "RPC for http is bad" is what he said. He wanted to do it with django rest framework. Django is a batteries-included webframework, django rest framework is a batteries-included API framework. If you need to re-build some existing API as a rest API, think of it as a chance to rebuild. If it is an existing API, the program probably changed a bit from how it looked originally. Shouldn't you clean it up a bit? Change a couple of models? The alternatively is to shoe-horn non-fitting models into an otherwise nice API... REST focuses on Resources. In django terms, you often think "a model". This isn't necessarily true, it might be either more or less. A model might actually have two separate sets of attributes that you'd rather treat as … -
Djangocon: Demystifying mixins with Django - Ana Balica
(One of the summaries of a talk at the 2015 Djangocon EU conference). Ana Balica talks about mixins. Mixins are ways to add extra behaviour into classes. Mixins aren't anything special in python. They are just classes. Mixins are nice for providing modularity. They should have one specific goal and they should not themselves be extended or instantiated. You could use them for instance to work around copy-pasting code around between classes. Just make a class with the otherwise copy-pasted code. How do you use it? Python's multi-inheritance. A class can have multiple parents: class Foo(SomeMixin, BaseFoo): pass In django, mixins are especially useful for class based views. As an example, let's build a mixin that checks if our users are logged in: class LoginRequiredMixin(object): def dispatch(self, request, *args, **kwargs): if not request.user.is_authenticated(): raise PermissionDenied return super(LoginRequiredMixin, self).dispatch( request, *args, **kwargs) class AboutView(LoginRequiredMixin, TemplateView): template_name = 'about.html' dispatch() is handy to keep in mind. Likewise .get_context_data(). (Note by Reinout: doing something with get_context_data is probably not needed). How do you discover what's in django's class based views? You could look at the source code of django. But looking at http://ccbv.co.uk/ is handier. There are a lot of mixins already written … -
Djangocon: Coding with knives (pt II) - Adrienne Lowe
(One of the summaries of a talk at the 2015 Djangocon EU conference). Adrienne Lowe wants to share some lessons she learned while learning to code. And how to use knowledge learned in one area in another one. Another area? Cooking! She cooked a lot. Working in restaurants, private cook, training, everything. She started a blog called coding with knives. Three lessons she has for new coders: If one tutorial doesn't work for you, choose another one. Don't let it reflect on your own opinion of yourself. If you're a cook and a cookbook doesn't work for you, you simply pick another! So simply look around for a different tutorial. Reach out. Don't be afraid to ask basic questions. The person answering also learns something: being a better teacher. So you both learn! In the cooking community, you exchange recipes. You help each other with tips. The same here in the django community. It is so friendly! And most of it is open source. Great! Let your goal guide you. You'll inevitable run into problems as a beginner. Don't let that discourage you. Make sure you have a specific goal you're working to and celebrate when you reach it. Simply … -
Djangocon: Conformity and you - a question of style - Greg Chapple
(One of the summaries of a talk at the 2015 Djangocon EU conference). Greg Chapple works half his time on Django projects, half on Rust projects. Some things you'll probably never hear: "Can't wait to fix some pep8 violations today". Style conventions probably aren't the sort of thing you take into account when picking a language or a framework. Every line of code follows some sort of style convention. Intentional or not. The style of our code can identify us. Same as with this talk: Greg speaks with a slight Dublin accent, by default. Something to ask yourself: if you look at a piece of code inside your company, could you identify the person that wrote it? Let's get back to Greg's accent and the way he speaks. How did he come by this? Where he grew up, of course. The people he's around regularly. You can change it, though. He spend two weeks in the USA and when he came back he got funny looks for some of the US pronouncement that krept into his vocabulary. The same with your code style! You're influenced by the code you're surrounded by. If you want to make changes, it takes quite … -
Djangocon: Lightning talks
(One of the summaries of a talk at the 2015 Djangocon EU conference). Pycon Namibia - Daniele Procida In february 2015, the python conference in Africa actually took place! In Namibia! Daniele Procida talked about the plans at many conference (like at djangocon.eu 2014). It was really good. They formed valuable relationships and learned a lot. Several of the attendees are here at the conference. They're going to organize another conference later this year. So if you want to escape a dreadful European winter... I'm new to django but why should I use it? - Ben Sharif Why should you use it? You're new, so why Django? He's in that situation. He's a medical student. He's not a doctor yet. It also means he isn't a professional programmer. He wants to quickly prototype ideas for medical web apps. He wants something that lets him develop things fast: Django fits the bill. He started learning python in may 2014. He tried the django tutorial, but that didn't really work. He got pointed at web2py. Easy to get started. Almost no configuration. Through the web development. His demo is at http://medboard.co.uk/ So... what is he missing? The django community is absolutely massive. … -
Djangocon: Hypothesis, randomised testing for Django - Rae Knowler
(One of the summaries of a talk at the 2015 Djangocon EU conference). Rae Knowler talks about hypothesis. It is a property based testing library inspired by Haskell's Quickcheck. So: it took out a a bunch of good ideas and you don't need to know a lot of scary Haskell :-) The core idea is that it uses randomized data. You tell it to test your login page, for instance, with a name, an age and an email address. It then creates 1000 random names/ages/emails and feeds them to your form. It simplifies examples of failures. What that means: if it finds an error, it tries iterating on it, finding out in the end that perhaps your form doesn't handle a name with a $ in it. It remembers interesting inputs. It works with pytest, unittests, everything. It is just a library. There's django integration: https://pypi.python.org/pypi/hypothesis-django/ . Custom field types are allowed. It can generate child models. And since last sunday it supports fixtures. Rae showed a demo. With random numbers, hypothesis reliably found a DivideByZero bug. Nice! Hypothesis makes discovering this kind of bugs easy. It makes it simple to write tests without having to rigorously figure out the … -
Djangocon: How to write a view - David Winterbottom
(One of the summaries of a talk at the 2015 Djangocon EU conference). David Winterbottom says that on the one hand, views are simple: a request comes in and a response goes out. On the other hand, you have lots of freedom in views, which might lead to problems. A central principle in software architecture is separation of concerns. For instance by encapsulation: providing a clean interface and hiding information from other parts of the system. A well-known design pattern is MVC, model-view-controller. Originally used for desktop application, but also used in most web frameworks. Note that every web framework interpretes it differently. Model: business logic. Domain logic. The data, the rules. View: what the user sees. Controller: steers the whole process. The user interacts with the controller. Django talks about MTV: model, template, view. He'd say that what's the view in MVC is mostly the templates and static files. The Controller in django is then views, middleware, urls.py. What David often notices in django projects is that the views.py is too big. There's data validation in there. Some of the model layer creeps into the view. And so on. You're not encapsulating everything like you could be. Django is … -
Djangocon: The net is dark and full of terrors - James Bennett
(One of the summaries of a talk at the 2015 Djangocon EU conference). James Bennett worked already with Django for 9 years. And especially: he's been involved with Django's security releases for 8 years now. So this talk is about a history of django and security and how django tries to protect you. And where django screwed up and what you can learn from it. Bottom line: security is hard. There are always things that can be improved, always things that could be more secure. Some history He showed the first ever django security bug. And the last one (number 49). The last one had a proper full release, the first one told you to overwrite one specific file. The first issue played down the problem a bit, the last one didn't. See the full list of all security issues. In 2007, there was still an informal security process. In 2008, django 1.0, django started autoescaping in the templates. Quite controversial with a long discussion, but it was decided it was so important that it was enabled by default. In 2010, django 1.2, modern csrf protection got added. Security by default. Better to be safe out of the box. Next … -
Djangocon: Forms are not static - Markus Holtermann
(One of the summaries of a talk at the 2015 Djangocon EU conference). Markus Holtermann works on the django core team. Forms are basically there for input validation. They're also used for rendering actual web forms. Normally, forms are pretty static. The field are there and they don't change. But sometimes you want for instance request dependent forms. Depending on the request, some fields might be left out or are added. The same way, depending on the permissions of the user, there might be more or fewer values in a dropdown. Markus would say that those forms are still static, because you have to write code to make those kind of changes. He was involved with a website that dealt with different events. Every event needed a form with slightly different fields. With regular static forms, you'd need to create a fresh new form class a couple of times a year. Not nice. He ended up making django-dynamic-forms that could construct forms on the fly. Django itself dynamically creates forms when you use ModelForms. It reads the model and dynamically creates a class. You can do that in python with type(). He does basically the same, but he doesn't read … -
Djangocon: Into the rabbit hole - Ola Sendecka
(One of the summaries of a talk at the 2015 Djangocon EU conference). Ola Sendecka organized the Warsaw djangocon in 2013 and started the djangogirls organization. She told us a story in which she paraphrased "Alice in Wonderland" as "Alice in Djangoland" :-) Complete with code examples. Fun. Alice's sister asked her to have tea with her. "Fine, I'll be there in 10 minutes". And she starts adding a small feature. But ran into a small problem. Oh, I'll fix that with a small change to the object manager. "Are you coming for tea now?". Yeah, almost done. I just need to fix this small bug in the new code. So she had to make a small modification to override something in the form layer. Oh. Traceback. "The tea is getting cold". I'll just override something in a the form field. And some extra customization there. In the end, the code was horrible. And Alice's sister was angry. What happened? Good question! The problem: Alice was in a rabbit hole. She got so caught up in what she was doing that she just kept doing that for hours on end without really getting anywhere. You fall into a rabbit hole … -
Djangocon: Give your pony wings - Benjamin Wohlwend
(One of the summaries of a talk at the 2015 Djangocon EU conference). Benjamin Wohlwend confesses that he's a lazy programmer. He also likes his code to be lazy: he doesn't want his code to do too much. Why? Code that doesn't do much is code that is fast. If you have performance problems, how do you find them? He uses django-debug-toolbar and django-devserver a lot. django-debug-toolbar is great, especially because it lists the number of queries (which is a common performance problem). django-devserver also prints out the number of queries and the time it took. For every request. Handy. It is a runserver replacement. To reduce the number of queries, django provides select_related() and prefetch_related() Select_related is for immediately grabbing related objects in one big query. prefetch_related does something similar, but it is better suited for many-to-many fields and reverse foreign keys. There are many more tricks. You can use django's annotate function to let the database count numbers of related objects instead of grabbing them all. Much quicker. Also .defer() helps, this lets you tell django not to grab certain columns as they're not needed. Caching can make your code way faster. But cache invalidation is hard. It … -
Djangocon: Django's role in the polyglot web - David Gouldin
(One of the summaries of a talk at the 2015 Djangocon EU conference). (You can also see this presentation by David Gouldin on https://django-polyglot.herokuapp.com/ ) Django is 10 years old now. It is not a cms, but it was originally build for one. 10 years? The web in 2005 was much different from the web we know now. If you were a developer in 2005, you'd have a relational database and some php and an apache in front. Now there are many more parts. And on the server side often there are various parts that need to be connected. And... are you building a website or isn't it more like a real-time webapp? Ok, where does this all leave django? Django is well-placed! Django is build in python. Don't underestimate that advantage! It gives us a huge advantage over frameworks that use less mature n Django is build for "perfectionists with deadlines". One of the places where this shows up is the ORM. You can say about it what you want, but it works well and it enables the django admin, which can be a great timesaver. Django rest framework. Very easy to make good APIs. Celery. Easy to use. … -
Djangocon: Local development with docker - Stefan Foulis
(One of the summaries of a talk at the 2015 Djangocon EU conference). Stefan Foulis did a live demo, so he first sacrified something to the demo gods by doing rm kitten1.jpg, rm kitten2.jgp :-) What is docker? It is kind of like a virtual machine (sort of), but much more efficient. Without emulating a whole machine. The launchtime is milliseconds instead of seconds or minutes. Some terminology: Image. A read-only "template" like a snapshot of a virtual machine. Images can be layered. A django image can build upon a python image that builds upon a debian 8 image. Container. An instantiated image. Like a running virtual machine. Registry. A repository of images. See for instance https://hub.docker.com/ and search for python and django. Instructions to docker go into a "docker file". In it you specify a base image and further instructions like packages that need installing, directories that need to be made, the main working directory and which program to start up as the one single main program that is run inside the docker container. With docker compose, a yaml format, you can "compose" containers. This means you can run multiple containers at the same time, for instance a postgres … -
Djangocon: Web accessibility is not optional - Xavier Dutreilh
(One of the summaries of a talk at the 2015 Djangocon EU conference). Xavier Dutreilh says the web played a big part in our lives. It shaped us. For the most part we're happy with the web and we don't see any real problem with it. But there are problems. An important problem is because we design websites for non-disabled people. So we exclude lots of people with disabilities. It might sound harsh, but it is the simple truth. What is web accessibility? It is the inclusive practice to remove barriers from websites. It ensures everyone has equal access to the information. What is a disability? It is an impairment, either present from birth or acquired later. Either due to an accident, sickness or a genetic condition, for instance. An impairment can be eigher progressive or non-progressive. There are four main categories: Visual. Blindness, low vision or color-blindness. Technically, when you have to wear glasses, you fall into the low vision category. Hearing. Deafness or hard-of-hearing. Motor. Limited dexterity or loss of limbs. Cognitive. Learning issues or memory loss, for instance. So, how do you do web accessibility? The first thing is to provide appropriate alternative text for non-text context. … -
Djangocon: Django aggregations demystified - Theofanis Despoudis
(One of the summaries of a talk at the 2015 Djangocon EU conference). Theofanis Despoudis started out as a PHP (Pretty Horrible Pages) developer at first. He's a recent python enthousiast. Aggregations are basically database functions. Django abstracts away the details behind a simple function. It is useful for producing summaries over collections of objects. Stuff like average, maximum, minimum, sum, count, standard deviation, variance. There is probably more on the database level, but this is the list that django supports. He showed a couple of examples like Gamer.objects.all().aggregate(num_wins=Count('won')). It translates to a quite well optimized SQL query. With django, you don't have to do this by hand. Annotations is a second way to generate summary values. The difference is that it doesn't aggregate all the objects, but that it adds the summary value to every individual result. So instead of the total number of games won like in the aggregate example, you can now add an extra 'column' to every individual result like this: Gamer.objects.all().annotate(num_wins=Count('won')) Nice: you can also slice and order on annotations. You can order the above results by num_wins and pick the highest 5: Gamer.objects.all().annotate(num_wins=Count('won')).order_by('num_wins')[:5] You can also combine annotations with automatic grouping by calling .values(). … -
Djangocon: True beauty is on the inside, but users are shallow - Loek Van Gent
(One of the summaries of a talk at the 2015 Djangocon EU conference). Loek Van Gent has done lots of php/zend work for many, many years. Now python/django for 3 years. He is a member of the 1% club, they support small initiatives that help change society, a "do-good crowd funding platform". They went from two separate sites to one site that could be used as a white label/multi-tenant site. It took quite some engineering effort. And they also made a couple of UI changes, more or less 2% of the work. The boss's reaction? "Wow, I love the new design, great job". The title of his talk is "true beauty is on the inside, but users are shallow". In this case, the boss was shallow and only looked at the the outside, even though 98% of the work was on the backend of the website. Nothing really wrong with that. It underscores the importance of how something looks. He demoed the creation of a django project. A site and two apps. Each app of course has a template/ and static/ directory. But you shouldn't do that. At least according to the 1.8 edition of "2 scoops of django". You … -
Djangocon: Using Python to load-test web apps - Yulia Zozulya
(One of the summaries of a talk at the 2015 Djangocon EU conference). Using python for your load testing is handy. You use the same language that you use for development. You can more easily write small functions to help you. FunkLoad is often used. You configure it with a text file. You can fire off requests from separate tests. You can configure the various treads to have a startup delay and delays between individual requests. Handy: Funkload classes are inherited from unittest.TestCase. They are easy to understand and write. You can use them as smoke tests with simple unittest runners. You can even distribute the benchmark over multiple machines in a testing environment. It is also very well documented and extensible. Funkload also has drawbacks. It uses python's default threading module, which means you're probably not using all your machine's power. The tool itself is configurable, but the default reports are not. And they're not very nice. Multi-mechanize is an alternative. It uses multiprocessing along with threading, so you really use your machine's power. The default reports are more configurable. It also has drawbacks. The API is not as obvious as Funkload's. And distributed workflow isn't supported. A third … -
Djangocon: Using Django in a desktop application - Thomas Turner
(One of the summaries of a talk at the 2015 Djangocon EU conference). Thomas Turner has been using Django for the last 7 years. His company Joinerysoft made a desktop app build on django for joineries ("window makers"). What they use includes Python/Django. MFC, microsoft foundation classes. DHTMLx. ReportLab for PDF report generation. Firebird SQL database. Why django? It is future proof. Easier to connect to the internet. And html pages are often more beautiful than standard microsoft dialogs. A problem was securing the python and html code. They didn't want customers to modify the templates, so they wrote their own template loader that could read encrypted templates. Same with python files. They shipped encrypted *.pyc files. For that, they needed to modify django a bit, because it looks for *.py extensions in various places. As webserver, they settled on cherrypy which ran fast enough and could be integrated into c++. As database, they picked Firebird as that one was easy to install and performed fine. As a browser, they picked CEF (Chromium Embedded Framework), basically an embeddable version of Chrome. It is used by spotify, steam client, github for windows and adobe dreamweaver. You can embed it into a …