IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django的form组件——ModelForm实战练习 -> 正文阅读

[Python知识库]Django的form组件——ModelForm实战练习

模型

from django.db import models
 
 
class Book(models.Model):
    book_name = models.CharField(max_length=30)
    book_publisher = models.CharField(max_length=20)
    book_author = models.CharField(max_length=20)
 
    class Meta:
        db_table = 'book_tb'

路由控制器

from django.contrib import admin
from django.urls import path
from app01 import views
 
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',views.index),     #首页的路由
    path('add/',views.add),         #添加数据的路由
    path('edit/',views.edit),       #编辑数据的路由
    path('delete/',views.delete)    #删除数据的路由
]

视图函数

from django.shortcuts import render,HttpResponse,redirect
from django import forms
from app01.models import Book
 
#定义一个form表单的类,使用Book模型
class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ['book_name','book_publisher','book_author']   #生成表单的时候显示的字段
 
 
 
#首页展示所有书籍(常规操作)
def index(request):
    books = Book.objects.all()
    return render(request,'index.html',{'books': books})
 
 
 
#添加书籍(使用ModelForm的功能)
def add(request):
    if request.method == 'GET':
        b_obj = BookForm()
        return render(request,'add.html',{'b_obj': b_obj})  #返回一个添加页面,展示一个空的form表单
    else:
        b_obj = BookForm(request.POST)  #当用户提交数据后实例化一个拥有提交了的数据的对象
        if b_obj.is_valid():            #如果数据通过校验
            b_obj.save()                #保存到数据库中,添加一条记录
        return redirect('/index/')      #提交成功后跳转到首页
 
 
 
#编辑书籍(使用ModelForm的功能)
def edit(request):
    id = request.GET.get('id')  #获取要编辑的书籍的id
    book = Book.objects.get(id=id)  #取出id值对应的书籍对象
    if request.method == 'GET':
        b_obj = BookForm(instance=book)  # ***这一步实例化的时候,需要传入书籍对象,生成表单的时候就会默认填充这些数据
        return render(request,'edit.html',{'b_obj': b_obj})
    else:
        b_obj = BookForm(instance=book,data=request.POST)  # ***此处需要传入编辑的书籍对象,和提交的数据
        if b_obj.is_valid():
            b_obj.save()
        return redirect('/index/')
 
 
 
#删除书籍(常规操作)
def delete(request):
    id = request.GET.get('id')  # 获取要删除的书籍的id
    book = Book.objects.get(id=id)  # 取出id值对应的书籍对象
    book.delete()      #从数据库中删除这个书籍对象
    return redirect('/index/')   #删除后跳转至首页

首页模板:index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Index</title>
</head>
<body>
    <div style="width: 60%;margin-left: 200px;">
        <button><a href="/add/">添加</a></button>
        <table style="width: 100%">
            <tr>
                <th style="border: red 1px solid">ID</th>
                <th style="border: red 1px solid">书名</th>
                <th style="border: red 1px solid">出版社</th>
                <th style="border: red 1px solid">作者</th>
                <th style="border: red 1px solid">编辑</th>
                <th style="border: red 1px solid">删除</th>
            </tr>
            {% for book in books %}
                <tr>
                    <td style="border: red 1px solid">{{ book.id }}</td>
                    <td style="border: red 1px solid">{{ book.book_name }}</td>
                    <td style="border: red 1px solid">{{ book.book_publisher }}</td>
                    <td style="border: red 1px solid">{{ book.book_author }}</td>
                    <td style="border: red 1px solid"><button><a href="/edit/?id={{ book.id }}">编辑</a></button></td>  {# 需要传入要编辑的书籍的id #}
                    <td style="border: red 1px solid"><button><a href="/delete/?id={{ book.id }}">删除</a></button></td> {# 需要传入要删除的书籍的id #}
                </tr>
            {% endfor %}
 
        </table>
    </div>
</body>
</html>

添加页面:add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加页面</title>
</head>
<body>
    <div style="width: 60%;margin-left: 200px;">
        <form action="" method="post">
            {% csrf_token %}
            <div>
                {{ b_obj.as_p }}
            </div>
 
            <input type="submit" value="提交">
        </form>
    </div>
</body>
</html>

编辑页面:edit.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑页面</title>
</head>
<body>
    <div style="width: 60%;margin-left: 200px;">
        <form action="" method="post">
            {% csrf_token %}
            <div>
                {{ b_obj.as_p }}
            </div>
 
            <input type="submit" value="提交">
        </form>
    </div>
</body>
</html>

效果:

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:07:15  更:2021-09-12 13:08:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:51:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码