Django项目设计一个简单CRUD

news/2025/2/24 6:21:22

在Django中实现一个学生类(Student)的CRUD(创建、读取、更新、删除)操作需要几个步骤,包括定义模型、创建视图、设置URL、以及配置模板。以下是一个基本的实现步骤:

1. 创建Django项目和应用

首先,确保你已经安装了Django,然后创建一个新的Django项目和应用:

django-admin startproject student_crud_project
cd student_crud_project
django-admin startapp students

2. 定义模型(Model)

students/models.py中定义学生模型:

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    age = models.IntegerField()

    def __str__(self):
        return self.name

2.1 配置MySQL数据库,在settings.py文件中配置DATABASES


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

2.2 在自己创建的app的init文件中,这是默认数据库连接替换成pymysql的连接

import pymysql
pymysql.install_as_MySQLdb()

3. 注册模型

students/admin.py中注册模型以便在Django admin中管理:

from django.contrib import admin
from .models import Student

admin.site.register(Student)

4. 创建和应用迁移

运行以下命令以创建和应用数据库迁移:

python manage.py makemigrations

python manage.py migrate

 5. 创建表单(Form)

students/forms.py中创建学生表单:

from django import forms
from .models import Student

class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = ['name', 'email', 'age']

6. 创建视图(Views)

students/views.py中创建CRUD视图:

from django.shortcuts import render, get_object_or_404, redirect
from .models import Student
from .forms import StudentForm

# List all students
def student_list(request):
    students = Student.objects.all()
    return render(request, 'students/student_list.html', {'students': students})

# Create a new student
def student_create(request):
    if request.method == 'POST':
        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('student_list')
    else:
        form = StudentForm()
    return render(request, 'students/student_form.html', {'form': form})

# Update an existing student
def student_update(request, student_id):
    student = get_object_or_404(Student, id=student_id)
    if request.method == 'POST':
        form = StudentForm(request.POST, instance=student)
        if form.is_valid():
            form.save()
            return redirect('student_list')
    else:
        form = StudentForm(instance=student)
    return render(request, 'students/student_form.html', {'form': form})

# Delete an existing student
def student_delete(request, student_id):
    student = get_object_or_404(Student, id=student_id)
    if request.method == 'POST':
        student.delete()
        return redirect('student_list')
    return render(request, 'students/student_confirm_delete.html', {'student': student})

7. 设置URL

students/urls.py中设置URL路由:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.student_list, name='student_list'),
    path('create/', views.student_create, name='student_create'),
    path('<int:student_id>/update/', views.student_update, name='student_update'),
    path('<int:student_id>/delete/', views.student_delete, name='student_delete'),
]

然后在student_crud_project/urls.py中包含应用的URL:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('students/', include('students.urls')),
]

8. 创建模板

students/templates/students/目录下创建以下模板文件:

  • student_list.html
  • student_form.html
  • student_confirm_delete.html
student_list.html
<!DOCTYPE html>
<html>
<head>
    <title>Student List</title>
</head>
<body>
    <h1>Students</h1>
    <ul>
        {% for student in students %}
        <li>
            {{ student.name }} - {{ student.email }} - {{ student.age }}
            <a href="{% url 'student_update' student.id %}">Edit</a>
            <a href="{% url 'student_delete' student.id %}">Delete</a>
        </li>
        {% endfor %}
    </ul>
    <a href="{% url 'student_create' %}">Create New Student</a>
</body>
</html>
student_form.html
<!DOCTYPE html>
<html>
<head>
    <title>Student Form</title>
</head>
<body>
    <h1>Create/Update Student</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save</button>
    </form>
    <a href="{% url 'student_list' %}">Cancel</a>
</body>
</html>
student_confirm_delete.html
<!DOCTYPE html>
<html>
<head>
    <title>Confirm Delete</title>
</head>
<body>
    <h1>Delete Student</h1>
    <p>Are you sure you want to delete "{{ student.name }}"?</p>
    <form method="post">
        {% csrf_token %}
        <button type="submit">Delete</button>
    </form>
    <a href="{% url 'student_list' %}">Cancel</a>
</body>
</html>

9. 启动服务器

最后,启动Django开发服务器:

python manage.py runserver

现在,你可以通过访问http://127.0.0.1:8000/students/来查看和操作学生记录。

这就是在Django中实现学生类CRUD操作的基本步骤。你可以根据需要进一步扩展和自定义这些功能。


http://www.niftyadmin.cn/n/5864023.html

相关文章

easyexcel和poi同时存在版本问题,使用easyexcel导出excel设置日期格式

这两天在使用easyexcel导出excel的时候日期格式全都是字符串导致导出的excel列无法筛选 后来调整了一下终于弄好了&#xff0c;看一下最终效果 这里涉及到easyexcel和poi版本冲突的问题&#xff0c;一直没搞定&#xff0c;最后狠下心来把所有的都升级到了最新版&#xff0c;然…

网络安全之攻防笔记--通用安全漏洞SQL注入sqlmapOraclemongodbDB2

通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2 数据库类型 ACCESS 特性 没数据库用户 没数据库权限 没数据库查询参数 没有高权限注入说法 暴力猜解&#xff0c;借助字典得到数据 注入方式 联合注入 偏移注入 表名列名猜解不到 偏移注入 MySQL 低权限 常…

基于Flask的短视频流量数据可视化系统的设计与实现

【Flask】基于Flask的短视频流量数据可视化系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着移动互联网的普及和短视频平台的兴起&#xff0c;短视频已成为人们日常生活中不…

第五章:工程化实践 - 第四节 - Tailwind CSS 团队协作规范

在团队开发中使用 Tailwind CSS&#xff0c;需要建立统一的开发规范和工作流程&#xff0c;以确保代码质量和开发效率。本节将详细介绍团队协作中的各项规范和最佳实践。 开发规范 命名规范 // 组件命名规范 const Button: React.FC () > {return (<button className…

每日Attention学习24——Strip Convolution Block

模块出处 [TIP 21] [link] CoANet: Connectivity Attention Network for Road Extraction From Satellite Imagery 模块名称 Strip Convolution Block (SCB) 模块作用 多方向条形特征提取 模块结构 模块特点 类PSP设计&#xff0c;采用四个并行分支提取不同维度的信息相比于…

《论面向对象的建模及应用》审题技巧 - 系统架构设计师

论面向对象的建模及应用写作框架 一、考点概述 本论题“论面向对象的建模及应用”主要考察软件测试工程师对面向对象建模技术的理解和应用能力。具体涵盖以下几个方面&#xff1a; 面向对象建模的基本概念 &#xff1a;这包括理解面向对象编程&#xff08;OOP&#xff09;的基…

分布式服务注册与发现

目录 核心概念 常见实现方式 常见工具与框架 优点 挑战 应用场景 总结 分布式服务注册与发现是微服务架构中的关键组件,用于动态管理服务的注册、发现和调用。它帮助服务在分布式环境中自动找到彼此,确保系统的高可用性和可扩展性。 核心概念 服务注册: 服务启动时向…

SwinTransformer 改进:添加SimAM轻量级注意力机制

目录 1. SimAM轻量级注意力机制 2. SwinTransformer + SimAM 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. SimAM轻量级注意力机制 SimAM(Simple Attention Mechanism)是一种轻量级的注意力机制,旨在通过简单的计算…