Пользователи Django и аутентификация из внешнего источника

В C #define гораздо популярнее. Вы можете использовать эти значения для объявления размеров массивов, например:

#define MAXLEN 5

void foo(void) {
   int bar[MAXLEN];
}

ANSI C не позволяет вам использовать static const в этом контексте, насколько я знаю. В C ++ вы должны избегать макросов в этих случаях. Вы можете написать

const int maxlen = 5;

void foo() {
   int bar[maxlen];
}

и даже пропустить static, поскольку внутренняя связь уже подразумевается const [только в C ++].

22
задан Peter Mortensen 11 April 2010 в 17:26
поделиться

2 ответа

Хорошо, это намного сложнее, чем я думал. Во-первых, начните с http://docs.djangoproject.com/en/dev/howto/auth-remote-user/ , но вам нужно будет расширить его с помощью собственной серверной части и пользователя.

from django.contrib.auth.backends import RemoteUserBackend

class MyRemoteUserBackend (RemoteUserBackend):
    # Create a User object if not already in the database?
    create_unknown_user = False

    def get_user (self, user_id):
        user = somehow_create_an_instance_of (MyUser, user_id)
        return user

    def authenticate (self, **credentials):
        check_credentials ()
        user = somehow_create_an_instance_of (MyUser, credentials)
        return user

Затем пользователь:

from django.contrib.auth.models import User

class MyUser (User):

    def save (self):
        """saving to DB disabled"""
        pass

    objects = None # we cannot really use this w/o local DB

    username = ""  # and all the other properties likewise.
                   # They're defined as model.CharField or similar,
                   # and we can't allow that

    def get_group_permissions (self):
        """If you don't make your own permissions module,
           the default also will use the DB. Throw it away"""
        return [] # likewise with the other permission defs

    def get_and_delete_messages (self):
        """Messages are stored in the DB. Darn!"""
        return []

Уф! Django действительно не предназначен для использования без базы данных ...

25
ответ дан 29 November 2019 в 05:16
поделиться

grep ping источник показал, что единственное место user. save () фактически вызывается (за исключением кода для создания пользователей и управления паролями, который вам вообще не нужно использовать): django.contrib.auth.login () , для обновления user.last_login value.

# TODO: It would be nice to support different login methods, like signed cookies.
user.last_login = datetime.datetime.now()
user.save()

Если вы не хотите, чтобы пользовательские данные оставались в базе данных, попробуйте добавить фиктивный метод save () . Если я прав, это должно сработать.

def save(self, *args, **kwargs):
    pass

Конечно, поскольку у вас вообще нет персистентности, вам следует подумать о кешировании результатов datasource.get , иначе в худшем случае вы можете снова запросить данные и снова при каждом обращении пользователя, вошедшего в систему.

Чтобы данные пользователя оставались в базе данных, попробуйте добавить фиктивный метод save () . Если я прав, это должно сработать.

def save(self, *args, **kwargs):
    pass

Конечно, поскольку у вас вообще нет персистентности, вам следует подумать о кешировании результатов datasource.get , иначе в худшем случае вы можете снова запросить данные и снова при каждом обращении пользователя, вошедшего в систему.

Чтобы данные пользователя оставались в базе данных, попробуйте добавить фиктивный метод save () . Если я прав, это должно сработать.

def save(self, *args, **kwargs):
    pass

Конечно, поскольку у вас вообще нет персистентности, вам следует подумать о кешировании результатов datasource.get , иначе в худшем случае вы можете снова запросить данные и снова при каждом обращении пользователя, вошедшего в систему.

2
ответ дан 29 November 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: