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. ...
随机推荐
- Sunset靶机
仅供个人娱乐 靶机信息 https://www.vulnhub.com/entry/sunset-sunrise,406/ 一.主机探测 二.信息收集 nmap -sS -sV -T5 -A -p- ...
- Dubbo 实现一个Load Balance (用于灰度发布)
Dubbo 可以实现的扩展很多, 官方文档在这: https://dubbo.apache.org/zh/docs/v2.7/dev/impls/ (太简单了....) 下面我们实现一个Load Ba ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- python,ctf笔记随笔
一.在centos虚拟机中安装pyhton3环境: 安装pip3:yum install python36-pip 将pip升级到最新版本:pip3 install --upgrade pip 运行p ...
- 基于Java和Bytemd用120行代码实现一个桌面版Markdown编辑器
前提 某一天点开掘金的写作界面的时候,发现了内置Markdown编辑器有一个Github的图标,点进去就是一个开源的Markdown编辑器项目bytemd(https://github.com/byt ...
- 【笔记】numpy.array的常用基本运算以及对数据的操作
numpy.array的基本运算以及对数据的操作 设置一个问题,例如 这种只需要基本的运算就可以实现 类似的 numpy对向量的运算进行了优化,速度是相当快的,这种被称为universal funct ...
- brew换源
转自:https://blog.csdn.net/gorwayne/article/details/107359912 第一步,替换brew.git cd "$(brew --repo)&q ...
- Qt项目简易开发原理及常见问题解决
一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->免费->QtDev 注释:为了方便qt全功能开发,QtDev中包含 ...
- Django3使用WebSocket实现WebShell
前言 最近工作中需要开发前端操作远程虚拟机的功能,简称WebShell. 基于当前的技术栈为react+django,调研了一会发现大部分的后端实现都是django+channels来实现websoc ...
- NOIP 模拟 $12\; \text{简单的填数}$
题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...