[PYTHON] Implementieren Sie die Follow-Funktion in Django

Erste Stufe

Django hat eine Follow-Funktion implementiert, die für SNS-Apps fast unverzichtbar ist. Es wird eine Selbstimplementierung sein, die die Bibliothek nicht verwendet. Passen Sie es an Ihre Bedürfnisse und Anforderungen an.

Entwicklungsumgebung

Besondere Anforderungen für die Verfolgungsfunktion

Die Liste der Follower wird hier weggelassen. Implementieren Sie die minimal erforderlichen funktionalen Anforderungen.

Tischgestaltung

Es gibt eine Möglichkeit, nur eine Tabelle zu erstellen, aber ich persönlich habe den Eindruck, dass die SQL-Anweisung redundant wird und es schwierig ist, die Tabelle zu verwalten. Deshalb werde ich diesmal zwei vorbereiten.

** follow_relation table **

Daten Zu speichernde Informationen Datentyp
user_id Benutzer-ID des Followers UUID
followed_id Benutzer-ID der Person, der gefolgt wird UUID

** follow_count Tabelle **

Daten Zu speichernde Informationen Daten型
user_id Benutzeridentifikation UUID
follow Anzahl der Follower INT
followed Nummer wird verfolgt INT

Die Tabelle "follow_relation" verwaltet den Verfolgungsstatus zwischen Benutzern, und die Tabelle "follow_count" verwaltet die Anzahl der Follower und Follower von Benutzern.

Views.py bearbeiten

Lassen Sie uns die Follow-Funktion implementieren, sobald die Tabelle erstellt wurde. Der allgemeine Ablauf der Verfolgungsfunktion ist wie folgt.

Seitenanfrage
↓
followd_Überprüfen und Anzeigen des Folgestatus mit Statusfunktion
↓
Drücken Sie die Follow-Taste
↓
Die folgende Funktion wird gemäß dem Verfolgungsstatus verarbeitet
↓
Zur Originalseite zurückkehren

Dann wird es der folgende Code.

followed_Statusfunktion


@login_required
def followed_status(request, accesskey):
    #Kürzung
    #Holen Sie sich die Parameter, die Sie benötigen

    #Verbindung zur Datenbank herstellen
    connection = MySQLdb.connect(
    host='localhost',
    user='***',
    passwd='***',
    db='***',
    charset="utf8"
    )  

    #Holen Sie sich den Cursor
    cursor = connection.cursor() 

    #Reihe von Abfragen
    follow_relation = "SELECT COUNT(*) FROM follow_relation where user_id = UUID_TO_BIN(%s) and followed_id = UUID_TO_BIN(%s);"

    #Abfrage ausführen
    # user_id、followed_Holen Sie sich ID selbst
    cursor.execute(follow_relation, (user_id, followed_id))
    row_follow = cursor.fetchone()
    follows = row_follow[0]

    #Stellen Sie fest, ob der Anmeldebenutzer und der Seitenbenutzer dieselbe Person sind
    #Stellen Sie sicher, dass Sie nicht derselben Person folgen können
    if followed_id == user_id:
        followed_status_code = 1
    else:
        followed_status_code = 2

    #True, wenn folgt größer als 0 ist
    #Gibt False zurück, wenn Folgendes 0 ist
    followed = False
    if follows > 0 :
        followed = True
 
    return followed_status_code, followed

Bitte ziehen Sie die erforderlichen Parameter aus Ihrer eigenen Tabelle heraus. Alles, was Sie diesmal brauchen, ist die ID des Followers und des Followers. Die Seite, der "user_id" folgt, und die Seite, die "follow_id" folgt.

--Match User IDs

Geben Sie einen Statuscode ein, um festzustellen, ob es sich um dieselbe Person handelt.

Wenn follow_status_code = 1, dann können Sie selbst (nicht folgen) Wenn follow_status_code = 2, andere (Sie können folgen)

Wird sein.

--Überprüfen Sie den Verfolgungsstatus

Überprüfen Sie den Verfolgungsstatus mit True und False.

Wenn es "Falsch" ist, habe ich es noch nicht befolgt Wenn "True", folgen Sie bereits

Wird sein. Schauen wir uns nun die folgende Funktion an.

folgt Funktion


