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):
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实战的更多相关文章
- Django之Form、ModelForm 组件
Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...
- Django之Form与ModelForm组件
Django之Form与ModelForm组件 1.Form介绍 Form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 O 保留上次的输入内容 普通方式手写注册功能 vi ...
- python Django之Form组件
python Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试 ...
- Django之Form组件(一)
Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...
- python框架之Django(10)-Form组件
介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
- 〖Python〗-- Django的Form组件
[Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...
- 转载:Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 +? 1 2 3 ...
- Django之Form组件
Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...
- Python之路【第二十一篇】:Django之Form组件
Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...
随机推荐
- SourceTree 3.1.3版本跳过注册
1.进入文件夹 %LocalAppData%\Atlassian\SourceTree\ 找到SourceTree的目录 2.里面添加一个json文件 accounts.json 内容如下: [{&q ...
- time() 在thinkphp 3.2.3 模板格式化输出
{$ltime|date="Y-m-d",###}
- 华为高斯DB(for MySQL)搭建演示
产品架构 云数据库 GaussDB(for MySQL)整体架构自下向上分为三层. 存储层: 基于华为DFV存储,提供分布式.强一致和高性能的存储能力,此层来保障数据的可靠性以及横向扩展能力. 存储抽 ...
- fastboot刷机小脚本
在Windows系统下,一般刷机命令是在cmd路径下执行如下命令: 1.adb reboot bootloader2.fastboot flash boot +boot路径3.fastboot fla ...
- WPF Combox实现下拉多选,可选中多个值
自定义多选MultiCombox,可以实现下拉列表多选 using System; using System.Collections.Generic; using System.Collections ...
- 内置函数 strlen
1 //内置函数 strlen 2 //计算字符串的实际长度,不含字符串结束标准\0 3 4 #include<stdio.h> 5 #include<stdlib.h> 6 ...
- 算法竞赛中的常用JAVA API :HashSet 和 TreeSet(转载)
算法竞赛中的常用JAVA API :HashSet 和 TreeSet set set容器的特点是不包含重复元素,也就是说自动去重. HashSet HashSet基于哈希表实现,无序. add(E ...
- LinuxDHCP配置
目录 一.DHCP服务 1.1.了解DHCP服务 1.2.使用DHCP的好处 1.3.DHCP的分配方式 1.4.DHCP的租约过程 客户机请求IP地址 重新登录 更新租约 1.5.使用DHCP动态配 ...
- 1065 A+B and C (64bit) (20分) 测试点3 别用cin
cin的话,处理不了这么大的数?? 要拐回scanf("%lld"): 啊啦搜
- NOIP 模拟 $13\; \text{卡常题}$
题解 一道环套树的最小点覆盖题目,所谓环套树就是有在 \(n\) 个点 \(n\) 条边的无向联通图中存在一个环 我们可以发现其去掉一条环上的边后就是一棵树 那么对于此题,我们把所有 \(x\) 方点 ...