django-添加学生的制作-模块的封装
目标,可以通过页面,添加学生
分析:
需要有一个链接
链接点击后,是一个表单出来
可以在表单中添加内从
可以提交表单
表单提交后数据插入到数据库中
希望看到最新的结果(页面跳转到学生列表页)
新页面的完整的几个需求
url名称,已想好,就叫add_stu
模板页面,主要提供表单页面,可以提交
由路对应关系,让路径与视图函数对应起来
视图函数,add_stu 处理主要的业务
在学生列表页的顶部添加链接
路由对应关系
视图函数
推导出视函图函数需要处理的事情,需要的一些数据
""" 添加学生的功能 """# 根据下面的sql语句,我们发现,需要有name,需要有gender# 因此,期望浏览器在请求的时候可以带给我们# 最终,我是要写一个sql语句,来插入数据# 如何写sql语句sql = "insert into student(name, gender) values ({name}, {gender})"sql.format(name="张三", gender="保密")# sql = "insert into student(name, 字段1,字段2) values ('张三', 字段1值,字段2值)"# 下一行的写法可能存在的问题,如果name是一个not null 的字段,但是我们插入数据时不传值,除非1,not null 的数据有在认值, 2 not null 的数据自增长# sql = "insert into student(字段1,字段2) values (字段1值,字段2值)"# sql = "insert into student values (0号字段值,1号字段值,最后一个字段值)"
前端页面的设计
主要为视图提供数据的传输
代码
<!DOCTYPE html>
<!--作者:pyhui-->
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>添加学生</title>
</head>
<body><!--目标,在请求服务器的时候,带参数过去,告诉服务器,name,gender--><form action="">姓名: <input type="text" name="name" value=""> <br>性别:<select name="gender" id=""><option value="男">男</option><option value="女">女</option><option value="中性">中性</option><option value="保密">保密</option></select><br><input type="submit" value="注册提交"></form></body>
</html>
测试视图一,参数的获取
结果
当前的请求方式 GET
GET请求的参数 <QueryDict: {‘name’: [‘666’], ‘gender’: [‘保密’]}>
POST请求的参数 <QueryDict: {}>
当前的视图函数接收参数的情况描述
情况一
当从学生列表页,点击链接进入添加学生页时
发起的是一个get请求
但是
不带参数
情况二
当从添加学生页的表单中,提交表单
发起的也是一个get请求
但是,get请求会带上参数
请求是get,提交表单也是get,渲染与跳转的区分
代码
def add_stu(request):""" 添加学生的功能 """# 获取GET方式的参数:# 从列表页进入到添加学生页,一定是一个GET请求print("当前的请求方式", request.method)print('GET请求的参数', request.GET)print('POST请求的参数', request.POST)print('get数据的长度', len(request.GET))print("数据的存储,下一步,要跳转页面了")if len(request.GET):return redirect("/stu_list/")else:return render(request, "add_stu.html")
主要根据get参数的长度来判定
数据库的操作封装为模块
""" 数据库模块 """import pymysqlclass DbSchool:def __init__(self):self.conn = self.get_conn() # 连接对象self.cursor = self.get_cursor() # 游标对象def get_conn(self):""" 获取连接对象 """conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="root",db="python2019",charset="utf8")return conndef get_cursor(self):"""获取游标对象"""# cursor = Nonecursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)return cursordef select_all(self, sql):"""查询全部:param sql: 查询语句:return: [{},{}]"""self.cursor.execute(sql)return self.cursor.fetchall()def select_one(self, sql):"""查询一个:param sql: 查询语句:return: {}"""self.cursor.execute(sql)return self.cursor.fetchone()def commit_data(self, sql):"""提交数据:param sql::return:"""self.cursor.execute(sql)self.conn.commit()def __del__(self):self.cursor.close()self.conn.close()db = DbSchool()
继续视图的逻辑,插入数据
def add_stu(request):""" 添加学生的功能 """if len(request.GET):# 获取name参数值name = request.GET.get("name")gender = request.GET.get("gender")# 当表单提交数据时sql = "insert into student(name,gender) values('{}','{}')".format(name, gender)print('当前执行的sql语句是\n',sql)db.commit_data(sql)print('恭喜,插入数据成功')return redirect("/stu_list/")else:# 当进入添加学生页面时return render(request, "add_stu.html")
django-添加学生的制作-模块的封装相关推荐
- 在python中模块可以封装_python 制作python包,封装成可用模块教程
首先编写py程序: printtest.py def test(): print('print test') 将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup ...
- PHP+Mysql制作一个学生成绩查询模块
PHP+Mysql制作一个学生成绩查询模块 我不是学PHP的我只是需要用一下PHP要是学又得好长时间,最好的方法就是问,但是问会的,又说让百度,得,我直接自己干吧,便花费了我一整天时间做了一下,从网上 ...
- django后台添加学生-jquery实现表单正则表达式验证,判断是否可以进行提交
话不多说,先放图 左边的导航就不放代码了,需要再问 (1)视图模板 (2)路由(urls.p) (3)views.py # GET:向服务器 获取 数据 # POST:向服务器 提交 数据 # 添加学 ...
- Python模块和包:导入制作模块、name、模块定位顺序(文件名与模块名重复、功能名与功能名重复、函数名与功能名重复、变量名与模块名重复)、from 模块名 import *__all__列表、包
一.模块 Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块能定义函数,类和变量,模块⾥也能包含可执⾏的代码. ...
- c语言学生成绩单,c语言-学生成绩单制作
<c语言-学生成绩单制作>由会员分享,可在线阅读,更多相关<c语言-学生成绩单制作(16页珍藏版)>请在人人文库网上搜索. 1.可编辑C语言课程设计报告项 目 名 称: 学生成 ...
- [Python+Django]Web学生信息管理系统数据库设计及系统实现
本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能. 简单的包装下毕设应该没问题了. Python,Mysql,Pycharm的安装本文 ...
- ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。
DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...
- 在Hexo中为文章自动添加版权信息声明模块
版权声明: 本文由秦元培创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处,本文作者为秦元培,本文标题为在Hexo中为文章自动添加版 ...
- 阅读micropyton源码-添加C扩展类模块(2)
阅读micropyton源码-添加C扩展类模块(2) 苏勇,2021年8月 文章目录 阅读micropyton源码-添加C扩展类模块(2) 看看machine_pin_type实例的定义 特别说明 看 ...
最新文章
- 清华校长俯身拨穗!曾收病危通知书的博士毕业,刷屏的却是这个人
- 如果算力足够根本不需要标注太多数据
- SQLite | Where 子句
- PyQt5学习笔记(一)PyQt5入门QLabel控件及使用
- Windows Server 2016多用户同时登录远程桌面
- 修改Chrome浏览器默认背景颜色为浅绿色(转)
- 通过电脑从Ovi商店下载软件并安装
- C# IMEI15位转换成8位密码
- EXCEL抓取SQL查询数据
- 重装系统后计算机无法启动,电脑小白一键重装系统后无法开机
- 基于零日漏洞的自动驾驶预期功能安全风险评估方法
- outlook配置阿里企业邮箱
- 往word表中写数据
- 日中中日翻译必携 实战 5册套装 日文原版_推荐
- class类,静态属性 以及 静态方法
- 微信JSAPI支付 - 服务商模式下子商户 统一下单的注意事项
- 【尚硅谷】新web项目-QQZone代码及详细解析
- eNSP下园区网综合实验分步配置(前言)
- 导电滑环的用途有哪些呢
- 多图片查看神器MulimgViewer
热门文章
- PS命令总结-实战经验
- keyCode键码值对照表
- 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...
- yarn临时目录 没有jar包_复习之yarn
- 学法减分助手PRO小程序
- 有点火的程序秒收录牛X
- Spring Cloud微服务之Mybatis-Plus代码生成器整合(四)
- 一分钟解决“仅限中国大陆地区播放”
- 使用Google OAuth 2.0存取Google API (Google Client ID)
- Linux 技巧: 从命令行创建像素标尺