@login_required
def followes(request, accesskey):
    #Kürzung
    #Holen Sie sich die Parameter, die Sie benötigen

    #Verbindung zur Datenbank herstellen
    connection = MySQLdb.connect(
    host='localhost',
    user='***',
    passwd='***',
    db='***',
    charset="utf8"
    )  

    #Holen Sie sich den Cursor
    cursor = connection.cursor()

    #Bitte stellen Sie eine allgemeine Abfrage
    #Hier erhalten Sie die Informationen, die Sie benötigen

    #Verhindern Sie, dass Sie folgen
    if user_id == followed_id:
        followed = False
        #Speichern Sie den Follow-Status in der Sitzung
        request.session['page_followed_status'] = followed
    else:
        if followed == False:
            #Es wird der Prozess sein, wenn Sie folgen
            #Reihe von Abfragen
            #Fügen Sie eine neue Verfolgungsbeziehung ein
            follow_reation = "INSERT INTO follow_relation (user_id, followed_id) values(UUID_TO_BIN(%s), UUID_TO_BIN(%s));"

            #Erhöhen Sie die Anzahl der Follower um eins
            follow_update = "UPDATE follow_count SET follow = follow + 1 where user_id=UUID_TO_BIN(%s);"  

            #Erhöhen Sie die Anzahl der Follower des Benutzers, denen einer folgt
            followed_update = "UPDATE follow_count SET followed = followed + 1 where user_id=UUID_TO_BIN(%s);"

            #Abfrage ausführen
            cursor.execute(follow_relation, (user_id, followed_id))

            cursor.execute(follow_update, (user_id, ))

            cursor.execute(followed_update, (followed_id, ))

            #Schließen Sie die Verbindung
            cursor.close()
            connection.commit()
            connection.close() 

            #Lass es folgen
            followed = True
            request.session['page_followed_status'] = followed

        else:
            #Es wird der Prozess sein, wenn es nicht folgt
            #Reihe von Abfragen
            #Follow-Beziehung löschen
            follow_relation = "DELETE FROM follow_relation where user_id=UUID_TO_BIN(%s) and followed_id = UUID_TO_BIN(%s);"

            #Reduzieren Sie die Anzahl der nicht verfolgten Benutzer um eins
            follow_update = "UPDATE follow_count SET follow = follow - 1 where user_id=UUID_TO_BIN(%s);"

            #Reduzieren Sie die Anzahl der Follower nicht folgender Seitenbenutzer um eins
            followed_update = "UPDATE follow_count SET followed = followed - 1 where user_id=UUID_TO_BIN(%s);"

            #Abfrage ausführen
            cursor.execute(sql_followrelation_delete, (user_id, followed_id))

            cursor.execute(sql_follow_update, (user_id, ))

            cursor.execute(sql_followed_update, (followed_id, ))

            #Schließen Sie die Verbindung
            cursor.close()
            connection.commit()
            connection.close() 

            #Mach es unbeaufsichtigt
            followed = False
            request.session['page_followed_status'] = followed

    return redirect('Originalseite', accesskey)

Dies ist die eigentliche Verarbeitung der Verzweigung mit einer if-Anweisung und der folgenden oder nicht folgenden. Und schließlich wird der Verfolgungsstatus umgeschaltet. Weiter zur Originalseite und fertig. (Diesmal erfolgt ein Seitenübergang, da Ajax usw. nicht verwendet werden.)

Bearbeiten Sie abschließend die Ansicht für die Anzeige.

Ergebnisfunktion


@login_required
def result(request, accesskey):

    #Kürzung

    #Verstehe den Status von Folgen
    status = followed_status(request, accesskey)
    followed_status_code = status[0]
    followed = status[1]
    #Follow-Status in Sitzung speichern (temporär)
    request.session['page_followed_status'] = followed

    params = {
        #Kürzung

        'page_followed_status': followed,
        'page_followed_status_code': followed_status_code,
    }
    return render(request, 'result.html', params)

Es werden nur die relevanten Teile aufgelistet. Wir überprüfen den Verfolgungsstatus, indem wir die Funktion follow_status aufrufen. (Die Funktion "follow_status" gibt den Statuscode und den Follow-Status zurück.) Und ich speichere es vorübergehend in der Sitzung.

Bearbeiten von urls.py

urls.py


