{ "info": { "author": "Vladimir Garvardt", "author_email": "vgarvardt@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "==============\nDjango Loginza\n==============\n\nDjango-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 Loginza (loginza.ru)\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n=========\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ``pip``::\n\n $ pip install django-loginza\n\n\u0418\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 ``project_name/requirements.txt``::\n\n django-loginza\n\n\u0410 \u0437\u0430\u0442\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 ``pip``::\n\n $ pip install -r project_name/requirements.txt\n\n\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 `\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 GitHub`__.\n\n\u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \n``django.contrib.auth``, ``django.contrib.sessions`` \u0438 ``django.contrib.sites``.\n\n\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 ``loginza`` \u0432 ``INSTALLED_APPS`` \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u044d\u043a\u044d\u043d\u0434 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 -\n``loginza.authentication.LoginzaBackend`` \u0432 ``AUTHENTICATION_BACKENDS``. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0431\u044d\u043a\u044d\u043d\u0434\u044b\n\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e, \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a::\n\n AUTHENTICATION_BACKENDS = (\n 'django.contrib.auth.backends.ModelBackend',\n 'loginza.authentication.LoginzaBackend',\n )\n\n\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u043b\u043e\u0433\u0438\u043d\u0443 \u0438 \u043f\u0430\u0440\u043e\u043b\u044e\n(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \u0430\u0434\u043c\u0438\u043d\u0441\u043a\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c), \u0442\u0430\u043a \u0438 loginza-\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e.\n\n\u0422\u0430\u043a\u0436\u0435, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 ``TEMPLATE_CONTEXT_PROCESSORS`` \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \n``django.core.context_processors.request``.\n\n\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0411\u0414 (\u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\n``python manage.py syncdb`` \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430).\n\n\u0414\u0430\u043b\u0435\u0435, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435,\n\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 ``urlpatterns`` \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 ``urls.py``::\n\n (r'^loginza/', include('loginza.urls')),\n\n\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 loginza \u0432\u0430\u0441 \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u043e \u043d\u0435 \u043f\u043e\u0439\u043c\u0438 \u043a\u0443\u0434\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, example.com) -\n\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435, \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d.\n\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\n=============\n\n\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0442\u0440\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445:\n\n- \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0438, \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\n- \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\n- \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\n\n\u042d\u0442\u043e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435.\n\n\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0438\n==============\n\n\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u044d\u0433\u0438::\n\n {% load loginza_widget %}\n\n\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0433\u0438:\n\n- ``loginza_iframe`` - \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 Loginza (\u0441\u043f\u0430\u0440\u0435\u043d\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438)\n- ``loginza_button`` - \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 Loginza\n- ``loginza_icons`` - \u043d\u0430\u0431\u043e\u0440 \u0438\u043a\u043e\u043d\u043e\u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432\n- ``loginza_string`` - \u0441\u0442\u0440\u043e\u043a\u0430 (\u0441\u0441\u044b\u043b\u043a\u0430)\n\n\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\n`\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Loginza \u0432 \u0444\u043e\u0440\u043c\u0443 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u0439\u0442\u0430`__.\n\n\u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u044d\u0433\u043e\u0432, \u043a\u0440\u043e\u043c\u0435 ``loginza_iframe`` \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 caption.\n\u0414\u043b\u044f ``loginza_button`` \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 ``alt`` \u0438 ``title`` \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438,\n\u0434\u043b\u044f ``loginza_icons`` - \u0442\u0435\u043a\u0441\u0442, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0438\u043a\u043e\u043d\u043e\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, *\u0412\u043e\u0439\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f:*),\n\u0434\u043b\u044f ``loginza_string`` - \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u0430 \u0441\u0442\u0440\u043e\u043a\u0430.\n\n\u0422\u0430\u043a \u0436\u0435, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:\n\n- ``lang`` - \u044f\u0437\u044b\u043a \u0432\u0438\u0434\u0436\u0435\u0442\u0430\n- ``providers_set`` - \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432\n- ``provider`` - \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440::\n\n {% loginza_iframe providers_set=\"google,facebook,twitter\" lang=\"en\" %}\n\n\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0431 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 `\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e Loginza.API`__.\n\n\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f ``loginza_iframe`` \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ``width`` \u0438 ``height``,\n\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 359 x 300 px).\n\n\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0448\u0430\u0431\u043b\u043e\u043d, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c::\n\n {% load loginza_widget %}\n {% if user.is_authenticated %}\n \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, {{ user }}\n {% else %}\n {% loginza_button \"\u0412\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 Loginza\" %}\n {% endif %}\n\n\u0421\u0438\u0433\u043d\u0430\u043b\u044b\n=======\n\n\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b:\n\n- ``created`` - \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0432\u044f\u0437\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c Loginza \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c Django\n- ``error`` - \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\n- ``authenticated`` - \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d (authenticated) \u0438 \u0433\u043e\u0442\u043e\u0432 \u0431\u044b\u0442\u044c \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0435\u043d\n- ``login_required`` - \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 login_required \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\n\n\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u0445 \u0438 \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c \u0432 ``signals.py``\n\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\n\n\u041f\u0440\u0438\u043c\u0435\u0440 ``views.py`` \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f ``users``, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f ``loginza``::\n\n # -*- coding:utf-8 -*-\n from django import http\n from django.contrib import messages, auth\n from django.shortcuts import redirect, render_to_response\n from django.core.urlresolvers import reverse\n from django.template.context import RequestContext\n\n from .forms import CompleteReg\n\n from loginza import signals, models\n from loginza.templatetags.loginza_widget import _return_path\n\n\n def loginza_error_handler(sender, error, **kwargs):\n messages.error(sender, error.message)\n\n signals.error.connect(loginza_error_handler)\n\n def loginza_auth_handler(sender, user, identity, **kwargs):\n try:\n # it's enough to have single identity verified to treat user as verified\n models.UserMap.objects.get(user=user, verified=True)\n auth.login(sender, user)\n except models.UserMap.DoesNotExist:\n sender.session['users_complete_reg_id'] = identity.id\n return redirect(reverse('users.views.complete_registration'))\n\n signals.authenticated.connect(loginza_auth_handler)\n\n def loginza_login_required(sender, **kwargs):\n messages.warning(sender, u'\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c.')\n\n signals.login_required.connect(loginza_login_required)\n\n\n def complete_registration(request):\n if request.user.is_authenticated():\n return http.HttpResponseForbidden(u'\u0412\u044b \u043f\u043e\u043f\u0430\u043b\u0438 \u0441\u044e\u0434\u0430 \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0435')\n try:\n identity_id = request.session.get('users_complete_reg_id', None)\n user_map = models.UserMap.objects.get(identity__id=identity_id)\n except models.UserMap.DoesNotExist:\n return http.HttpResponseForbidden(u'\u0412\u044b \u043f\u043e\u043f\u0430\u043b\u0438 \u0441\u044e\u0434\u0430 \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0435')\n if request.method == 'POST':\n form = CompleteReg(user_map.user.id, request.POST)\n if form.is_valid():\n user_map.user.username = form.cleaned_data['username']\n user_map.user.email = form.cleaned_data['email']\n user_map.user.save()\n\n user_map.verified = True\n user_map.save()\n\n user = auth.authenticate(user_map=user_map)\n auth.login(request, user)\n\n messages.info(request, u'\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c!')\n del request.session['users_complete_reg_id']\n return redirect(_return_path(request))\n else:\n form = CompleteReg(user_map.user.id, initial={\n 'username': user_map.user.username, 'email': user_map.user.email,\n })\n\n return render_to_response('users/complete_reg.html',\n {'form': form},\n context_instance=RequestContext(request),\n )\n\n\u041f\u0440\u0438\u043c\u0435\u0440 ``forms.py`` \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f ``users``::\n\n # -*- coding:utf-8 -*-\n from django import forms\n try:\n from django.contrib.auth import get_user_model\n except ImportError: # django < 1.5\n from django.contrib.auth.models import User\n else:\n User = get_user_model()\n\n\n class CompleteReg(forms.Form):\n\n username = forms.RegexField(label=u'\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f', max_length=30, min_length=4, \n required=True, regex=r'^[\\w.@+-]+$') \n email = forms.EmailField(label=u'Email', required=True) \n\n\n def __init__(self, user_id, *args, **kwargs):\n super(CompleteReg, self).__init__(*args, **kwargs)\n self.user_id = user_id\n\n def clean_username(self):\n if self.cleaned_data['username']:\n try: u = User.objects.exclude(id=self.user_id).get(username=self.cleaned_data['username'])\n # if username is unique - it's ok\n except User.DoesNotExist: u = None\n\n if u is not None:\n raise forms.ValidationError(u'\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d')\n return self.cleaned_data['username']\n\n def clean_email(self):\n if self.cleaned_data['email']:\n try: u = User.objects.exclude(id=self.user_id).get(email=self.cleaned_data['email'])\n # if email is unique - it's ok\n except User.DoesNotExist: u = None\n\n if u is not None:\n raise forms.ValidationError(u'\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u044d\u0442\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d')\n return self.cleaned_data['email']\n\n\u041f\u0440\u0438\u043c\u0435\u0440 ``urls.py`` \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f ``users``::\n\n from django.conf.urls.defaults import *\n\n from .views import complete_registration\n\n\n urlpatterns = patterns('',\n url(r'^complete_registration/$', complete_registration, name='users_complete_registration'),\n url(r'^logout/$', 'django.contrib.auth.views.logout', name='users_logout'),\n )\n\n\n\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u0430\u043a \u0436\u0435 \u0432 ``settings.py`` \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c\n\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 *\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438*)::\n\n # can't use reverse url resolver here (raises ImportError),\n # so we should carefully control paths\n LOGINZA_AMNESIA_PATHS = ('/users/complete_registration/',)\n\n\u0422\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 ``users`` \u0432 ``INSTALLED_APPS``, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432 ``urls.py`` \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \n\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435::\n\n url(r'^users/', include('users.urls')),\n\n\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\n=========\n\n\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:\n\n- ``LOGINZA_DEFAULT_LANGUAGE`` - \u044f\u0437\u044b\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ``lang`` \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u044f\u0432\u043d\u043e.\n \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 ``LANGUAGE_CODE`` \u043f\u0440\u043e\u0435\u043a\u0442\u0430.\n- ``LOGINZA_DEFAULT_PROVIDERS_SET`` - \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e,\n \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ``providers_set`` \u043d\u0435 \u0437\u0430\u0434\u0430\u043d. \u0424\u043e\u0440\u043c\u0430\u0442 - \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e,\n \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 'facebook,twitter,google'. ``None`` - \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b.\n- ``LOGINZA_DEFAULT_PROVIDER`` - \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e,\n \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ``provider`` \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u044f\u0432\u043d\u043e. ``None`` - \u043d\u0435 \u0437\u0430\u0434\u0430\u043d.\n- ``LOGINZA_ICONS_PROVIDERS`` - \u0438\u043a\u043e\u043d\u043a\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c loginza_icons,\n \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 `providers_set`` \u043d\u0435 \u0437\u0430\u0434\u0430\u043d \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u044f\u0432\u043d\u043e \u0438\n \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ``LOGINZA_DEFAULT_PROVIDERS_SET`` \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u0430. \u0424\u043e\u0440\u043c\u0430\u0442 - \u0438\u043c\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e,\n \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 'facebook,twitter,google'.\n- ``LOGINZA_PROVIDER_TITLES`` - \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u0438\u0434\u0436\u0435\u0442\u0430\n ``loginza_icons``. \u0424\u043e\u0440\u043c\u0430\u0442 - \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 - \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440\n {'google': u'\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u0431\u0440\u0430', 'twitter': u'\u0429\u0435\u0431\u0435\u0442\u0430\u043b\u044c\u043d\u044f', 'vkontakte': u'\u0412\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0438\u043a'}\n- ``LOGINZA_DEFAULT_EMAIL`` - \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435,\n \u0435\u0441\u043b\u0438 Loginza \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0430, \u0442\u0430\u043a\u043e\u0432\u043e\u0439. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - 'user@loginza'. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442\n \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u0441\u043b\u0435\u0432\u0430 \u043e\u0442 @) \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\n \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.\n- ``LOGINZA_AMNESIA_PATHS`` - \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043b\u0438 \u043a\u043e\u0440\u0442\u0435\u0436 \u043f\u0443\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430.\n \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u0442\u043e\u0433\u043e,\n \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u044b\u043b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c,\n \u0430 \u043d\u0435 \u043d\u0430 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438.\n- ``LOGINZA_BUTTON_IMG_URL`` - \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u041a\u043d\u043e\u043f\u043a\u0430. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\n \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0430\u0439\u0442\u0430 loginza.ru.\n- ``LOGINZA_ICONS_IMG_URLS`` - \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f\n \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0418\u043a\u043e\u043d\u043a\u0438. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0441 \u0441\u0430\u0439\u0442\u0430 loginza.ru.\n- ``LOGINZA_IFRAME_WIDTH`` - \u0448\u0438\u0440\u0438\u043d\u0430 \u0432\u0441\u0442\u0440\u0430\u0435\u0432\u043e\u043c\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u0441\u0442\u0440\u043e\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0432\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0441\u0442\u044c,\n \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 359px).\n- ``LOGINZA_IFRAME_HEIGHT`` - \u0432\u044b\u0441\u043e\u0442\u0430 \u0432\u0441\u0442\u0440\u0430\u0435\u0432\u043e\u043c\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u0441\u0442\u0440\u043e\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0432\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0441\u0442\u044c,\n \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 300px).\n- ``LOGINZA_WIDGET_ID`` - ID \u0432\u0438\u0434\u0436\u0435\u0442\u0430 Loginza (\u0441\u043c. \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 `\u041c\u043e\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 Loginza`__).\n- ``LOGINZA_API_SIGNATURE`` - \u0421\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 Loginza.\n\n\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438\n==========================\n\n\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 ``@login_required``. \u041e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430\n``django.contrib.auth.decorators.login_required`` \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0435\n\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.\n\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0441\u0430\u0439\u0442\u0430\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e Loginza-\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443\n\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u0422\u0430\u043a \u0436\u0435, \u043f\u0440\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b\n``loginza.signals.login_required``, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432\u0448\u0438\u0441\u044c \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\n\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (\u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435), \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 HttpRespose,\n\u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435, \u043e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.\n\n:\u0410\u0432\u0442\u043e\u0440: \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0413\u0430\u0440\u0432\u0430\u0440\u0434\u0442\n:\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438: \u0418\u0432\u0430\u043d\u0443 \u0421\u0430\u0433\u0430\u043b\u0430\u0435\u0432\u0443, \u042e\u0440\u0438\u044e \u042e\u0440\u0435\u0432\u0438\u0447\u0443, \u0414\u0435\u043d\u0438\u0441\u0443 \u0412\u0435\u0441\u0435\u043b\u043e\u0432\u0443\n\n__ https://github.com/vgarvardt/django-loginza\n__ http://loginza.ru/signin-integration\n__ http://loginza.ru/api-overview\n__ http://loginza.ru/my-widgets\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/vgarvardt/django-loginza", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "django-loginza", "package_url": "https://pypi.org/project/django-loginza/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-loginza/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/vgarvardt/django-loginza" }, "release_url": "https://pypi.org/project/django-loginza/0.3.9/", "requires_dist": null, "requires_python": null, "summary": "Django application for Loginza service", "version": "0.3.9" }, "last_serial": 1234154, "releases": { "0.3.3": [ { "comment_text": "", "digests": { "md5": "81e1dc8df74a78a3008c2d9e1c0167c9", "sha256": "bef16616d740bd92b387874fbb5ed994e66c39c8124c28fb099fa1b3b5d1e1d0" }, "downloads": -1, "filename": "django-loginza-0.3.3.tar.gz", "has_sig": false, "md5_digest": "81e1dc8df74a78a3008c2d9e1c0167c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8385, "upload_time": "2011-11-15T20:47:02", "url": "https://files.pythonhosted.org/packages/5f/15/536e942f8ed2c74a118a7bca688613e258e990e9bac2368604b9fd8fbc89/django-loginza-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "61eb3ec5b06ce1794199ca38fc57cb1a", "sha256": "7fa7fa258eecc81101055c98e955abbbcdf054bbc9fc94dca1ffe59dc2f4cc7c" }, "downloads": -1, "filename": "django-loginza-0.3.4.tar.gz", "has_sig": false, "md5_digest": "61eb3ec5b06ce1794199ca38fc57cb1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8787, "upload_time": "2011-11-15T21:20:56", "url": "https://files.pythonhosted.org/packages/06/8f/26c17e0034de116d2ccefc8b9e62bde92529aca1cac99adbd6f9ac305c79/django-loginza-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "47ef501278c72fdc09069962c09a4edd", "sha256": "6ea421923f7021ba850b1c9e2e1ea82ff4f16bdf0d0c04823353aff9ebb09fd5" }, "downloads": -1, "filename": "django-loginza-0.3.5.tar.gz", "has_sig": false, "md5_digest": "47ef501278c72fdc09069962c09a4edd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8806, "upload_time": "2011-11-16T19:20:02", "url": "https://files.pythonhosted.org/packages/69/dd/d287a13b30cf14f4bb65a8e5bf9f41bcb393b47fcbe6d0115f00da8b8403/django-loginza-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "5efa3a5f2a32a97eda2b28c0c55fee8c", "sha256": "1491eaf74aebe220559514e4e70c7c7ca23ee3110a0f11fd1c3ed094b8b1bbd5" }, "downloads": -1, "filename": "django-loginza-0.3.6.tar.gz", "has_sig": false, "md5_digest": "5efa3a5f2a32a97eda2b28c0c55fee8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14189, "upload_time": "2012-12-08T20:17:29", "url": "https://files.pythonhosted.org/packages/6e/c6/7234476e7a1b4af0a2834dce2deb6a0dd874d49d7626695211326091ca8a/django-loginza-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "94ee6e6351b5d9e4c3bb0b5ee083c855", "sha256": "185587b5645b19f227ad9a85b462e2c29ef8c7e3ffc69d31a8ab80bd00c3a5d2" }, "downloads": -1, "filename": "django-loginza-0.3.7.tar.gz", "has_sig": false, "md5_digest": "94ee6e6351b5d9e4c3bb0b5ee083c855", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14211, "upload_time": "2012-12-08T20:19:30", "url": "https://files.pythonhosted.org/packages/b3/00/7c17310c5f40350e66ec53a4b8be2f4dfb9be1d1035a5af7792462e18f2d/django-loginza-0.3.7.tar.gz" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "a96972aeea94664a4a60da2872abfdef", "sha256": "8c2473540e44f0d7105acb06342493ebe7604a7233c171cdd0761234c32784bb" }, "downloads": -1, "filename": "django-loginza-0.3.8.tar.gz", "has_sig": false, "md5_digest": "a96972aeea94664a4a60da2872abfdef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14246, "upload_time": "2012-12-10T20:12:40", "url": "https://files.pythonhosted.org/packages/46/51/4d1edaafe773d027ed653d4c424fcf2546ee094fea62ed10bf5e57613fa8/django-loginza-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "bf950ddaa4e5eab6a924634c814f2bd6", "sha256": "631c7ae98b1f9212d52ec9d5d6898333a76249a8bf7c4f9b208afdabc83cff2f" }, "downloads": -1, "filename": "django-loginza-0.3.9.tar.gz", "has_sig": false, "md5_digest": "bf950ddaa4e5eab6a924634c814f2bd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14125, "upload_time": "2014-09-23T00:21:55", "url": "https://files.pythonhosted.org/packages/d3/93/3b21eef5a28d335dcdd1a9a693608924a32ee01082400292357332455ad6/django-loginza-0.3.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bf950ddaa4e5eab6a924634c814f2bd6", "sha256": "631c7ae98b1f9212d52ec9d5d6898333a76249a8bf7c4f9b208afdabc83cff2f" }, "downloads": -1, "filename": "django-loginza-0.3.9.tar.gz", "has_sig": false, "md5_digest": "bf950ddaa4e5eab6a924634c814f2bd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14125, "upload_time": "2014-09-23T00:21:55", "url": "https://files.pythonhosted.org/packages/d3/93/3b21eef5a28d335dcdd1a9a693608924a32ee01082400292357332455ad6/django-loginza-0.3.9.tar.gz" } ] }