[PYTHON] Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)

Teil 2 https://qiita.com/TuruMaru/items/8b55d1e134f29b8a8dcd

Nur ein bisschen CSS

$mkdir static
$touch base.css

Erstellen Sie ein statisches Verzeichnis direkt unter dem Projekt und erstellen Sie eine CSS-Datei darin. statisch bedeutet statisch, es scheint also eine statische Datei zu sein.

mysite/setting.py


STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

Fügen Sie dies der Konfigurationsdatei hinzu.

templates/base.html


{% load staticfiles %}← Fügen Sie dies hinzu
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
↓ Fügen Sie dies hinzu
    <link rel="stylesheet" href="{% static 'base.css' %}">
    <title>{% block page_title %}{% endblock %}</title>

</head>

Jetzt können Sie CSS verwenden. Es ist ein bisschen nervig.

Bevor ich die Funktion zum Anzeigen des Beitrags erstelle, schreibe ich HTML und CSS der Basis.

templates/base.html


{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="{% static 'base.css' %}">
    <title>{% block page_title %}{% endblock %}</title>

</head>
<body>
<nav>
    <p class="site-name">Blog</p>
    <ul>
        <li><a href="{% url 'posts:index' %}">Top</a></li>
        <li><a href="{% url 'posts:write' %}">Write</a></li>
    </ul>
</nav>

<div class="title">
    <h1>{% block title %}{% endblock %}</h1>
</div>

<hr>

<div class="content">
    {% block content%}{% endblock %}
</div>

<hr>

</body>
</html>

static/base.css


html, body{
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}

body, h1, hr {
    margin: 0px;
}

a{
    color: #e8e8e8;
}

nav p{
    margin: 0px;
    font-size: 30px;
}

nav{
    padding: 10px 10px;
    color: #e8e8e8;
    background-color: #41a888;
}

nav .site-name{
    display: inline-block;
}

nav ul{
    margin: 0px;
    padding: 0px;
    float: right;
}

nav ul li{
    padding: 10px;
    display: inline-block;
}

.title{
    margin: 21px 50px;
}

.content{
    margin: 20px 50px;
}

Fügen Sie einen Bildschirm (Schreiben) hinzu, um Beiträge zu view.py und urls.py zu schreiben.

posts/views.py


class WriteView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'posts/write.html')


write = WriteView.as_view()

posts/urls.py


app_name = 'posts'
urlpatterns = [
    path('', views.index, name='index'),
    path('write/', views.write, name='write'),← Fügen Sie dies hinzu
]
スクリーンショット 2019-11-05 11.24.22.png

Dann wird es so aussehen.

Ich habe mich gefragt, welcher der Postlistenlisten (Post) und der Postschreibbildschirm (Schreiben) zuerst ausgeführt werden soll, aber ich werde dies über den Postschreibbildschirm (Schreiben) tun.

Bildschirm nach der Erstellung

Erstellen Sie ein Eingabeformular und speichern Sie Ihre Eingabe in der Datenbank.

fließen

  1. Erstellen Sie form.py.
  2. Erstellen Sie views.py
  3. Erstellen Sie HTML

Zuerst nur das Formular

$cd posts
$touch form.py

posts/form.py


from django import forms
from .models import Posts


class WriteForm(forms.ModelForm):
    class Meta:
        #Modell angeben
        model = Posts
        #Geben Sie die Spalte an, die Sie als Formular anzeigen möchten
        fields = ('text',)

posts/views.py


from django.shortcuts import render

# Create your views here.
from django.views.generic import View
#form.Formular aus py importieren
from .form import WriteForm


class IndexView(View):
    def get(self,request, *args, **kwargs):
        return render(request, 'posts/post.html')


index = IndexView.as_view()


class WriteView(View):
    def get(self, request, *args, **kwargs):
        #Zur HTML-Datei mit Preis springen
        return render(request, 'posts/write.html', {'form': WriteForm})


write = WriteView.as_view()

templates/posts/write.html


{% extends "base.html" %}

{% block page_title %}Write{% endblock %}
{% block title %}Write{% endblock %}

{% block content %}
    <form method="post" action="{% url 'posts:write' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="button">Post</button>
    </form>
{% endblock %}

Dies ist der Bildschirm, den Sie ausführen können. スクリーンショット 2019-11-05 16.24.03.png

Ich schreibe nicht so viel. Ich schreibe tatsächlich mehr HTML. Der Code weniger hier ist form.py. Anfangs wusste ich nicht, warum ich eine solche Datei erstellen musste, aber es ist definitiv effizienter, wenn ich viele Formulare erstelle. Es scheint auch praktisch zu sein, wenn in der Datenbank gespeichert wird.

In Datenbank speichern

