Buscar..


** Ejemplo de CRUD más simple **

Si encuentra estos pasos desconocidos, considere comenzar aquí . Tenga en cuenta que estos pasos provienen de la documentación de desbordamiento de pila.

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

myproject / settings.py Instala la aplicación

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

Cree un archivo llamado urls.py dentro del directorio myapp y urls.py con la siguiente vista.

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

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

Actualice el otro archivo urls.py con el siguiente contenido.

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

Crea una carpeta llamada templates dentro del directorio myapp . Luego cree un archivo llamado index.html dentro del directorio de plantillas . Rellénalo con el siguiente contenido.

<!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>

También necesitamos una vista para mostrar index.html que podemos crear editando el archivo views.py de esta manera:

from django.shortcuts import render, redirect

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

Ahora tienes la base con la que vas a trabajar. El siguiente paso es crear un modelo. Este es el ejemplo más simple posible, así que en su carpeta models.py agregue el siguiente código.

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

Esto crea un modelo de un objeto Nombre que agregaremos a la base de datos con los siguientes comandos desde la línea de comandos.

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

Deberías ver algunas operaciones realizadas por Django. Estos configuran las tablas y crean un superusuario que puede acceder a la base de datos de administración desde una vista de administración potenciada por Django. Hablando de eso, permite registrar nuestro nuevo modelo con la vista de administrador. Vaya a admin.py y agregue el siguiente código.

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

admin.site.register(Name)

De vuelta en la línea de comandos, ahora puede activar el servidor con el comando de python manage.py runserver . Debería poder visitar http: // localhost: 8000 / y ver su aplicación. Luego, vaya a http: // localhost: 8000 / admin para poder agregar un nombre a su proyecto. Inicie sesión y agregue un Nombre debajo de la tabla MYAPP, lo mantuvimos simple para el ejemplo, así que asegúrese de que tenga menos de 100 caracteres.

Para acceder al nombre necesitas mostrarlo en algún lugar. Edite la función de índice en views.py para obtener todos los objetos de Nombre de la base de datos.

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)

Ahora edite el archivo index.html a lo siguiente.

<!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>

Eso demuestra la lectura en CRUD. Dentro del directorio myapp crea un archivo forms.py. Agregue el siguiente código:

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

Actualice el index.html de la siguiente manera:

<!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>

A continuación actualiza el views.py de la siguiente manera:

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)

Reinicie su servidor y ahora debería tener una versión de trabajo de la aplicación con la C en la creación completada.

TODO agregar actualización y eliminar



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow