Fortsetzung der vorherigen Sitzung. http://qiita.com/yukidallas/items/9cd0ca5cda7f459533c3
django-allauth Eine Bibliothek, die es einfach macht, soziale Anmeldungen in Ihrer Django-Anwendung zu implementieren. https://github.com/pennersr/django-allauth
Es scheint, dass es derzeit die folgenden sozialen Anmeldungen unterstützt.
Fügen Sie django-allauth zu require.txt hinzu und installieren Sie pip.
requirements.txt
django==1.11
django-allauth==0.31.0 #hinzufügen
django-extensions==1.7.8
mysqlclient==1.3.10
terminal
pip install -r requirements.txt -t libs
Fügen Sie django admin und allauth zu INSTALLED_APPS hinzu.
django-sample/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.staticfiles',
'django.contrib.sites',
'django_extensions',
'allauth',
'allauth.account'
]
AUTHENTICATION_BACKENDS = [
'allauth.account.auth_backends.AuthenticationBackend'
]
Erstellen Sie eine View-Klasse für die Registrierung / Anmeldung.
django-sample/views.py
from allauth.account import views
class SigninView(views.LoginView):
template_name = 'signin/index.html'
def dispatch(self, request, *args, **kwargs):
response = super(SigninView, self).dispatch(request, *args, **kwargs)
return response
def form_valid(self, form):
return super(SigninView, self).form_valid(form)
signin_view = SigninView.as_view()
class SignupView(views.SignupView):
template_name = 'signup/index.html'
def get_context_data(self, **kwargs):
context = super(SignupView, self).get_context_data(**kwargs)
return context
signup_view = SignupView.as_view()
Erstellen Sie die entsprechende Vorlage. Allauth hat auch eine Standardvorlage, aber ich habe sie separat vorbereitet, da sie größtenteils angepasst ist. Der Code hat kopiert, was sich in der allauth-Bibliothek befindet.
templates/signin/index.html
{% block content %}
<form method="post" action="{% url 'account_login' %}">
{% csrf_token %}
{{form.as_p}}
<button type="submit">Sign In</button>
</form>
{% endblock %}
templates/signup/index.html
{% block content %}
<form method="post" action="{% url 'account_signup' %}">
{% csrf_token %}
{{ form.as_p }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<button type="submit">Signup</button>
</form>
{% endblock %}
Routing hinzufügen.
django-sample/urls.py
urlpatterns = [
url(r'^$', views.home_view),
url(r'^auth/', include('allauth.urls')),
url(r'^signin/?$', views.signin_view),
url(r'^signup/?$', views.signup_view),
]
Greifen Sie auf [http: // localhost: 8000 / signup](http: // localhost: 8000 / signup) zu und registrieren Sie sich als Benutzer. Sie können sich unter [http: // localhost: 8000 / signin](http: // localhost: 8000 / signin) anmelden.
Da Sie sich nicht abmelden können, fügen Sie Ansicht und Routing hinzu.
django-sample/views.py
from django.shortcuts import redirect
class SignoutView(views.LogoutView):
def get(self, *args, **kwargs):
return self.post(*args, **kwargs)
def post(self, *args, **kwargs):
if self.request.user.is_authenticated():
self.logout()
return redirect('/')
signout_view = SignoutView.as_view()
django-sample/urls.py
urlpatterns = [
# {...}
url(r'^signout/?$', views.signout_view)
]
Sie können sich unter [http: // localhost: 8000 / signout](http: // localhost: 8000 / signout) abmelden.
Dieses Mal werden wir ein soziales Login auf Twitter implementieren. Bitte erstellen Sie im Voraus eine App mit Twitter-Entwicklern. Es scheint, dass Sie dies nicht tun können, ohne Ihre Telefonnummer zu registrieren. https://apps.twitter.com
Geben Sie die erforderlichen Informationen unter Neue App erstellen → Anwendungsdetails ein. Legen Sie die folgenden Werte für die Rückruf-URL fest.
callback_url
http://localhost:8000/auth/twitter/login/callback/
Wir werden Einstellungen um allauth auf der Django-Seite hinzufügen.
django-sample/settings.py
INSTALLED_APPS = [
# {...}
'allauth.socialaccount',
'allauth.socialaccount.providers.twitter'
]
Fügen Sie eine Route hinzu, um auf den Django-Administrator zuzugreifen.
django-sample/urls.py
# {...}
from django.contrib import admin
admin.autodiscover()
urlpatterns = [
# {...}
url(r'^admin/', include(admin.site.urls))
]
Erstellen Sie ein Konto, um sich beim Verwaltungsbildschirm anzumelden.
terminal
$ python manage.py createsuperuser
Gehen Sie zu [http: // localhost: 8000 / admin](http: // localhost: 8000 / admin) und melden Sie sich an.
Greifen Sie auf SOZIALKONTEN> [soziale Anwendungen](http: // localhost: 8000 / admin / socialaccount / socialapp / add /) zu und nehmen Sie verschiedene Einstellungen vor.
Melden Sie sich nach dem Speichern einmal vom Verwaltungsbildschirm ab und greifen Sie auf [http: // localhost: 8000 / auth / twitter / login /](http: // localhost: 8000 / auth / twitter / login /) zu, um zum Twitter-Linkbildschirm zu springen. Sie können sich bei SNS anmelden (registrieren).
Wenn Sie einen Link auf den Bildschirm setzen möchten, gehen Sie wie folgt vor.
templates/home/index.html
<a href="/auth/twitter/login/">Loggen Sie sich mit Twitter ein</a>
<!--Oder-->
<a href="{% url 'twitter_login' %}">Loggen Sie sich mit Twitter ein</a>
Wenn Sie die Routen wie Schienenrouten überprüfen möchten, verwenden Sie den folgenden Befehl. (django-extensions)
terminal
$ python manage.py show_urls
#Kürzung
/auth/twitter/login/ allauth.socialaccount.providers.oauth.views.view twitter_login
/auth/twitter/login/callback/ allauth.socialaccount.providers.oauth.views.view twitter_callback
Gehen Sie wie folgt vor, um zu unterscheiden, ob Sie angemeldet sind oder nicht.
templates/home/index.html
{% if user.is_authenticated %}
<p>Hallo{{ user.username }}Herr.</p>
{% else %}
<p>Bitte loggen Sie sich ein</p>
{% endif %}
Sie können das für die Anmeldung verwendete Modell frei anpassen.
terminal
$ cd ./django-sample/django-sample
$ python ../manage.py startapp accounts
django-sample/settings.py
INSTALLED_APPS = [
# {...}
'django-sample.accounts'
]
django-sample/accounts/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager
class User(AbstractUser):
objects = UserManager()
class Meta(object):
app_label = 'accounts'
django-sample/settings.py
AUTH_USER_MODEL = 'accounts.User'
Migrieren Sie die Datenbank. Wenn Sie mit migrate Moos bekommen, möchten Sie möglicherweise die Datenbank löschen und es erneut versuchen.
terminal
$ python manage.py makemigrations
$ python manage.py migrate
Ich habe die Quelle vorerst auf Github gepostet (ich habe die vorherige aktualisiert) https://github.com/yukidallas/django-sample
Recommended Posts