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.
Die Liste der Follower wird hier weggelassen. Implementieren Sie die minimal erforderlichen funktionalen Anforderungen.
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.
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.
urls.py
urlpatterns = [
#Kürzung
path('Originalseite', views.pages, name='Stellen Sie selbst ein'),
path('Originalseite/follow/', views.follows, name="follows"),
#Kürzung
]
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.
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