Django的Twitter OAuth

借此文章进行投稿,我将尝试在Django中进行Twitter认证。

【备忘录】在pyramid上使用Twitter OAuth
http://qiita.com/maueki/items/02f001440ce409641a50

Django的默认用户认证

在Twitter认证之前,Django已经从一开始就提供了用户认证系统。首先我们来看一下这个系统。

环境准备

首先,安装Django。

$ pip install django

这次我使用的是1.10.5版本。Python版本是3.5.2。
接着创建Django项目并创建管理员用户。

$ django-admin startproject myoauth
$ cd myoauth
$ python manage.py migrate
$ python manage.py createsuperuser

接下来,我将创建一个应用程序。

$ python manage.py startapp app

你可以在settings.py的INSTALLED_APPS中添加你创建的应用程序。(同时建议你修改一下区域设置)

INSTALLED_APPS = (
    :
    'app.apps.AppConfig',
)

LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

如果您想了解更多细节,请查看官方教程:https://docs.djangoproject.com/ja/1.9/intro/tutorial01/

登录页和登出页

在urls.py文件中指定登录和登出的url和视图。这些视图已经在标准库中提供了。(这些视图采用的是MTV模式中的视图。)

import django.contrib.auth.views

urlpatterns = [
    :
    url(r'^login/$',
        django.contrib.auth.views.login,
        {
            'template_name': 'app/login.html',
        },
        name='login'),
    url(r'^logout/$',
        django.contrib.auth.views.logout,
        {
            'template_name': 'app/logout.html',
        },
        name='logout'),
]

login.html的准备大致如下。

:
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
    <td>{{ form.username.label_tag }}</td>
    <td>{{ form.username }}</td>
</tr>
<tr>
    <td>{{ form.password.label_tag }}</td>
    <td>{{ form.password }}</td>
</tr>
</table>

<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
:

在setting.py中,您需要记录登录后重定向的URL以及访问有限制页面时要跳转的URL。

LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/login/'

登录状态的检查 (Liú de

给视图加上”login_required”修饰符,这样只有在登录的情况下才能访问。如果未登录,则会重定向到在setting.py中设置的LOGIN_URL。

from django.contrib.auth.decorators import login_required

@login_required
def private(request):
    ...
urlpatterns = [
    :
    url(r'^private/$', app.views.private, name='private'),
]

除此之外,您可以使用user_passes_test装饰器,通过lambda函数对用户进行任意的检查。下面的示例限制了超级用户权限。

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def private(request):
    ...

审核推特账户

下面是一个用Twitter进行认证的尝试。

应用程序注册

作为前准备,您需要前往Twitter的开发者页面注册应用程序。
请访问以下链接:https://apps.twitter.com

    • Consumer Key

 

    Consumer Secret

这两把钥匙都是必需的。

添加OAuth库。

尽管有各种不同的选择,但这次我们选择了social-auth-app-django。除了Twitter外,Facebook和GitHub也可以同样使用。

$ pip install python-social-auth[django]

这次尝试的版本将会是1.0.0。

INSTALLED_APPS = (
    :
    'social_django',
)

TEMPLATES = [
    {
        :
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
            ],
        },
    },
]

AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
]

SOCIAL_AUTH_TWITTER_KEY = 'Consumer Key'
SOCIAL_AUTH_TWITTER_SECRET = 'Consumer Secret'

在Twitter认证按钮上,可以准备成这样子。

<button type="button" onclick="location.href='{% url 'social:begin' 'twitter' %}'">Twitter</button>
urlpatterns = [
    :
    url(r'', include('social_django.urls', namespace = 'social')),
]

我添加了一个应用程序,所以最后会进行迁移。

$ python manage.py migrate

通过这个方法,您可以进行Twitter认证。认证后,将被添加到Django的标准用户模型中,因此可以像进行标准用户认证一样进行登录状态的检查等操作。

广告
将在 10 秒后关闭
bannerAds