个性化阅读
专注于IT技术分析

Django CRUD(创建读取更新删除)示例

本文概述

要创建执行CRUD操作的Django应用程序, 请执行以下步骤。

1.创建一个项目

$ django-admin startproject crudexample
Django crud示例创建项目

2.创建一个应用

$ python3 manage.py startapp employee
Django crud示例创建应用

3.项目结构

最初, 我们的项目如下所示:

Django Crud示例项目结构

4.数据库设置

在mysql中创建数据库djangodb, 并配置到django项目的settings.py文件中。参见示例。

// settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 'NAME': 'djangodb', 'USER':'root', 'PASSWORD':'mysql', 'HOST':'localhost', 'PORT':'3306'
    }
}

5.建立模型

将以下代码放入models.py文件中。

// models.py

from django.db import models
class Employee(models.Model):
    eid = models.CharField(max_length=20)
    ename = models.CharField(max_length=100)
    eemail = models.EmailField()
    econtact = models.CharField(max_length=15)
    class Meta:
        db_table = "employee"

6.创建一个ModelForm

// forms.py

from django import forms
from employee.models import Employee
class EmployeeForm(forms.ModelForm):
    class Meta:
        model = Employee
        fields = "__all__"

7.创建视图功能

// views.py

from django.shortcuts import render, redirect
from employee.forms import EmployeeForm
from employee.models import Employee
# Create your views here.
def emp(request):
    if request.method == "POST":
        form = EmployeeForm(request.POST)
        if form.is_valid():
            try:
                form.save()
                return redirect('/show')
            except:
                pass
    else:
        form = EmployeeForm()
    return render(request, 'index.html', {'form':form})
def show(request):
    employees = Employee.objects.all()
    return render(request, "show.html", {'employees':employees})
def edit(request, id):
    employee = Employee.objects.get(id=id)
    return render(request, 'edit.html', {'employee':employee})
def update(request, id):
    employee = Employee.objects.get(id=id)
    form = EmployeeForm(request.POST, instance = employee)
    if form.is_valid():
        form.save()
        return redirect("/show")
    return render(request, 'edit.html', {'employee': employee})
def destroy(request, id):
    employee = Employee.objects.get(id=id)
    employee.delete()
    return redirect("/show")

8.提供路由

提供URL模式以使用视图功能进行映射。

// urls.py

from django.contrib import admin
from django.urls import path
from employee import views
urlpatterns = [
    path('admin/', admin.site.urls), path('emp', views.emp), path('show', views.show), path('edit/<int:id>', views.edit), path('update/<int:id>', views.update), path('delete/<int:id>', views.destroy), ]

9.组织模板

在员工应用程序内创建一个模板文件夹, 并在目录内创建三个(索引, 编辑, 显示)html文件。每个代码如下。

// index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    {% load staticfiles %}
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>
</head>
<body>
<form method="POST" class="post-form" action="/emp">
        {% csrf_token %}
    <div class="container">
<br>
    <div class="form-group row">
    <label class="col-sm-1 col-form-label"></label>
    <div class="col-sm-4">
    <h3>Enter Details</h3>
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Id:</label>
    <div class="col-sm-4">
      {{ form.eid }}
    </div>
  </div>
  <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Name:</label>
    <div class="col-sm-4">
      {{ form.ename }}
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Email:</label>
    <div class="col-sm-4">
      {{ form.eemail }}
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Contact:</label>
    <div class="col-sm-4">
      {{ form.econtact }}
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-1 col-form-label"></label>
    <div class="col-sm-4">
    <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
    </div>
</form>
</body>
</html>

// show.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Employee Records</title>
     {% load staticfiles %}
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>
</head>
<body>
<table class="table table-striped table-bordered table-sm">
    <thead class="thead-dark">
    <tr>
        <th>Employee ID</th>
        <th>Employee Name</th>
        <th>Employee Email</th>
        <th>Employee Contact</th>
        <th>Actions</th>
    </tr>
    </thead>
    <tbody>
{% for employee in employees %}
    <tr>
        <td>{{ employee.eid }}</td>
        <td>{{ employee.ename }}</td>
        <td>{{ employee.eemail }}</td>
        <td>{{ employee.econtact }}</td>
        <td>
            <a href="/edit/{{ employee.id }}"><span class="glyphicon glyphicon-pencil" >Edit</span></a>
            <a href="/delete/{{ employee.id }}">Delete</a>
        </td>
    </tr>
{% endfor %}
    </tbody>
