[PYTHON] Implémenter la fonction de suivi dans Django

Première étape

Django a implémenté une fonction de suivi qui est presque essentielle pour les applications SNS. Ce sera une auto-implémentation qui n'utilise pas la bibliothèque. Personnalisez-le en fonction de vos besoins et exigences.

Environnement de développement

Exigences spécifiques pour la fonction Follow

La liste des abonnés est omise ici. Mettre en œuvre les exigences fonctionnelles minimales requises.

Conception de table

Il existe un moyen de créer une seule table, mais j'ai personnellement l'impression que l'instruction SQL devient redondante et qu'il est difficile de gérer la table, je vais donc en préparer deux cette fois.

** table follow_relation **

Les données Informations à stocker Type de données
user_id ID utilisateur de l'abonné UUID
followed_id ID utilisateur de la personne suivie UUID

** table follow_count **

Les données Informations à stocker Les données型
user_id Identifiant d'utilisateur UUID
follow Nombre d'abonnés INT
followed Numéro suivi INT

La table follow_relation gère le statut de suivi entre les utilisateurs, et la table follow_count gère le nombre d'adeptes et d'adeptes des utilisateurs.

Modifier views.py

Implémentons la fonction suivante dès que la table est créée. Le flux général de la fonction de suivi est le suivant.

Demande de page
↓
followd_Vérifier et afficher l'état de suivi avec la fonction d'état
↓
Appuyez sur le bouton de suivi
↓
La fonction suivante traite selon le statut suivant
↓
Revenir à la page d'origine

Ensuite, il devient le code suivant.

followed_fonction d'état


@login_required
def followed_status(request, accesskey):
    #réduction
    #Obtenez les paramètres dont vous avez besoin

    #Se connecter à la base de données
    connection = MySQLdb.connect(
    host='localhost',
    user='***',
    passwd='***',
    db='***',
    charset="utf8"
    )  

    #Récupérez le curseur
    cursor = connection.cursor() 

    #Ensemble de requêtes
    follow_relation = "SELECT COUNT(*) FROM follow_relation where user_id = UUID_TO_BIN(%s) and followed_id = UUID_TO_BIN(%s);"

    #Exécuter l'ordre
    # user_id、followed_Obtenez votre identité par vous-même
    cursor.execute(follow_relation, (user_id, followed_id))
    row_follow = cursor.fetchone()
    follows = row_follow[0]

    #Déterminer si l'utilisateur de connexion et l'utilisateur de la page sont la même personne
    #Assurez-vous que vous ne pouvez pas suivre la même personne
    if followed_id == user_id:
        followed_status_code = 1
    else:
        followed_status_code = 2

    #Vrai si suit est supérieur à 0
    #Renvoie False si suit est 0
    followed = False
    if follows > 0 :
        followed = True
 
    return followed_status_code, followed

Veuillez extraire les paramètres requis de votre propre tableau. Tout ce dont vous avez besoin cette fois est l'ID du suiveur et du suiveur. Le côté que suit user_id et le côté qui suit_id suit.

Donnez un code de statut pour déterminer s'il s'agit de la même personne.

Si follow_status_code = 1, alors vous-même (ne pouvez pas suivre) Si follow_status_code = 2, autres (vous pouvez suivre)

Sera.

--Vérifiez l'état de suivi

Vérifiez l'état de suivi avec Vrai et Faux.

Si c'est "Faux", je ne l'ai pas encore suivi Si "True", vous suivez déjà

Sera. Regardons maintenant la fonction suivante.

suit la fonction


@login_required
def followes(request, accesskey):
    #réduction
    #Obtenez les paramètres dont vous avez besoin

    #Se connecter à la base de données
    connection = MySQLdb.connect(
    host='localhost',
    user='***',
    passwd='***',
    db='***',
    charset="utf8"
    )  

    #Récupérez le curseur
    cursor = connection.cursor()

    #Veuillez définir une requête commune
    #Obtenez les informations dont vous avez besoin ici

    #Empêchez-vous de suivre
    if user_id == followed_id:
        followed = False
        #Enregistrer l'état de suivi dans la session
        request.session['page_followed_status'] = followed
    else:
        if followed == False:
            #Ce sera le processus en suivant
            #Ensemble de requêtes
            #Insérer une nouvelle relation de suivi
            follow_reation = "INSERT INTO follow_relation (user_id, followed_id) values(UUID_TO_BIN(%s), UUID_TO_BIN(%s));"

            #Augmentez de un le nombre d'abonnés
            follow_update = "UPDATE follow_count SET follow = follow + 1 where user_id=UUID_TO_BIN(%s);"  

            #Augmentez le nombre d'abonnés de l'utilisateur suivi d'un
            followed_update = "UPDATE follow_count SET followed = followed + 1 where user_id=UUID_TO_BIN(%s);"

            #Exécuter l'ordre
            cursor.execute(follow_relation, (user_id, followed_id))

            cursor.execute(follow_update, (user_id, ))

            cursor.execute(followed_update, (followed_id, ))

            #Fermer la connexion
            cursor.close()
            connection.commit()
            connection.close() 

            #Faites-le suivre
            followed = True
            request.session['page_followed_status'] = followed

        else:
            #Ce sera le processus lors du désabonnement
            #Ensemble de requêtes
            #Supprimer la relation de suivi
            follow_relation = "DELETE FROM follow_relation where user_id=UUID_TO_BIN(%s) and followed_id = UUID_TO_BIN(%s);"

            #Réduisez de un le nombre d'utilisateurs non suivis
            follow_update = "UPDATE follow_count SET follow = follow - 1 where user_id=UUID_TO_BIN(%s);"

            #Réduisez de un le nombre d'abonnés des utilisateurs de pages non suivis
            followed_update = "UPDATE follow_count SET followed = followed - 1 where user_id=UUID_TO_BIN(%s);"

            #Exécuter l'ordre
            cursor.execute(sql_followrelation_delete, (user_id, followed_id))

            cursor.execute(sql_follow_update, (user_id, ))

            cursor.execute(sql_followed_update, (followed_id, ))

            #Fermer la connexion
            cursor.close()
            connection.commit()
            connection.close() 

            #Rendre le non suivi
            followed = False
            request.session['page_followed_status'] = followed

    return redirect('Page originale', accesskey)