Wenn nichts unternommen wird, tritt ein Fehler auf, wenn die Schaltfläche "Posten" gedrückt wird. Schreiben wir also den Prozess, wenn die Methode veröffentlicht wird, dh den Prozess, der in der Datenbank in views.py gespeichert werden soll.

posts/views.py


class WriteView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'posts/write.html', {'form': WriteForm})

    def post(self, request, *args, **kwargs):
        #Speichern Sie den im Formular geschriebenen Inhalt
        form = WriteForm(request.POST)
        #Vor dem Speichern herausnehmen
        post = form.save(commit=False)
        #sparen
        post.save()
        #Zur Ansicht des Index gehen
        return redirect(to='posts:index')


write = WriteView.as_view()

Sie können es jetzt in der Datenbank speichern. Als nächstes werden die gespeicherten Beiträge in der Beitragsliste angezeigt.

Postlistenbildschirm

fließen

  1. Erstellen Sie views.py
  2. Erstellen Sie HTML

views.py


class IndexView(View):
    def get(self, request, *args, **kwargs):
        #Holen Sie sich alle Daten in der Posts-Tabelle
        queryset = Posts.objects.all().order_by('-created_at')
        #Post mit Preis.Springe zu HTML
        return render(request, 'posts/post.html', {'posts': queryset})


index = IndexView.as_view()

Übrigens werden durch Hinzufügen von "-created_at" und "-" vor "created_at" Daten in absteigender Reihenfolge erfasst. Ziemlich wichtig.

templates/posts/post.html


{% extends "base.html" %}
{% block page_title %}post{% endblock %}
{% block title %}Posts{% endblock %}
{% block content %}
    {% for post in posts %}← Verwenden Sie die Posts des Post Storage Arrays als Post
        <div class="post">
            <p class="text">{{ post.text }}</p>
            {{ post.created_at }}
            <hr>
        </div>
    {% endfor %}
{% endblock %}

Wenn Sie sich damit den Listenbildschirm ansehen スクリーンショット 2019-11-06 2.40.40.png

Endlich abgeschlossen ~ (^ ○ ^) Es ist ein sehr einfacher Code, aber ich habe alles versucht. Es gibt noch Raum für Erweiterungen. Bitte versuchen Sie es zu erweitern.

Recommended Posts

Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 2)
Erstellen Sie mit Django eine Bulletin-Board-App von Grund auf neu. (Teil 3)
Django von vorne anfangen (Teil: 2)
Django von vorne anfangen (Teil: 1)
Erstellen Sie eine Webanwendung mit Django
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
So entwickeln Sie eine Cart-App mit Django
Erstelle mit pygame2 eine neue Benutzeroberfläche!
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 1] ~ Django-Setup ~ eine nervenschwächende App erstellen
Django Memo # 1 von Grund auf neu
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Schritte von der Installation von Python 3 bis zur Erstellung einer Django-App
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Erstellen einer Django-Umgebung für Win10 (mit virtuellem Speicherplatz)
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Stellen Sie Django + React von Grund auf auf GKE bereit. (3) Erstellen Sie ein GCP-Projekt
# 3 Erstellen Sie eine Python-Umgebung (Django) mit einer EC2-Instanz (ubuntu18.04) von AWS part2
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Testgetriebene Entwicklung mit Django Teil 3
Testgetriebene Entwicklung mit Django Teil 4
Spiele mit einer Schildkröte mit Schildkrötengrafiken (Teil 1)
Testgetriebene Entwicklung mit Django Teil 6
Django: Klasse aus String importieren
Erstellen Sie eine Deb-Datei mit Docker
Stellen Sie die Django-Anwendung mit Docker bereit
Testgetriebene Entwicklung mit Django Teil 2
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Implementieren Sie die Django-App auf Hy
App von Windows 10 32-Bit-Scratch installiert
Machen Sie einen Filter mit einer Django-Vorlage
Testgetriebene Entwicklung mit Django Teil 1
Post Bulletin Board Erstellung mit Flasche
Testgetriebene Entwicklung mit Django Teil 5
Erstellen Sie mit Django einen Datei-Uploader
Wirf GQL mit einer numerischen ID aus dem AppEngine-Verwaltungsbildschirm
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Einführung)
Ich habe versucht, mit django eine E-Mail zum Abschluss der Registrierung von Google Mail zu senden.
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Erstellen Sie mit Cloud9 (jupyter miniconda python3) eine Lernumgebung für "Deep Learning von Grund auf neu".
Ich habe ein WebAPI gemacht! Erstellen einer Umgebung aus Django Rest Framework 1 mit EC2
Vorgehensweise zum Erstellen einer Django-Umgebung mit Win10 WSL Ubuntu18.04 + Anaconda + Apache2
Einfacher RSS-Reader mit Django
Erstellen Sie mit Laragon ganz einfach eine Entwicklungsumgebung