Django
CRUD in Django
Zoeken…
** Eenvoudigste CRUD-voorbeeld **
Als u deze stappen onbekend vindt, kunt u overwegen hier te beginnen. Merk op dat deze stappen afkomstig zijn van Stack Overflow Documentation.
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
myproject / settings.py Installeer de app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
Maak een bestand met de naam urls.py
in de myapp- directory en werk dit bij met de volgende weergave.
from django.conf.urls import url
from myapp import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
Werk het andere urls.py
bestand bij met de volgende inhoud.
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),
]
Maak een map met de naam templates
in de myapp- directory. Maak vervolgens een bestand met de naam index.html
in de map met sjablonen . Vul het met de volgende inhoud.
<!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>
We hebben ook een weergave nodig om index.html te tonen die we kunnen maken door het views.py- bestand als volgt te bewerken:
from django.shortcuts import render, redirect
# Create your views here.
def index(request):
return render(request, 'index.html', {})
Je hebt nu de basis waar je vanaf gaat werken. De volgende stap is het maken van een model. Dit is het eenvoudigste voorbeeld dat mogelijk is, dus voeg in uw map models.py de volgende code toe.
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
Hiermee maakt u een model van een Name-object dat we aan de database toevoegen met de volgende opdrachten vanaf de opdrachtregel.
python manage.py createsuperuser
python manage.py makemigrations
python manage.py migrate
U zou enkele operaties moeten zien die door Django worden uitgevoerd. Deze stellen de tabellen in en creëren een superuser die toegang heeft tot de admin-database vanuit een door Django aangedreven admin-weergave. Daarover gesproken, laten we ons nieuwe model registreren bij de admin-weergave. Ga naar admin.py en voeg de volgende code toe.
from django.contrib import admin
from myapp.models import Name
# Register your models here.
admin.site.register(Name)
Terug op de opdrachtregel kunt u de server nu laten draaien met de opdracht python manage.py runserver
. U zou http: // localhost: 8000 / moeten kunnen bezoeken en uw app kunnen zien. Ga vervolgens naar http: // localhost: 8000 / admin zodat u een naam aan uw project kunt toevoegen. Log in en voeg een naam toe onder de MYAPP-tabel. We hebben het voorbeeld eenvoudig gehouden, dus zorg dat het minder dan 100 tekens bevat.
Om toegang te krijgen tot de naam, moet u deze ergens weergeven. Bewerk de indexfunctie in views.py om alle objecten Name uit de database te halen.
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)
Bewerk nu het bestand index.html als volgt.
<!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>
Dat toont het lezen in CRUD. Maak in de map myapp een form.py-bestand. Voeg de volgende code toe:
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',)
Werk index.html op de volgende manier bij:
<!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>
Werk vervolgens de views.py op de volgende manier bij:
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)
Start uw server opnieuw op en u zou nu een werkende versie van de app moeten hebben met de C in create voltooid.
TODO update toevoegen en verwijderen