Hello,

Il 03/04/2014 00:15, Russell Keith-Magee ha scritto:

On Thu, Apr 3, 2014 at 2:20 AM, Riccardo Magliocchetti
<riccardo.magliocche...@gmail.com
<mailto:riccardo.magliocche...@gmail.com>> wrote:

    Hi everyone,

    i'd like to start a discussion about multi tenancy on this list.
    I've been asked to move the discussion here by Aymeric in this ticket:

    https://code.djangoproject.__com/ticket/17802
    <https://code.djangoproject.com/ticket/17802>

    First we already have an initial patch sitting in this ticket:

    https://code.djangoproject.__com/ticket/15089
    <https://code.djangoproject.com/ticket/15089>

    patch here:

    
https://code.djangoproject.__com/attachment/ticket/15089/__15089-missing-site_id.diff
    
<https://code.djangoproject.com/attachment/ticket/15089/15089-missing-site_id.diff>

    The patch basically change the SiteManager to return a Site based on
    the request instead of the hardcoded settings.SITE_ID. Which while
    useful for my usage is also making ticket 17802 obsolete since in
    the mean time Sitemap has been switched to using get_current_site.

    Another missing bit is having the request available everywhere, one
    solution is to store in thread local storage that could be done
    easily in a middleware without touching django core.


-1. Not. Going. To. Happen.

Search the archives of Django Developers if you want to know why. This
has been discussed to death.

Short version - it doesn't matter what pretty name you put on it, a
thread local is a global variable. We teach first year programmers not
to use globals, so why would we introduce them to Django as a core
framework idea?

I expected that :) i meant that if one wants that this can be done without touching django at all.

    Another interesting thing (to me at least) would be being able to
    use a different model for the Site so one can stores some site
    specific configuration there (keeping in mind that in the patch
    sites return but get_current_site are cached).

    That could be obtained through this patch:

    https://github.com/apollo13/__django/compare/ticket15089
    <https://github.com/apollo13/django/compare/ticket15089>

    or maybe like what is done for the custom User model.


What's the use case here? What additional data do you want to track?

For an ecommerce site "prices are without vat", "you need a vat id to register", something like that. Again this would nice but since one can use a separate model that's not a showstopper.


    There's some more features for full multi tenancy listed here
    https://code.djangoproject.__com/ticket/15089#comment:36
    <https://code.djangoproject.com/ticket/15089#comment:36>

    but the above will suffice for my usage so i will not dig into it.


Broadly speaking the approach you've described in #17802 makes sense to
me - that is, find somewhere where the request is needed, and make sure
it's available. I haven't dug in to the full consequences of introducing
the request where you've put it, but the broad strokes look right.

I was on the "add the request everywhere camp" until i've seen the 15089-missing-site_id.diff patch. Lot of places have been converted to get_current_site so with the patch applied a site aware site would come for free. Let me mention that this does not change default behaviour.

Unfortunately, we're not going to rush into something here - once we add
or change an API, we need to support it, and we are committing to not
changing it - so before we make any changes, we need to make sure we're
not backing ourselves into a corner. That means solving the general
problem (or at least having an idea how we would address the general
problem), not just one small part of the problem.

The other approach that you haven't made mention of - Use a different
sites app altogether. Django's sites module isn't well designed for true
multi tenancy of the type that you're describing. However, it's also a
contrib app -- so it's entirely optional, and also replaceable. If you
have a specific set of requirements for multi tenancy, then write your
own third-party app to implement those changes, and use it.

It's entirely optional but lot of other contrib code knows about it (grep get_current_site). So using something else would be quite painful if you want to reuse other apps.

Also - Not Going to Happen. 1.7 beta has been released, so the window
for new features is closed. The best you can hope for at this point is
for inclusion in Django 1.8.

Yeah, thought about that after hitting enter :)

thanks,
riccardo

--
You received this message because you are subscribed to the Google Groups "Django 
developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/533D11F0.7030605%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to