</table>
<br>
<br>
<center><a href="/emp" class="btn btn-primary">Add New Record</a></center>
</body>
</html>

// edit.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    {% load staticfiles %}
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>
</head>
<body>
<form method="POST" class="post-form" action="/update/{{employee.id}}">
        {% csrf_token %}
    <div class="container">
<br>
    <div class="form-group row">
    <label class="col-sm-1 col-form-label"></label>
    <div class="col-sm-4">
    <h3>Update Details</h3>
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Id:</label>
    <div class="col-sm-4">
        <input type="text" name="eid" id="id_eid" required maxlength="20" value="{{ employee.eid }}"/>
    </div>
  </div>
  <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Name:</label>
    <div class="col-sm-4">
        <input type="text" name="ename" id="id_ename" required maxlength="100" value="{{ employee.ename }}" />
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Email:</label>
    <div class="col-sm-4">
        <input type="email" name="eemail" id="id_eemail" required maxlength="254" value="{{ employee.eemail }}" />
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-2 col-form-label">Employee Contact:</label>
    <div class="col-sm-4">
        <input type="text" name="econtact" id="id_econtact" required maxlength="15" value="{{ employee.econtact }}" />
    </div>
  </div>
    <div class="form-group row">
    <label class="col-sm-1 col-form-label"></label>
    <div class="col-sm-4">
    <button type="submit" class="btn btn-success">Update</button>
    </div>
  </div>
    </div>
</form>
</body>
</html>

10.静态文件处理

在员工应用中创建一个static / css文件夹, 然后在其中放置一个CSS。单击此处下载css文件。

11.项目结构

Django crudexample项目结构1

12.创建迁移

使用以下命令为创建的模型雇员创建迁移。

$ python3 manage.py makemigrations
Django Crud示例makemigrations

迁移后, 再执行一条命令以反映向数据库的迁移。但在此之前, 请在settings.py文件的INSTALLED_APPS中提及应用程序(员工)的名称。

// settings.py

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

运行命令以迁移迁移。

$ python3 manage.py migrate
Django Crud示例迁移

现在, 我们的应用程序已成功连接并在数据库中创建了表。它创建了10个用于处理项目(会话, 身份验证等)的默认表, 以及我们创建的模型的一个表。

请参阅在migrate命令之后创建的表的列表。

迁移命令后创建的表

运行服务器

要运行服务器, 请使用以下命令。

$ python3 manage.py runserver
Django Crud示例运行服务器

访问浏览器

通过输入localhost:8000 / show访问该应用程序, 它将显示所有可用的员工记录。

最初, 没有记录。因此, 它没有显示记录消息。

Django crud示例访问浏览器

添加记录

单击添加新记录按钮, 然后填写详细信息。参见示例。

Django Crud示例添加记录

填写细节。

Django Crud示例添加记录1

提交记录, 并看到提交后显示已保存的记录。

Django Crud示例添加记录已保存

本节还允许, 更新和删除操作列中的记录。

保存了几条记录后, 现在我们有了以下记录。

保存记录后的Django Crud示例

更新记录

通过单击编辑按钮来更新Mohan的记录。它将在编辑模式下显示Mohan的记录。

Django Crud示例更新记录

让我们假设我将mohan更新为mohan kumar, 然后单击更新按钮。它立即更新记录。参见示例。

Django Crud示例更新记录1

单击更新按钮, 它将重定向到下一页。看到名称已更新。

Django Crud示例更新记录2

同样, 我们也可以通过单击删除链接来删除记录。

删除记录

假设我要删除Sohan, 可以通过单击删除按钮轻松完成。参见示例。

Django Crud示例删除记录

删除后, 我们留下了以下记录。

删除记录后的Django Crud示例

好了, 我们已经使用Django成功创建了CRUD应用程序。

这个完整的项目可以在这里下载。

赞(0)
未经允许不得转载:srcmini » Django CRUD(创建读取更新删除)示例

评论 抢沙发

评论前必须登录!