Ask HN: What Python web programming frameworks and tools are you using?

11 points by dustinty ↗ HN
I'm interested in hearing from the community about what tools you are using for building web applications in Python.

So, what tools, databases, web servers and frameworks are you using for your latest Python web application projects? Or, if you've abandoned Python, what language have you moved to, and why?

15 comments

[ 5.3 ms ] story [ 48.0 ms ] thread
Bottle[0], Dataset[1], and pipenv[3].

With those three tools I can create a web app with basic functionality with few lines of code, like a prototype. For example:

  from datetime import datetime
  from bottle import get, post, request, run, template, redirect
  import dataset


  db = dataset.connect('sqlite:///database.sqlite')
  entries_table = db['entries']


  @get('/')
  def show_entries():
      entries = entries_table.all()
      entries_sorted = sorted(entries, reverse=True)
      return template('entries', entries=entries_sorted)


  @post('/add')
  def add_entry()
      entry = request.forms.get('entry')
      entries_table.insert(dict(
          text=entry,
          created_by=datatime.utcnow(),
      ))
      return redirect('/')


  run(reloader=True, debug=True)
- [0] https://bottlepy.org/docs/dev/

- [1] https://dataset.readthedocs.io/en/latest/

- [3] https://docs.pipenv.org/

Edit: formatting.

Where is the code that shows (in the browser) the form for add_entry()? I've used Flask, and for a task like this, you typically have to have either one method which is decorated with a route that takes a list of two method args, "get" and "post" in a list, and then have an if statement to distinguish between code to display the form (get code) and code to process the data on submit (post code), or two separate methods, which could be called get and post or get_entry and post_entry. But your get method does not show a form; it displays all the entries.
I'm currently working on a web2py app that I'm working to convert to Django.
For websites and internal web applications I use the following.

Framework:

- A bastardized modification of Django (bad choice, but I'm stuck with it). I'd really like to try Pyramid or Flask.

- Mako for templating.

Databases:

- PostgreSQL for primary data storage.

- Solr for full-text search.

- Redis for cached data.

Servers:

- Nginx for the front-end server.

- uWSGI for the application server (bridge between Nginx and Django). I'd like to try Nginx Unit.

Browser-side:

- jQuery for functionality.

- Bootstrap for base styles.

Flask is really cool. It has a great community and a package for everything you'd need.
I use Flask in most of my projects, the source is very fun to read.
Django, DRF(usual suspects), django-silk from profiling API's. Pycharm is my IDE of choice.
(comment deleted)
Flask if building APIs, Django if building CRUD sites.

I write all my database commands in raw SQL rather than using an ORM, primarily because it's far quicker for me to write slightly more complex SQL than manipulate objects.

I'm a big fan of Flask. For more performance oriented projects I'm dabbling with Go, going to attempt a non-trivial project with it soon.
flask via flask_restplus

SQLAlchemy for ORM

PostgreSQL/Redis/Elasticsearch for storage

Django all the way.

Use the built-in admin functionality for easy CRUD, and add the django-rest-framework plugin for a full REST api as well.

Django with Django REST Framework. Postgres for DB, Redis for caching. RQ/Django RQ for background tasks. OpenAPI for API documentation.