模型:

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):
if request.method == 'GET':
id = request.GET.get('id') #获取要编辑的书籍的id
book = Book.objects.get(id=id) #取出id值对应的书籍对象
b_obj = BookForm(instance=book) # ***这一步实例化的时候,需要传入书籍对象,生成表单的时候就会默认填充这些数据,这也是和添加操作唯一的不同之处
return render(request,'edit.html',{'b_obj': b_obj})
else:
#除了 b_obj = BookForm(instance=book) ,其余操作和添加相同
b_obj = BookForm(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>

  

结果展示:

Django的form组件——ModelForm实战的更多相关文章

  1. Django之Form、ModelForm 组件

    Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...

  2. Django之Form与ModelForm组件

    Django之Form与ModelForm组件 1.Form介绍 Form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 O 保留上次的输入内容 普通方式手写注册功能 vi ...

  3. python Django之Form组件

    python Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试 ...

  4. Django之Form组件(一)

    Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...

  5. python框架之Django(10)-Form组件

    介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...

  6. 〖Python〗-- Django的Form组件

    [Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...

  7. 转载:Django之Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 +? 1 2 3 ...

  8. Django之Form组件

    Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...

  9. Python之路【第二十一篇】:Django之Form组件

    Django之Form组件   Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...

随机推荐

  1. <textarea></textarea>标签的placeholder属性不生效问题

    <textarea></textarea>标签的placeholder属性不生效问题   1.在用到<textarea></textarea>标签时,设 ...

  2. java顺序结构、循环结构、选择结构

    java顺序结构.选择结构.循环结构 顺序结构: 语句与语句之间,框与框之间是从上到下的顺序进行的,它是由若干个依次执行的处理步骤执组成的,它是任何一个算法都不离开的一种基本算法结构. 选择结构: 1 ...

  3. SpringCloud升级之路2020.0.x版-3.Eureka Server 与 API 网关要考虑的问题

    本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ 之前我们提到了 ...

  4. Mybatis学习笔记导航

    Mybatis小白快速入门 简介 本人是一个Java学习者,最近才开始在博客园上分享自己的学习经验,同时帮助那些想要学习的uu们,相关学习视频在小破站的狂神说,狂神真的是我学习到现在觉得最GAN的老师 ...

  5. SpringBoot @ModelAttribute 用法

    前言 项目中遇到这么一个使用场景,用户的登录信息给予token保存,在需要有登录信息的地方,每次都要去获取用户Id,但每次在请求方法中去获取用户信息,代码重复,冗余,很low于是想到了用@ModelA ...

  6. FreeRTOS-05-队列

    说明 本文仅作为学习FreeRTOS的记录文档,作为初学者肯定很多理解不对甚至错误的地方,望网友指正. FreeRTOS是一个RTOS(实时操作系统)系统,支持抢占式.合作式和时间片调度.适用于微处理 ...

  7. make CLI Comfortable When Working in Multiple Directoies

    alias alias is command-line counterpart of hotstring of AutoHotkey, for example: alias vboat='vi ~/d ...

  8. Shell-07-文本处理grep

    文本处理sed sed:流编辑器,过滤和替换文本 工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并且清空模式空间. 然后再将下一行读入模式空间进行处理输出,以此类推,直到最 ...

  9. Java 常用类库与技巧【笔记】

    Java 常用类库与技巧[笔记] Java异常体系 Java异常相关知识 Java在其创立的时候就设置了比较有效的处理机制,其异常处理机制主要回答了三个问题:what,where,why what表示 ...

  10. 【笔记】主成分分析法PCA的原理及计算

    主成分分析法PCA的原理及计算 主成分分析法 主成分分析法(Principal Component Analysis),简称PCA,其是一种统计方法,是数据降维,简化数据集的一种常用的方法 它本身是一 ...