最簡單的 CRUD 示例

如果你發現這些步驟不熟悉,請考慮從此處開始。請注意這些步驟來自 Stack Overflow Documentation。

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

myproject / settings.py 安裝應用程式

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

myapp 目錄中建立一個名為 urls.py 的檔案,並使用以下檢視對其進行更新。

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

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

使用以下內容更新其他 urls.py 檔案。

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

myapp 目錄中建立名為 templates 的資料夾。然後在 templates 目錄中建立一個名為 index.html 的檔案。填寫以下內容。

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

我們還需要一個檢視來顯示我們可以通過編輯 views.py 檔案建立的 index.html ,如下所示: ****

from django.shortcuts import render, redirect

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

你現在有了你將要工作的基礎。下一步是建立一個模型。這是最簡單的示例,因此在 models.py 資料夾中新增以下程式碼。

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

這將建立一個 Name 物件的模型,我們將使用命令列中的以下命令將其新增到資料庫中。

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

你應該看到 Django 執行的一些操作。這些設定表並建立一個超級使用者,可以從 Django 支援的管理檢視訪問管理資料庫。說到這個,讓我們用 admin 檢視註冊我們的新模型。轉到 admin.py 並新增以下程式碼。

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

admin.site.register(Name)

回到命令列,你現在可以使用 python manage.py runserver 命令啟動伺服器。你應該能夠訪問 http:// localhost:8000 / 並檢視你的應用程式。請導航到 http:// localhost:8000 / admin, 以便為專案新增名稱。登入並在 MYAPP 表下新增一個名稱,我們為示例保持簡單,因此請確保它少於 100 個字元。

要訪問該名稱,你需要在某處顯示它。編輯 views.py 中的索引函式以從資料庫中獲取所有 Name 物件。

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)

現在將 index.html 檔案編輯為以下內容。

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

這證明了讀入 CRUD。在 myapp 目錄中建立一個 forms.py 檔案。新增以下程式碼:

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

以下列方式更新 index.html

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

接下來以下列方式更新 views.py

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)

重新啟動伺服器,你現在應該擁有一個工作版本的應用程式,其中 C in create completed。

TODO 新增更新和刪除