[PYTHON] Implementieren Sie die Anmeldefunktion mit django-allauth

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.

Installation

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

Registrieren Sie sich mit Ihrer E-Mail-Adresse

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.

SNS-Login mit Twitter-Account

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 %}

Bonus

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

Schließlich

Ich habe die Quelle vorerst auf Github gepostet (ich habe die vorherige aktualisiert) https://github.com/yukidallas/django-sample

Recommended Posts

Implementieren Sie die Anmeldefunktion mit django-allauth
Implementieren Sie eine große Stempelfunktion mit Discord BOT
Implementieren Sie FReLU mit tf.keras
Twitter-Posting-Client mit Flask mit einfacher Anmeldefunktion
Versuchen Sie die Funktionsoptimierung mit Optuna
Implementieren Sie Unterbefehle mit Pythons Argparse
Ungefähre Sinusfunktion mit TensorFlow
Implementiere die Timer-Funktion im Pygame
Implementieren Sie PyTorch + GPU mit Docker
[Qt Designer] Implementieren Sie WebView mit PyQt5
Einfache Proxy-Anmeldung mit Django-Hijack
Zura mit Softmax-Funktion implementiert
Implementieren Sie eine Blockchain mit ca. 60 Zeilen
Melden Sie sich mit dem Django Rest Framework an
[python3] Implementieren Sie die Debug-Protokollausgabefunktion einfach mit Protokollierung und Klicken
[LINE-Anmeldung] Überprüfen Sie den Status mit Flask
Implementieren Sie die Funktion power.prop.test von R in Python
Richten Sie mit Django ein soziales Login ein
Funktionsparameter nur für Stern '*'
Mehrschichtiges Perzeptron mit Kette: Funktionsanpassung
Implementieren Sie einfach Unterbefehle mit Python-Klick
Implementierung der Login-Funktion in Django
Einvariable Funktionsnäherung mit vierschichtigem DNN
Implementieren Sie Keras LSTM Feed Forward mit Numpy
Melden Sie sich mit PycURL an und erhalten Sie eine Antwort
Verwenden Sie die Funktion MULTI_ORG mit re: dash
Implementieren Sie "Data Visualization Design # 2" mit matplotlib
Bild-Upload-Funktion mit Vue.js + Flask