Liste de tâches simple créée avec Python + Django

Créer une application avec Django

Mon propre client Twitter créé avec Django la dernière fois http://qiita.com/Gen6/items/11fa5265053da95fcf0b,

Maintenant que j'ai fait, je voudrais créer une application simple de liste de tâches à l'aide de SQLite. J'ai essayé de rendre la configuration aussi simple que possible pour laisser de la place à la personnalisation. Y a-t-il place pour des modifications telles que l'envoi d'une réponse de la liste des tâches à moi-même sur Twitter?

Cette fois, je vais le faire en utilisant le formulaire de Django. Si je peux comprendre cela, je pense que la gamme de systèmes simples de gestion des clients, de tableaux d'affichage, d'applications de type SNS, etc. va s'étendre considérablement.

Consultez l'article suivant pour savoir comment démarrer avec Django en premier lieu. http://qiita.com/Gen6/items/1848f8b4d938807d082e

Préparation

Nous partirons du principe que Python 3 et Django sont déjà installés et virtualenv est également installé. Si vous n'êtes pas encore prêt, préparez-vous en vous référant aux articles précédents.

Créer un projet

Faisons les commandes du projet Django et créons myapp en dessous.

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

Assurez-vous que myapp et les commandes sont créées dans le répertoire des commandes.

Effectuer les réglages initiaux

Travailler dans le répertoire des commandes

Veuillez décrire le contenu de settings.py en vous référant à ce qui suit. Utilisez SQLite3 tel quel pour la base de données.

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),
]

Ce sera pratique plus tard en définissant l'espace de noms. Je pense que c'est une bonne idée de prendre l'habitude d'ajouter un espace de noms.

Travailler sur le répertoire myapp

myapp/ursl.py


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

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

Créer une application

définition du modèle

Cette fois, c'est une simple liste de choses à faire, mais nous allons profiter des formulaires intégrés à Django, nous allons donc définir approximativement le modèle. models.DateTimeField () est utile.

myapp/models.py


from django.db import models

class Posting(models.Model):
    message = models.CharField(
        max_length = 140,
        verbose_name = 'Choses à faire',
    )

    created_at = models.DateTimeField(
        auto_now_add = True,
        verbose_name= 'Date et l'heure',
    )

Nous recevrons le texte de ce qu'il faut faire et la date et l'heure seront écrites automatiquement. J'ai essayé de recevoir jusqu'à 140 caractères.

Préparez le formulaire

Créez-en un nouveau dans le répertoire.

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})
        }

Il existe d'autres champs qui peuvent être utilisés dans les champs de formulaire, mais cette fois, il ne s'agit que d'une tâche, donc c'est décrit comme ceci. Vous pouvez définir la taille de la zone de texte lorsqu'elle est exportée au format HTML avec des widgets.

Décrivez la vue

Importez la classe de modèle avec l'importation et importez le formulaire de publication Django. Puisqu'il n'y a pas de transition de page cette fois, nous utiliserons redirect (). Vous pouvez voir pourquoi nous définissons l'espace de noms ici.

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)

ici

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

J'écris une instruction pour afficher le contenu de la base de données dans l'ordre inverse de l'ID. Il y a plusieurs façons d'utiliser .order_by (), donc je me demande si je devrais le changer en fonction de l'application.

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

Passez le formulaire Django ici. Puisque nous voulons afficher le contenu de la base de données en même temps, nous utiliserons ces deux comme troisième argument de la fonction de rendu. Je pense que c'est une bonne idée de transmettre ceux que vous souhaitez utiliser dans le modèle dans le dictionnaire.

Définir admin.py

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)

Définissons les éléments d'affichage à vérifier depuis le site de gestion de Django.

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

En écrivant de cette manière, vous pourrez afficher l'identifiant, le message et la date et l'heure de publication.

Préparez un modèle HTML

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>

C'est une partie commune qui devient la base. J'ai Bootstrap dans le répertoire statique. Vous pouvez écrire la structure des liens pour le modèle, mais pour référence, j'ai essayé de l'écrire comme d'habitude.

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

Une telle description est possible.

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="enregistrement">
            {% csrf_token %}
            </div>
          </div>
        </form>
        {% include "to_do.html" %}
      </div>
    </div>
  </div>
{% endblock %}

C'est le fichier HTML principal qui affiche le formulaire. Incluez un autre fichier HTML pour afficher la liste de tâches que vous avez saisie.

Étant donné que l'espace de noms est défini dans urls.py,

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

Vous pourrez écrire comme ça. C'est pratique!

{% csrf_token %} 

Il s'agit d'une contre-mesure de contrefaçon de demande intersite. Puisque nous intégrons une valeur pseudo-aléatoire cryptographique dans HIDDEN, si vous oubliez d'écrire ceci, vous ne pourrez pas POST. Assurez-vous de l'installer avant de fermer la mousse. Est-il difficile d'oublier si vous le placez juste derrière le

?

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>

Ce sera le contenu inclus dans index.html. Il s'agit simplement de transformer le contenu obtenu de la base de données avec for.

émigrer

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

Écran d'application

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

terminé.

Recommended Posts

Liste de tâches simple créée avec Python + Django
Création de liste de tâches [Python Django]
Créer une application Todo avec Django ③ Créer une page de liste de tâches
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
Créer un fichier power simple avec Python
Créé un voyage de fléchettes avec python (news)
J'ai fait un simple blackjack avec Python
Django 1.11 a démarré avec Python3.6
Je ne peux pas créer de projet avec Python3.5 (Windows) + django1.7.1.
[Python] Créer un environnement de développement Django avec Docker
Créez rapidement un environnement Python Django avec IntelliJ
Créer une liste Django Todo
Initialiser la liste avec python
Essayez de créer une application Todo avec le framework Django REST
Essayez de créer un jeu simple avec Python 3 et iPhone
Un mémo sur la création d'une application Django (Python) avec Docker
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Vivez une vie de Haml avec Django1.8 + Jinja2 + hamlish-jinja (Python3)
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches
[Vagrant] Configurer un serveur API simple avec python
Exemple de données créées avec python
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Premiers pas avec Python Django (1)
Créer une page d'accueil avec django
Premiers pas avec Python Django (4)
Premiers pas avec Python Django (3)
La liste Python n'est pas une liste
Faites une loterie avec Python
Introduction à Python Django (6)
Créer un répertoire avec python
Premiers pas avec Python Django (5)
J'ai fait un jeu de frappe simple avec tkinter de Python
Recommandation de django, wagtail ~ Pourquoi développer un site web avec python ~
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créer une application Todo avec Django ① Créer un environnement avec Docker
Flask-Créer une liste Todo avec des mesures CSRF avec WTF avec Flask
(Pour les débutants) Essayez de créer une API Web simple avec Django
[Python] Créer un écran pour le code d'état HTTP 403/404/500 avec Django
Résoudre ABC163 A ~ C avec Python
Faites fonctionner l'imprimante de reçus avec python
Manuel de graphisme Python avec Matplotlib.
[python] Gérer les fonctions dans une liste
Faisons une interface graphique avec python.
Résoudre ABC166 A ~ D avec Python
Déployer l'application Django avec Docker
Créez un environnement virtuel avec Python!
J'ai fait une loterie avec Python.
Convertir la liste en DataFrame avec python
Django Tips-Créez un site de classement avec Django-
Créer un environnement virtuel avec Python 3
python / Créer un dict à partir d'une liste.
Résoudre ABC168 A ~ C avec Python