[oldboy-django][2深入django]学生管理(Form)-- 添加(美化Form表单:通过form给前端标签添加属性)
1 在student_list添加一个a标签,
- <p><a href="/app01/add_student" class="btn btn-primary">添加</a> </p>
2 urls分发路由
- url(r'^app01/', include('app01.urls')),
- url(r'^add_student$', views.add_student),
3 前端
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
- <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css">
- </head>
- <body>
- <div style="width:500px;margin:0 auto">
- <h4 style="margin-left: 25px;">添加学生</h4>
- <form class="form-horizontal" action="/app01/add_student" method="POST">
- {% csrf_token %}
- <div class="form-group">
- <label class="col-sm-2 control-label">姓名:</label>
- <div class="col-sm-10">
- {{ obj.name }}{{ obj.errors.name.0 }}
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm-2 control-label">年龄:</label>
- <div class="col-sm-10">
- {{ obj.age }} {{ obj.errors.age.0 }}
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm-2 control-label">邮箱:</label>
- <div class="col-sm-10">
- {{ obj.email }} {{ obj.errors.email.0 }}
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm-2 control-label">班级:</label>
- <div class="col-sm-10">
- {{ obj.cls_id }} {{ obj.errors.cls_id.0 }}
- </div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <input type="submit" class="btn btn-default" value="提交"/>
- </div>
- </div>
- </form>
- </div>
- </body>
- </html>
4 视图
- def add_student(request):
- if request.method == 'GET':
- obj = StudentForm()
- return render(request, 'app01_add_student.html', {'obj': obj})
- else:
- obj = StudentForm(request.POST)
- if obj.is_valid():
- models.Student.objects.create(**obj.cleaned_data)
- return redirect('/app01/students')
- else:
- return render(request, 'app01_add_student.html', {'obj': obj})
5 数据规则类设置
- class StudentForm(Form):
- name = fields.CharField(max_length=8, min_length=2,
- widget=widgets.TextInput(attrs={'class': 'form-control'})
- )
- age = fields.IntegerField(max_value=25, min_value=18,
- widget=widgets.TextInput(attrs={'class': 'form-control'})
- )
- email = fields.EmailField(widget=widgets.TextInput(attrs={'class': 'form-control'})
- )
- cls_id = fields.IntegerField(
- # widget=widgets.Select(choices=[(1, '上海'), (2,'北京')])
- # choices 类型为[(),()]
- widget=widgets.Select(choices=models.Classes.objects.values_list('id', 'title'),
- attrs={'class': 'form-control'})
- )
6 补充:如何通过form表单实现: 给前端标签添加class等属性,以及设置Input输入框的type属性
- # Form生成html标签
- a. 通过Form生成Input输入框,Form标签,以及submit标签还是要在前端写的,
- 但是Form标签内的Input标签可以在后台实现;只需要按以下步骤
- - views定义StudentForm(Form)类
- - views视图函数将Form实例化对象传递给前端
- - 前端{{ obj.段 }}即可
- b. 通过Form设置前端Input的type属性,即设置不同类型的输入框
- # 设置name为text, cls_id为下拉框
- class StudentForm(Form):
- name = fields.CharField(widget= widgets.InputText())
- cls_id = fields.IntegerField(widget = widgets.Select())
- c. 设置下拉框的内容choices属性
- class StudentForm(Form):
- cls_id = fields.IntegerField(
- widget=widgets.Select(choices=models.Classes.objects.values_list('id', 'title'))
- )
- 注意: choices的值必须[元组,(), ()]类型
- widget=widgets.Select(choices=[(1, '上海'), (2,'北京')])
- d.设置input输入框的class属性 -- attrs
- name = fields.CharField(max_length=8, min_length=2,
- widget=widgets.TextInput(attrs={'class': 'form-control'})
- )
- cls_id = fields.IntegerField(
- widget=widgets.Select(
- choices=models.Classes.objects.values_list('id', 'title'),
- attrs={'class': 'form-control'}
- )
- )
- 注意: attrs参数必须放在TextInput或者Select等内部,而且值必须为字典
- e. 通过Form设置前端Input的默认显示值
- 只要在视图函数将实例化一个Form对象,并且设置initial值即可
- student_dict = models.Student.objects.filter(id=nid).values('name', 'age', 'email', 'cls_id').first()
- obj = StudentForm(initial=student_dict)
[oldboy-django][2深入django]学生管理(Form)-- 添加(美化Form表单:通过form给前端标签添加属性)的更多相关文章
- Django笔记&教程 6-3 使用模型(models)创建表单(form)
Django 自学笔记兼学习教程第6章第3节--使用模型(models)创建表单(form) 点击查看教程总目录 本文参考:Forms for models 1 - 初步介绍 很多时候,我们使用的表单 ...
- 表单(form)成为 ajax 提交的表单(form)
1.form <form id="ff" method="post"> <div> <label for="name&q ...
- Django笔记 —— 表单(form)
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Django使用普通表单、Form、以及modelForm操作数据库方式总结
Django使用普通表单.Form.以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面: 在表单页面填写信息,并提交: 表单数据验证 验证 ...
- Django笔记&教程 6-1 表单(Form)介绍
Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...
- Django笔记&教程 6-2 表单(Form)基础操作
Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...
- 10天学会phpWeChat——第八天:Form类,丰富表单提交的字段类型
通过前面七讲的系列教程,我们完成了一个包含后台并自适应PC+h5移动端的文章管理模块. 在实际的生产环境中,文章投稿.商品上传等操作并不会简单局限于一个text和textarea组成的表单.在实际中, ...
- jquery.form.js(ajax表单提交)
Form插件地址: 官方网站:http://malsup.com/jQuery/form/ 翻译地址:http://www.aqee.net/docs/jquery.form.plugin/jquer ...
- 表单 - Form - EasyUI提供的表单异步提交
方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...
随机推荐
- leetcode——1
1. 题目 Two Sum Given an array of integers, find two numbers such that they add up to a specific targ ...
- 汶川大地震中的SAP成都研究院
5·12汶川地震,发生于北京时间(UTC+8)2008年5月12日(星期一)14时28分04秒,此次地震的面波震级 里氏震级达8.0Ms.矩震级达8.3Mw,地震烈度达到11度.地震波及大半个中国及亚 ...
- JavaScript and Ruby in ABAP
Netweaver里有个mini JavaScript engine CL_JAVA_SCRIPT, 对于Js code的编译和执行都是用system call完成. 只能当玩具用:report SJ ...
- 关于Mongodb RC的思考
Mongodb Oplog 和 Journal log 的关系与执行顺序 就关系来说,op log实际上与数据是一致的概念. 但在有 RC的时候,执行顺序 w j 的设置 如果不设置 j ,则默认是 ...
- 动态规划专题(二)——树形DP
前言 \(DP\)这东西真的是博大精深啊...... 简介 树形\(DP\),顾名思义,就是在树上操作的\(DP\),一般可以用\(f_i\)表示以编号为\(i\)的节点为根的子树中的最优解. 转移的 ...
- 2017.12.23 第二章 统一建模语言UML概述
第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...
- 文件系统 - Linux 支持的文件系统类型
NAME 文件系统 - Linux 支持的文件系统类型:minix, ext, ext2, xia, msdos, umsdos, vfat, proc, nfs, iso9660, hpfs, sy ...
- CVE-2018-4878
0x00前言 该漏洞影响 Flash Player 版本28.0.0.137以及之前的所有版本 0x01 poc Poc 这里只列出关键代码 public function triggeruaf() ...
- 前端小记3——iOS与Android问题
1.消除transition闪屏 (1)-webkit-transform-style:preserve-3d; /*设置内嵌的元素在 3D 空间如何呈现:保留 3D*/ (2)-webkit-ba ...
- Ubuntu解决winscp连接不上虚拟机问题
前几天在配置虚拟机的时候,尝试用winscp连接Ubuntu,结果连接被拒绝.原因:Ubuntu的ssh服务需要自己安装和启动,在没启动之前,是无法连接上去的 解决方案: 我们可以输入:ssh loc ...