Einfache Aufgabenliste, erstellt mit Python + Django

Erstellen einer Anwendung mit Django

Mein eigener Twitter-Client mit Django beim letzten Mal erstellt http://qiita.com/Gen6/items/11fa5265053da95fcf0b,

Nachdem ich dies getan habe, möchte ich eine einfache Aufgabenlistenanwendung mit SQLite erstellen. Ich habe versucht, die Konfiguration so einfach wie möglich zu gestalten, um Raum für Anpassungen zu lassen. Gibt es Raum für Änderungen, z. B. das Senden einer Antwort von der Aufgabenliste an mich auf Twitter?

Dieses Mal werde ich es mit Djangos Formular schaffen. Wenn ich das verstehen kann, habe ich das Gefühl, dass das Angebot an einfachen Kundenverwaltungssystemen, Bulletin Boards, SNS-ähnlichen Anwendungen usw. dramatisch erweitert wird.

Im folgenden Artikel erfahren Sie zunächst, wie Sie mit Django beginnen. http://qiita.com/Gen6/items/1848f8b4d938807d082e

Vorbereitung

Wir gehen davon aus, dass Python 3 und Django bereits installiert sind und virtualenv ebenfalls installiert ist. Wenn Sie noch nicht bereit sind, bereiten Sie sich bitte auf die früheren Artikel vor.

Ein Projekt erstellen

Lassen Sie uns die Django-Projektbestellungen vornehmen und myapp darunter erstellen.

virtualenv) $ django-admin startproject orders
virtualenv) $ cd orders
virtualenv) $ python manage.py startapp myapp

Stellen Sie sicher, dass myapp und Bestellungen im Auftragsverzeichnis erstellt werden.

Nehmen Sie die ersten Einstellungen vor

Arbeiten im Auftragsverzeichnis

Bitte beschreiben Sie den Inhalt von settings.py unter Bezugnahme auf Folgendes. Verwenden Sie SQLite3 wie für die Datenbank.

orders/settings.py



INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

url.py

orders/urls.py


from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^myapp/', include('myapp.urls')),
    url(r'^', include('myapp.urls',namespace='myapp')),
    url(r'^admin/', admin.site.urls),
]

Dies wird später durch Festlegen des Namespace erleichtert. Ich denke, es ist eine gute Idee, sich angewöhnen, einen Namespace hinzuzufügen.

Arbeiten am myapp-Verzeichnis

myapp/ursl.py


from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

Erstellen Sie eine Anwendung

Definition des Modells

Diesmal ist es eine einfache Aufgabenliste, aber wir werden die in Django integrierten Formulare nutzen, um das Modell grob zu definieren. models.DateTimeField () ist nützlich.

myapp/models.py


from django.db import models

class Posting(models.Model):
    message = models.CharField(
        max_length = 140,
        verbose_name = 'Dinge die zu tun sind',
    )

    created_at = models.DateTimeField(
        auto_now_add = True,
        verbose_name= 'Datum (und Uhrzeit',
    )

Wir erhalten den Text, was zu tun ist, und Datum und Uhrzeit werden automatisch geschrieben. Ich habe versucht, bis zu 140 Zeichen zu erhalten.

Bereiten Sie das Formular vor

Erstellen Sie eine neue im Verzeichnis.

myapp/forms.py


from django import forms
from myapp.models import Posting


class PostingForm(forms.ModelForm):

    class Meta:
        model = Posting
        fields = ('message',)
        widgets = {
            'message': forms.Textarea(attrs={'cols': 40, 'rows': 4})
        }

Es gibt andere Felder, die in den Formularfeldern verwendet werden können, aber diesmal ist es nur Aufgabe, daher wird es so beschrieben. Sie können die Größe des Textbereichs festlegen, wenn dieser mit Widgets in HTML exportiert wird.

Beschreiben Sie die Ansicht

Importieren Sie die Modellklasse mit Import und importieren Sie das Django-Buchungsformular. Da diesmal kein Seitenübergang stattfindet, verwenden wir redirect (). Hier können Sie sehen, warum wir den Namespace festlegen.

myapp/views.py


import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

from django.http.response import HttpResponse
from django.shortcuts import (render, redirect,)
from django import forms
from myapp.models import Posting
from .forms import PostingForm

def index(request):
    form = PostingForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return redirect('myapp:index')
    new_text = Posting.objects.all().order_by('-id')
    contexts = {
        'form':form,
        'new_text':new_text,
    }
    return render(request, 'index.html', contexts)

Hier

new_text = Posting.objects.all().order_by('-id')

Ich schreibe eine Anweisung, um den Inhalt der Datenbank in umgekehrter Reihenfolge der ID anzuzeigen. Es gibt verschiedene Möglichkeiten, .order_by () zu verwenden, daher frage ich mich, ob ich es je nach Anwendung ändern sollte.

contexts = {
        'form':form,
        'new_text':new_text,
    }

Übergeben Sie hier das Django-Formular. Da wir den Inhalt der Datenbank gleichzeitig anzeigen möchten, werden wir diese beiden als drittes Argument der Renderfunktion verwenden. Ich denke, es ist eine gute Idee, diejenigen zu übergeben, die Sie in der Vorlage im Wörterbuch verwenden möchten.

Stellen Sie admin.py ein

myapp/admin.py


from django.contrib import admin
from myapp.models import Posting


class PostingAdmin(admin.ModelAdmin):
    list_display = ('id','message','created_at')

