Django ** Exemple CRUD le plus simple **


Exemple

Si vous trouvez ces étapes peu familières, envisagez plutôt de commencer ici . Notez que ces étapes proviennent de la documentation de débordement de pile.

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

myproject / settings.py Installer l'application

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

Créez un fichier appelé urls.py dans le répertoire myapp et urls.py le à jour avec la vue suivante.

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

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

Mettez à jour l'autre fichier urls.py avec le contenu suivant.

from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include 
from myapp import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', admin.site.urls),
]

Créez un dossier nommé templates dans le répertoire myapp . Créez ensuite un fichier nommé index.html dans le répertoire des modèles . Remplissez-le avec le contenu suivant.

<!DOCTYPE html>
<html>
<head>
    <title>myapp</title>
</head>
<body>
    <h2>Simplest Crud Example</h2>
    <p>This shows a list of names and lets you Create, Update and Delete them.</p>
    <h3>Add a Name</h3>
    <button>Create</button>
</body>
</html>

Nous avons également besoin d'une vue pour afficher index.html que nous pouvons créer en éditant le fichier views.py comme suit :

from django.shortcuts import render, redirect

# Create your views here.
def index(request):
    return render(request, 'index.html', {})

Vous avez maintenant la base sur laquelle vous allez travailler. L'étape suivante consiste à créer un modèle. Voici l'exemple le plus simple possible. Dans votre dossier models.py , ajoutez le code suivant.

from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Name(models.Model):
    name_value = models.CharField(max_length=100)

    def __str__(self): # if Python 2 use __unicode__
        return self.name_value

Cela crée un modèle d'objet Name que nous ajouterons à la base de données à l'aide des commandes suivantes à partir de la ligne de commande.

python manage.py createsuperuser 
python manage.py makemigrations
python manage.py migrate

Vous devriez voir certaines opérations effectuées par Django. Celles-ci configurent les tables et créent un super-utilisateur capable d'accéder à la base de données admin à partir d'une vue d'administrateur alimentée par Django. En parlant de cela, permet d'enregistrer notre nouveau modèle avec la vue admin. Accédez à admin.py et ajoutez le code suivant.

from django.contrib import admin
from myapp.models import Name
# Register your models here.

admin.site.register(Name)

De retour à la ligne de commande, vous pouvez maintenant lancer le serveur avec la commande python manage.py runserver . Vous devriez pouvoir visiter http: // localhost: 8000 / et voir votre application. Veuillez vous rendre sur http: // localhost: 8000 / admin pour pouvoir ajouter un nom à votre projet. Connectez-vous et ajoutez un nom sous la table MYAPP, nous avons gardé cela simple pour l'exemple, donc assurez-vous qu'il y a moins de 100 caractères.

Pour accéder au nom, vous devez l'afficher quelque part. Modifiez la fonction d'index dans views.py pour extraire tous les objets Name de la base de données.

from django.shortcuts import render, redirect
from myapp.models import Name

# Create your views here.
def index(request):
    names_from_db = Name.objects.all()
    context_dict = {'names_from_context': names_from_db}
    return render(request, 'index.html', context_dict)

Maintenant, éditez le fichier index.html comme suit.

<!DOCTYPE html>
<html>
<head>
    <title>myapp</title>
</head>
<body>
    <h2>Simplest Crud Example</h2>
    <p>This shows a list of names and lets you Create, Update and Delete them.</p>
    {% if names_from_context %}
        <ul>
            {% for name in names_from_context %}
                <li>{{ name.name_value }}  <button>Delete</button> <button>Update</button></li>
            {% endfor %}
        </ul>
    {% else %}
        <h3>Please go to the admin and add a Name under 'MYAPP'</h3>
    {% endif %}
    <h3>Add a Name</h3>
    <button>Create</button>
</body>
</html>

Cela démontre le Read in CRUD. Dans le répertoire myapp , créez un fichier forms.py. Ajoutez le code suivant:

from django import forms
from myapp.models import Name

class NameForm(forms.ModelForm):
    name_value = forms.CharField(max_length=100, help_text = "Enter a name")

    class Meta:
        model = Name
        fields = ('name_value',)

Mettez à jour l' index.html de la manière suivante:

<!DOCTYPE html>
<html>
<head>
    <title>myapp</title>
</head>
<body>
    <h2>Simplest Crud Example</h2>
    <p>This shows a list of names and lets you Create, Update and Delete them.</p>
    {% if names_from_context %}
        <ul>
            {% for name in names_from_context %}
                <li>{{ name.name_value }}  <button>Delete</button> <button>Update</button></li>
            {% endfor %}
        </ul>
    {% else %}
        <h3>Please go to the admin and add a Name under 'MYAPP'</h3>
    {% endif %}
    <h3>Add a Name</h3>
    <form id="name_form" method="post" action="/">
        {% csrf_token %}
        {% for field in form.visible_fields %}
            {{ field.errors }}
            {{ field.help_text }}
            {{ field }}
        {% endfor %}
        <input type="submit" name="submit" value="Create">
    </form>
</body>
</html>

Ensuite, mettez à jour le fichier views.py de la manière suivante:

from django.shortcuts import render, redirect
from myapp.models import Name
from myapp.forms import NameForm

# Create your views here.
def index(request):
    names_from_db = Name.objects.all()

    form = NameForm()

    context_dict = {'names_from_context': names_from_db, 'form': form}

    if request.method == 'POST':
        form = NameForm(request.POST)

        if form.is_valid():
            form.save(commit=True)
            return render(request, 'index.html', context_dict)
        else:
            print(form.errors)    

    return render(request, 'index.html', context_dict)

Redémarrez votre serveur et vous devriez maintenant avoir une version de l'application avec le C in create terminée.

TODO ajouter mise à jour et supprimer