Il s'agit du traitement réel du branchement avec une instruction if et suivant ou non suivi. Et enfin, le statut de suivi est changé. Redirigez vers la page d'origine et terminez. (Cette fois, la transition de page se produit car Ajax etc. n'est pas utilisé)

Enfin, modifiez la vue à afficher.

fonction résultat


@login_required
def result(request, accesskey):

    #réduction

    #Comprendre le statut du suivi
    status = followed_status(request, accesskey)
    followed_status_code = status[0]
    followed = status[1]
    #Enregistrer l'état de suivi dans la session (temporaire)
    request.session['page_followed_status'] = followed

    params = {
        #réduction

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

Seules les pièces pertinentes sont répertoriées. Nous vérifions le statut de suivi en appelant la fonction follow_status. (La fonction follow_status renvoie le code d'état et suit l'état.) Et je l'enregistre temporairement dans la session.

Modification de urls.py

urls.py


urlpatterns = [
    #réduction
    path('Page originale', views.pages, name='Défini par vous-même'),
    path('Page originale/follow/', views.follows, name="follows"),
    #réduction
]

Modifier le modèle

Enfin, il existe un modèle.

result.html


            <!--Ajouter un bouton de suivi-->
            {% if page_followed_status_code is 2 %}
                {% if page_followed_status is False %}
                <p><a href="{% url 'follows' page_accesskey %}">Suivre</a></p>
                {% else %}
                <p><a href="{% url 'follows' page_accesskey %}">Arrêter de suivre</a></p>
                {% endif %}
            {% endif %}

Il ne s'affiche que lorsque le code d'état est 2 (lorsqu'il est entre autres, pas vous-même).

Et si le statut de suivi est "False", il est affiché comme "Follow", et quand il est "True", il est affiché comme "Arrêter de suivre".

Lorsque le lien est enfoncé, la fonction suivante est appelée à la destination de la page, le processus de suivi est exécuté et la page est redirigée vers la page d'origine.

finalement

Veuillez modifier le code et l'utiliser à votre manière. La fonction "J'aime" peut être implémentée de la même manière!

Recommended Posts

Implémenter la fonction de suivi dans Django
Comment implémenter la fonctionnalité de type helper Rails dans Django
Implémenter la fonctionnalité de connexion JWT dans le framework Django REST
Modèle dans Django
Implémenter un modèle utilisateur personnalisé dans Django
Formulaire à Django
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Modifications du modèle dans Django
Implémenter sum en Python
Implémenter Traceroute dans Python 3
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Implémenter LSTM AutoEncoder avec Keras
Optimisation des performances dans Django 3.xx
PHP comme var_dump dans le template Django
Gérer les constantes dans les modèles Django
Renommer les colonnes de table dans Django3
Implémenter la fonction de minuterie dans pygame
Implémenter le transfert de style avec Pytorch
Mettre en œuvre une fermeture récursive dans Go
Sortie de la structure de table dans Django
Implémenter Naive Bayes dans Python 3.3
Implémenter UnionFind (équivalent) en 10 lignes
Implémenter d'anciens chiffrements en python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Mettre en œuvre un RPC rapide en Python
(Note) Django dans l'environnement Vagrant
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Créez un modèle de suivi facile à utiliser avec Django en utilisant ManyToManyField via
Afficher Django ManyToManyField dans un modèle
Implémenter le processus gaussien dans Pyro
Implémenter un bouton d'ajout de formulaire dans l'ensemble de formulaires en ligne Django
Implémentation de la fonction d'authentification JWT dans Django REST Framework à l'aide de djoser
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
recharger dans le shell django avec ipython
Mettre en œuvre un test piloté par table en Java
Implémenter la fonction power.prop.test de R en python
Définir des espaces réservés dans les champs de saisie dans Django
8 commandes fréquemment utilisées dans Python Django
Ajouter dynamiquement des champs de formulaire dans Django
Erreur liée à memcached dans django
Implémentation de la fonction de connexion dans Django
Enregistrer l'application Django dans le projet
Implémenter un paramètre de date dans Tkinter
Implémenter le modèle Singleton en Python
Implémenter l'application Django sur Hy
Ecrire des contraintes de clé externe dans Django
Comment refléter CSS dans Django
Changer la langue affichée dans Django 1.9
Implémentez rapidement l'API REST en Python
Déployez Django en 3 minutes à l'aide de docker-compose
Épingler la valeur de départ factory_boy dans Django
API GraphQL utilisant graphene_django dans Django
Implémentation du bouton like dans Django + Ajax
Récupérer la chaîne de requête (chaîne de requête) avec Django