Das Kommentieren eines Posts ist die häufigste Funktion eines Posts, und die Implementierung in Django ist viel einfacher als in anderen Frameworks. Um diese Funktion zu implementieren, müssen einige Schritte ausgeführt werden. Zunächst müssen Sie jedoch ein neues Projekt erstellen.

Wie erstelle ich eine Kommentarfunktion in Django?

  • Öffnen Sie die Eingabeaufforderung und führen Sie die folgenden Befehle aus.

    Starten Sie ein neues Django-Projekt wie folgt:

    django-admin startproject my_project
  • Nachdem Sie diesen Befehl ausgeführt haben, sehen Sie die folgenden Dateien und Ordner, die django für Sie erstellt. Um diesen Ordner anzuzeigen, können Sie den Befehl tree an der Eingabeaufforderung verwenden oder den Ordner in einem ide öffnen. In meinem Fall habe ich einen großartigen Texteditor verwendet .



    Erstellen Sie eine neue App als:

    python manage.py startapp Portfolio_app
  • Django erstellt automatisch Dateien, damit Sie sich auf Ihre Aufgabe konzentrieren können, ohne sich um andere Dinge wie das Erstellen und Strukturieren einer Datei kümmern zu müssen.

  • In diesem Artikel erstellen wir ein Post-Modell, um ein Bild zu posten:

    Der Beitrag besteht aus folgenden Feldern:

    1.Bild
    2.Titel oder Beschreibung
    3. Datum veröffentlicht
    4.Autor des Bildes.
  • Importieren Sie zunächst die erforderlichen Module in models.py :

    aus django.db Modelle importieren
    aus django.utils Zeitzone importieren
    aus django.contrib.auth.models Benutzer importieren

    Fügen Sie nun mit dem Modul models.py das folgende Snippet hinzu.

    filter_none

    bearbeiten
    schließen

    play_arrow

    Link
    Helligkeit_4
    Code

    class Post(models.Model):
        image = models.ImageField(
            default ="default_foo.png", upload_to ="post_picture")
        caption = models.TextField()
        date_posted = models.DateTimeField(default = timezone.now)
        author = models.ForeignKey(User, on_delete = models.CASCADE)
      
        def __str__(self):
            return f'{self.author.username}\'s Post- {self.title}'
      
        def save(self, *args, **kwargs):
            super().save(*args, **kwargs)
            img = Image.open(self.image.path)
            if img.height > 400 or img.width > 400:
                output_size = (300, 300)
                img.thumbnail(output_size)
                img.save(self.image.path)
    chevron_right
    
    
    filter_none
    
    
  • Der Name des Modells ist Postmodell (es kann eines Ihrer Wahl sein). Lassen Sie uns die Details der einzelnen verwendeten Dateien verstehen.

    Bildfeld: In diesem Feld können Sie Bilder in der Datenbank speichern. Der Standardwert enthält ein Standardbild, das ich als default_foo.png bezeichnet habe. Es wird automatisch gespeichert, wenn vom Benutzer kein Bild verfügbar ist oder veröffentlicht wird. Dieses Image befindet sich in einem Ordner mit dem Namen Media in Ihrem Verzeichnis my_project. Wenn ein Benutzer ein Bild hochlädt, wird es in das Verzeichnis mit dem Namen post_picture hochgeladen, das durch das Attribut upload_to festgelegt wird.



    Beschriftung: Dieses Feld zeigt die Beschreibung des Bildes, das als Beschriftung für das Bildfeld bezeichnet wird.

    Datum der Veröffentlichung : Dieses Feld berücksichtigt die Uhrzeit und das Datum, an dem das Bild hochgeladen wird. Der Standardwert timezone.now speichert die Zeit, zu der dieser Beitrag erstellt wird. Die Uhrzeit / das Datum werden nicht geändert, wenn der Beitrag später nach dem Beitrag aktualisiert wird.

    Autor: Dieses Attribut berücksichtigt den Benutzer, der diesen Beitrag gepostet hat. Dazu wird der Benutzer django als Parameter verwendet. Das Feld on_delete kümmert sich um Anomalien, die beim Posten eines Benutzers auftreten können. Modelle, Kaskadenfeld löscht alle benutzerbezogenen Beitragsdaten gleichzeitig, wenn ein Benutzer gelöscht wird.

    __str__ Methode: Diese Methoden werden in Python auch als magische Methoden bezeichnet. Es nimmt sich selbst als Attribute. Diese Methode zeigt dem Django-Administrator die Titelinformationen im Backend an.

    Speichermethode: Diese Methode wird überschrieben, um den Beitrag mit benutzerdefinierten Werten zu speichern. Wenn wir Bilder einer bestimmten Größe in unserer Datenbank speichern möchten, wird dazu die Speichermethode verwendet. Dazu müssen Sie PIL in das Modul models.py importieren, um das Bild zu lesen. Öffnen Sie das Bild mit der Methode open in einer Variablen und speichern Sie es in einer bestimmten Ausgabegröße in Ihrer Datenbank, um zu vermeiden, dass große Bilder in Ihrer Datenbank gespeichert werden.

    Nachdem Sie das Post-Modell erfolgreich erstellt haben, führen Sie die folgenden Befehle auf dem Terminal aus, um die Änderungen in der Datenbank vorzunehmen und zu speichern.

    python manage.py makemigrations
    python manage.py migrieren

    Dadurch wird die Post-Tabelle in Ihrer Datenbank erstellt. Ich verwende die Django-Standarddatenbank. 

  • Zur Visualisierung Ihrer Tabellen und Datenbanken empfehle ich Ihnen, den DB Browser für SQLite herunterzuladen , der Ihnen eine Schnittstelle zum Anzeigen und Bearbeiten aller Ihrer Schemas bietet.

    Nachdem Sie Ihr Post-Modell implementiert haben, ist es jetzt an der Zeit, die Kommentarfunktion für Ihren Post zu implementieren.

    1. Erstellen Sie ein Formular im Modul forms.py, um die Daten abzurufen.
    2. Erstellen Sie eine Funktion zum Speichern oder Löschen des Kommentars im Modul views.py.
    3. Holen Sie sich die Kommentare aus der HTML-Datei.

    Importieren der erforderlichen Module und Pakete in models.py

    filter_none

    bearbeiten
    schließen

    play_arrow

    Link
    Helligkeit_4
    Code

    from django.db import models
    from django.contrib.auth.models import User
    chevron_right
    
    
    filter_none
    
    

     

    Erstellen Sie ausgehend vom Modell ein Modell. Kommentar im Modul models.py in Ihrer App.



    filter_none

    bearbeiten
    schließen

    play_arrow

    Link
    Helligkeit_4
    Code

    class Comment(models.Model):
      post = models.ForeignKey(Post, on_delete = models.CASCADE, related_name ='comments')
      user = models.ForeignKey(User, on_delete = models.CASCADE)
      content = models.TextField()
    chevron_right
    
    
    filter_none
    
    

    Hier zeigt foriegnkey die Eins-zu-Eins-Beziehung mit dem Beitrag und dem Benutzer. Cascade ist sehr nützlich für nicht relevante Daten. Wenn beispielsweise ein Beitrag oder der Autor des Beitrags gelöscht wird, müssen die Daten für diesen Benutzer nicht aufbewahrt werden. Das Kaskadenfeld hilft dabei, diese Objekte und ihre Werte gleichzeitig zu löschen. 

    Hinweis: Vergessen Sie nicht, Migrationsbefehle auszuführen (siehe oben im Beitrag).
    um die Änderungen in der Datenbank zu speichern.
  • Erstellen Sie ein Formular, um den Inhalt des Kommentars im Modul forms.py zu sammeln . Wenn Sie form.py nicht in Ihrer Django-App haben, erstellen Sie eine.

    Django verfügt über integrierte Formulare, mit denen Sie es erstellen und direkt darauf zugreifen können, ohne ein neues von Grund auf neu schreiben zu müssen.

    filter_none

    bearbeiten
    schließen

    play_arrow

    Link
    Helligkeit_4
    Code

    from django import forms
    from .models import Comment
      
    class CommentForm(forms.ModelForm):
        content = forms.CharField(label ="", widget = forms.Textarea(
        attrs ={
            'class':'form-control',
            'placeholder':'Comment here !',
            'rows':4,
            'cols':50
        }))
        class Meta:
            model = Comment
            fields =['content']
    chevron_right
    
    
    filter_none
    
    
  • Wenn Sie zum Modul views.py wechseln , um die aus HTML stammenden Daten zu verarbeiten und zu speichern, wird der folgende Code fortgesetzt . Ich implementiere die Kommentarfunktion in der Post-Detail-Ansicht. Sie können sie verwenden, wo immer Sie möchten. Die Methode wäre dieselbe.

    filter_none

    bearbeiten
    schließen

    play_arrow

    Link
    Helligkeit_4
    Code

    from .forms import CommentForm
      
    def post_detailview(request, id):
        
      if request.method == 'POST':
        cf = CommentForm(request.POST or None)
        if cf.is_valid():
          content = request.POST.get('content')
          comment = Comment.objects.create(post = post, user = request.user, content = content)
          comment.save()
          return redirect(post.get_absolute_url())
        else:
          cf = CommentForm()
            
        context ={
          'comment_form':cf,
          }
        return render(request, 'socio / post_detail.html', context)
    chevron_right
    
    
    filter_none
    
    

     

    Importieren Sie CommentForm aus dem Modul forms.py, erstellen Sie ein Objekt aus commentform und prüfen Sie, ob es gültig ist. Django bietet eine integrierte Funktion zum Überprüfen der Anmeldeinformationen und des Formats des Formulars mit der Methode is_valid

  • Durch Verschrotten des Inhalts des Beitrags mit der Methode get und Erstellen eines neuen Kommentars mit der Methode create gefolgt von der Methode Save werden die Daten des Objekts gespeichert, das beim Erstellen eines neuen Beitrags in der Datenbank erstellt wurde.

    Das cf-Objekt wird vom Kontextwörterbuch an HTML übergeben, um auf alle Kommentare in HTML zuzugreifen.

    Schließlich wird zum Abrufen der Daten aus dem HTML-Formular ein Formular-Tag mit der als Post verwendeten Methode verwendet, da die Daten an den Server gesendet werden müssen. Das folgende Snippet zeigt, wie der Wert aus dem Formular im HTML-Code übernommen wird.

    filter_none

    bearbeiten
    schließen

    play_arrow

    Link
    Helligkeit_4
    Code

    {% load crispy_forms_tags %}
    <html>
      <head>
      <title></title>
      </head>
    <body>  
      <form method="POST">
        {% csrf_token %}
        {{comment_form.as_p}}
      </form>
    </body>
    chevron_right
    
    
    filter_none
    
    

    Hier wird Csrf_token zu Sicherheitszwecken verwendet. Django übernimmt die Verschlüsselung der Form über dieses Token.



    Die Methode as_p wird verwendet, um das Formular zur besseren Visualisierung in Absätzen anzuzeigen .

Ausgabe -

Kommentar Box

Sie können alle Kommentare über die for-Schleife in HTML anzeigen. Django bietet eine neue HTML-Sprache für den Zugriff auf Daten und Variablen, die im Kontext im Modul views.py übergeben wurden und for-Schleifen, if-else-Bedingungen usw. enthalten.

Sie können diese Funktionen in meinem Social-Media-Site-Projekt in meinem Github anzeigen.

https://github.com/Shikharm16/social-media-site-using-django