??系列文章目录
第一章?:Django安装与配置虚拟环境
第二章:django各模块的作用以及参数说明
第一章?:Django安装与配置虚拟环境
第四章:django请求
第五章:django会话
第六章:django中的cookie与session
第七章:视图类
第八章:模型类
第九章:django与mysql连接与迁移
第十章:django模型类(二)
第十一章:django之后台管理
第十二章:Restful风格介绍
第十三章:DRF的使用
前言:
在django中有一个类似于drf中序列化的类,form表单类,它可以自动生成前端的form表单,并加入自动验证,在form子类中,有一个modelform的子类,可以类似于drf一样关联模型类,并把模型类的指定字段生成为form表单。
目录
??系列文章目录
一.Form使用
1.form.py
2.views.py
3.urls.py
4.register.html
4.效果
二.ModelForm使用
?1.form.py
2.views.py
3.urls.py
4.register.html
4.效果
三.使用form类保存到对应模型类
1.views.py
2.效果
四.总结
所有的form类放在一个form.py文件中,当然你也可以放在别处,使用时候导入即可
from django import forms
class MsgForm(forms.Form):
name = forms.CharField(label='名称')
title = forms.CharField(label='标题', max_length=10, min_length=2, error_messages={'msg': '长度不符合'})
2.views.py
class register(View):
def get(self, req):
form = MsgForm()
return render(req, 'register.html', {'form': form})
def post(self, req):
return JsonResponse({"msg": "收到!over"})
3.urls.py
path('register', views.register.as_view()),
4.register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单</title>
</head>
<body>
<form method="post">
<table>
{{form}}
<tr>
<td><button type="submit">提交</button> </td>
</tr>
</table>
</form>
</body>
</html>
4.效果
?自动生成的源代码
<tr><th><label for="id_name">名称:</label></th><td><input type="text" name="name" required id="id_name"></td></tr>
<tr><th><label for="id_title">标题:</label></th><td><input type="text" name="title" maxlength="10" minlength="2" required id="id_title"></td></tr>
from django import forms
from books.models import BookInfo
class MsgBookForm(forms.ModelForm):
class Meta:
model = BookInfo
fields = "__all__"
2.views.py
class register(View):
def get(self, req):
form = MsgBookForm()
return render(req, 'register.html', {'form': form})
def post(self, req):
return JsonResponse({"msg": "收到!over"})
3.urls.py
path('register', views.register.as_view()),
4.register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单</title>
</head>
<body>
<form method="post">
<table>
{{form}}
<tr>
<td><button type="submit">提交</button> </td>
</tr>
</table>
</form>
</body>
</html>
4.效果
?
?自动生成的源代码
<tr><th><label for="id_name">书名:</label></th><td><input type="text" name="name" maxlength="20" required id="id_name"></td></tr>
<tr><th><label for="id_chuban_date">出版日期:</label></th><td><input type="text" name="chuban_date" value="" required id="id_chuban_date"></td></tr>
<tr><th><label for="id_read_count">阅读量:</label></th><td><input type="number" name="read_count" value="0" required id="id_read_count"></td></tr>
<tr><th><label for="id_pinglun_count">评论量:</label></th><td><input type="number" name="pinglun_count" value="0" required id="id_pinglun_count"></td></tr>
<tr><th><label for="id_is_del">是否可用:</label></th><td><input type="checkbox" name="is_del" id="id_is_del"></td></tr>
1.views.py
class register(View):
def get(self, req):
form = MsgBookForm()
return render(req, 'register.html', {'form': form})
def post(self, req):
# 将前端发送过来的数据保存到form
form = MsgBookForm(req.POST)
# 验证前端传来的数据是否按照要求
form.is_valid()
# 保存前端的数据
form.save()
return JsonResponse({"msg": form.data})
2.效果
?
提交后
?
四.总结
在form类中就已经实现了模型类的序列化与反序列化,但是必须要使用render模板渲染的方式去把表单数据发送到前端,无法做到前后端分离。
|