Системы входа в систему С открытым исходным кодом, что хорошо? [закрытый]

упомянутый комментатор exec; это то, как вы бы соединили это:

def string_to_class(python_text):
    local_vars = {}
    exec(python_text, {}, local_vars)
    # assume just a single new symbol was created (the class), and return it
    return list(local_vars.values())[0]

class_template = """
class MyClass(object):
    def __init__(self, name):
         self.name = name

    def print_name(self):
        print('My name is: ' + self.name)

    @staticmethod
    def add_whatever(a, b):
        return a + b
"""

MyClass = string_to_class(class_template)
my_class_instance = MyClass('Ben')

print(MyClass.add_whatever(2, 3))
my_class_instance.print_name()

Но, как и некоторые другие упомянутые комментаторы, это не распространенный метод, поэтому будьте осторожны с ним. Вы также столкнетесь с проблемами довольно быстро, поскольку ваш вариант использования усложняется:

some_string_that_defines_a_base_class = "case Base..."
some_string_that_defines_a_derived_class = "case Derived(Base):..."

Base = string_to_class(some_string_that_defines_a_base_class)
# this will crash because Base isn't defined in the scope that the string
# is being evaluated with
Derived = string_to_class(some_string_that_defines_a_derived_class)

Вы можете исправить это с помощью прямого вызова exec (функция string_to_class просто не достаточно мощный), но он быстро становится очень сложным в использовании: я даже не упомянул, как import будет работать. Существуют и другие приемы (декораторы функций, метаклассы), которые могут позволить вам делать то, что вы хотите сделать, и при этом требовать меньше усилий, но иногда exec действительно является вашим единственным вариантом.

11
задан Sqeaky 20 October 2008 в 10:57
поделиться

4 ответа

OpenID является определенно лучшим решением и существует много библиотек с открытым исходным кодом для всех видов языков там. Hava смотрят на openidenabled.com.

6
ответ дан 3 December 2019 в 05:36
поделиться

OpenID работает действительно хорошо. Учитывая недавнюю волну усыновлений, я думаю, что OpenID является лучшим выбором. Это является межплатформенным и имеет библиотеки для всех главных платформ разработки (php, Python, жемчуг, рубин, .NET, Java, C++). Я реализовал его для DotNetNuke и нашел, что это было относительно безболезненным.

11
ответ дан 3 December 2019 в 05:36
поделиться

Я не знаю, какие технологии (язык и платформы) Вы предпочитаете или имеете как требования, но мы реализовали CAS на моем рабочем месте, и это работало вполне прилично.

Сам CAS реализован в Java, но поскольку первая полоса говорит, она имеет клиентские библиотеки и интеграцию с многочисленными другими технологиями и pltaforms.

3
ответ дан 3 December 2019 в 05:36
поделиться

Я волновал движение с mod_auth_openid. Это супер просто и предотвращает ненужную сложность на других уровнях. но код не прекрасен, и мне, вероятно, придется скорректировать его позже.

1
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

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