urlpatterns = [
    #Kürzung
    path('Originalseite', views.pages, name='Stellen Sie selbst ein'),
    path('Originalseite/follow/', views.follows, name="follows"),
    #Kürzung
]

Vorlage bearbeiten

Schließlich gibt es eine Vorlage.

result.html


            <!--Schaltfläche "Folgen" hinzufügen-->
            {% if page_followed_status_code is 2 %}
                {% if page_followed_status is False %}
                <p><a href="{% url 'follows' page_accesskey %}">Folgen</a></p>
                {% else %}
                <p><a href="{% url 'follows' page_accesskey %}">Hör auf zu folgen</a></p>
                {% endif %}
            {% endif %}

Es wird nur angezeigt, wenn der Statuscode 2 ist (wenn er sich zwischen anderen befindet, nicht zwischen Ihnen).

Wenn der Follow-Status "False" ist, wird er als "Follow" angezeigt, und wenn er "True" ist, wird er als "Stop" angezeigt.

Wenn der Link gedrückt wird, wird die folgende Funktion am Seitenziel aufgerufen, der Verfolgungsvorgang wird ausgeführt und die Seite wird auf die ursprüngliche Seite umgeleitet.

Schließlich

Bitte ändern Sie den Code und verwenden Sie ihn auf Ihre eigene Weise. Die "Like-Funktion" kann auf die gleiche Weise implementiert werden!

Recommended Posts

Implementieren Sie die Follow-Funktion in Django
So implementieren Sie Rails-Helfer-ähnliche Funktionen in Django
Implementieren Sie die JWT-Anmeldefunktion im Django REST-Framework
Modell in Django
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Form in Django
Implementieren Sie XENO mit Python
Modelländerungen in Django
Implementieren Sie sum in Python
Implementieren Sie Traceroute in Python 3
Implementieren Sie hierarchische URLs mit drf-verschachtelten Routern im Django REST-Framework
Implementieren Sie LSTM AutoEncoder mit Keras
Leistungsoptimierung in Django 3.xx.
PHP var_dump-like in Django-Vorlage
Behandeln Sie Konstanten in Django-Vorlagen
Benennen Sie Tabellenspalten in Django3 um
Implementiere die Timer-Funktion im Pygame
Implementieren Sie Style Transfer mit Pytorch
Implementieren Sie den rekursiven Abschluss in Go
Ausgabe der Tabellenstruktur in Django
Implementieren Sie Naive Bayes in Python 3.3
Implementieren Sie UnionFind (gleichwertig) in 10 Zeilen
Implementieren Sie alte Chiffren in Python
Implementieren Sie Redis Mutex in Python
Implementieren Sie die Erweiterung in Python
Implementieren Sie schnelles RPC in Python
(Hinweis) Django in Vagrant-Umgebung
Implementieren Sie den Dijkstra-Algorithmus in Python
Implementieren Sie den Slack Chat Bot in Python
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
Zeigen Sie Django ManyToManyField in der Vorlage
Implementieren Sie den Gaußschen Prozess in Pyro
Implementieren Sie eine Schaltfläche zum Hinzufügen eines Formulars im Django-Inline-Formularsatz
Implementierung der JWT-Authentifizierungsfunktion in Django REST Framework mit djoser
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Laden Sie die Django-Shell mit ipython neu
Implementieren Sie einen tabellengesteuerten Test in Java
Implementieren Sie die Funktion power.prop.test von R in Python
Legen Sie Platzhalter in Eingabefeldern in Django fest
8 häufig verwendete Befehle in Python Django
Fügen Sie in Django dynamisch Formularfelder hinzu
Fehler im Zusammenhang mit Memcached in Django
Implementierung der Login-Funktion in Django
Registrieren Sie die Django-Anwendung im Projekt
Implementieren Sie einen Datumssetzer in Tkinter
Implementieren Sie das Singleton-Muster in Python
Implementieren Sie die Django-App auf Hy
Schreiben Sie externe Schlüsseleinschränkungen in Django
Wie man CSS in Django reflektiert
Wechseln Sie die in Django 1.9 angezeigte Sprache
Implementieren Sie die REST-API schnell in Python
Stellen Sie Django in 3 Minuten mit Docker-Compose bereit
Pin factory_boy Startwert in Django
GraphQL-API mit graphene_django in Django
Implementierung der Like-Schaltfläche in Django + Ajax
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django