admin.site.register(Posting,PostingAdmin)

Stellen Sie die Anzeigeelemente so ein, dass sie auf der Django-Verwaltungssite überprüft werden.

list_display = ('id','message','created_at')

Wenn Sie auf diese Weise schreiben, können Sie die ID, die Nachricht sowie das Datum und die Uhrzeit der Veröffentlichung anzeigen.

Bereiten Sie eine HTML-Vorlage vor

templates/base.html


<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="../static/css/bootstrap.min.css" rel="stylesheet">
    <link href="../static/css/custom.css" rel="stylesheet">
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="../static/js/bootstrap.min.js"></script>
    <title></title>
  </head>
  <body>
    {% block body %}
    {% endblock %}
  </body>
</html>

Es ist ein gemeinsamer Teil, der zur Basis wird. Ich habe Bootstrap im statischen Verzeichnis. Sie können die Linkstruktur für die Vorlage schreiben, aber als Referenz habe ich versucht, sie wie gewohnt zu schreiben.

{% static 'css/custom.css' %}

Eine solche Beschreibung ist möglich.

tenplates/index.html


{% extends "base.html" %}
{% block body %}
  <div class="container">
    <div class="row">
      <div class="col-md-12">
        <form action="{% url 'myapp:index' %}" method="post">
          <div class="row">
            {% for field in form %}
            <label class="col-sm-3">{{ field.label_tag }}</label>
            <label class="col-sm-7">{{ field }}</label>
            {% endfor %}
            <input type="submit" class="btn btn-primary" value="Anmeldung">
            {% csrf_token %}
            </div>
          </div>
        </form>
        {% include "to_do.html" %}
      </div>
    </div>
  </div>
{% endblock %}

Es ist die Haupt-HTML-Datei, in der das Formular angezeigt wird. Fügen Sie eine weitere HTML-Datei hinzu, um die von Ihnen eingegebene Aufgabenliste anzuzeigen.

Da der Namespace in urls.py festgelegt ist,

<form action="{% url 'myapp:index' %}" method="post">

Sie können so schreiben. Es ist bequem!

{% csrf_token %} 

Dies ist eine Gegenmaßnahme gegen Fälschungen. Da wir einen kryptografischen Pseudozufallswert in HIDDEN einbetten, können Sie nicht POSTEN, wenn Sie vergessen, diesen zu schreiben. Stellen Sie sicher, dass Sie es installieren, bevor Sie den Schaum schließen. Ist es schwer zu vergessen, wenn Sie es direkt hinter dem platzieren?

templates/to-do.html


<div class="row">
  {% for i in new_text %}
  <div class="col-md-4">
  <p>{{ i.message }} - {{ i.created_at }}</p>
  </div>
  {% endfor %}
</div>

Es wird der Inhalt sein, der in index.html enthalten ist. Es geht nur darum, den aus der Datenbank erhaltenen Inhalt mit for zu drehen.

Wandern

virtualenv) $ python manage.py makemigrations myapp
virtualenv) $ python manage.py migrate

Anwendungsbildschirm

スクリーンショット 2016-11-14 13.11.43.png

erledigt.

Recommended Posts

Einfache Aufgabenliste, erstellt mit Python + Django
ToDo-Listenerstellung [Python Django]
Todo-App mit Django erstellen ③ Aufgabenlistenseite erstellen
Versuchen Sie, Python in der mit pipenv erstellten Django-Umgebung auszuführen
Erstellen einer einfachen Power-Datei mit Python
Erstellt eine Reise von Darts mit Python (Nachrichten)
Ich habe mit Python einen einfachen Blackjack gemacht
Django 1.11 wurde mit Python3.6 gestartet
Ich kann mit Python3.5 (Windows) + django1.7.1 kein Projekt erstellen.
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Django Todo Listenerstellung
Liste mit Python initialisieren
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker
Was ist Gott? Erstelle einen einfachen Chatbot mit Python
Lebe ein Haml-Leben mit Django1.8 + Jinja2 + hamlish-jinja (Python3)
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
Mit Python erstellte Beispieldaten
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Erste Schritte mit Python Django (1)
Erstellen Sie eine Homepage mit Django
Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Machen Sie eine Lotterie mit Python
Einführung in Python Django (6)
Erstellen Sie ein Verzeichnis mit Python
Erste Schritte mit Python Django (5)
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Empfehlung von Django, Bachstelze ~ Warum eine Website mit Python entwickeln ~
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Holen Sie sich eine Liste der mit Python + Selen gekauften DMM-E-Books
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Flask-Erstellen Sie eine Todo-Liste mit CSRF-Maßnahmen mit WTF mit Flask
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen
[Python] Erstellen Sie mit Django einen Bildschirm für den HTTP-Statuscode 403/404/500
Löse ABC163 A ~ C mit Python
Bedienen Sie den Belegdrucker mit Python
Python-Grafikhandbuch mit Matplotlib.
[Python] Verwalten Sie Funktionen in einer Liste
Lassen Sie uns eine GUI mit Python erstellen.
Löse ABC166 A ~ D mit Python
Stellen Sie die Django-Anwendung mit Docker bereit
Erstellen Sie eine virtuelle Umgebung mit Python!
Ich habe mit Python eine Lotterie gemacht.
Konvertieren Sie die Liste mit Python in DataFrame
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Erstellen einer virtuellen Umgebung mit Python 3
Python / Machen Sie ein Diktat aus einer Liste.
Löse ABC168 A ~ C mit Python