还剩7页未读,继续阅读
文本内容:
人工智能与大数据学院人工程序设计教案n28教学标题项目8模块和程序打包任务3实践课用户登录功能的演进和完善授课班级云计算2101课时2场地4406时间2022年6月7日星期二授课教师李力在前面的课程中,编与和完善了用户账户登录的功能,现在进一步完善这个小程序,并将它分成几个独立的模块,
1.项目/任务价值模块之间尽可能独立,追求低耦合、高内聚,提高程序的健壮性知识目标
1.了解大型项目中功能的分离和模块的组织能力目标
1.掌握msvcrt中的getch和putch函数
2.掌握hashlib库的使用
2.学习目标
3.掌握大型项目开发过程中的设计和把控思政-素质目标
1.线上线下结合,引导学习方式,培养自主学习能力;
2.培养学生积极探索、勇于创新的科学素养;教学设计
3.养成小组沟通协作共同学习,解决问题能力和团队合作精神;
4.能按照实训6s管理要求做好课前的准备,课后的整理工作,培养勤俭、奋斗、创新、奉献的劳动精神;
1.任务描述
2.知识准备大型项目中功能的分离和模块的组织
3.学习内容
3.任务实施为用户账户登录程序添加验证码、密码字符遮盖、密码加密、注册新账户等功能,并将已经实现的其他功能分离出来,以模块形式工作重庆在线开放课程平台《Python开发技术应用》,多媒体课件,理实一体化实训室,网络教学资源,www.pythontutor,com可视化匚具、www.processor!,com在线流程图绘制匚具
4.学习资源实物教材,软件工具包教学重点大型项目中功能的分离和模块的组织
2.如何实现密码输入的字符遮盖功能
3.如何实现密码加密功能
4.如何实现验证码功能
5.如何实现注册新账户功能
6.分离已有的密码核对、账户冻结和解冻功能
7.在主程序中组织、使用所有模块任务将用户登录程序划分为如下模块学生实践教师辅导答疑多媒体
201.验证码的生成和校验模块互动式教学
2.创建新用户账户模块
3.密码核对和锁定检测模块
4.用户登录主程序学业评价小组评价和个人综合评价(课堂讨论的参与、是否认真笔记)2补充教学反思教学反思主要问题解决办法本次课的做得好的地方教学难点密码字符遮盖功能的实现在大型项目中,应该尽可能地把子功能独立出来,降低模块间的依赖,提高程序的健壮性,每个模块各司其职,模学情分析块之间通过消息传递来进行协作教学方法训练与练习法;情境教学法教学模式采用线上线下混合教学模式本次课教学流程
1.讲解包的概念和包的使用方法;
2.讲解搜索路径和环境变量的概念;
3.讲解从包里批量导入模块的几种方法;教学策略
4.讲解模块发布的方法;
5.讲解pylnstall创建可执行文件的操作;教学方法、手段及思政设时间教学环节学生、教师活动计分配课程导学最初的用户登录功能很简陋,但随着不断加入新功能,不断完善,介绍包的概念和作用;3它越来越接近实战产品了因此,本次课程进一步完善功能,并且已经实现回顾项目5的用户登录程序,多媒体演示信息调研讲过的功能也要分离出来,例如曾经使用装饰器实现的验证码功能,现在也要思考如何改进?思考程序编授、讨论、案例教学课前将它以模块的形式单独提供写好后如何分发共享?发布导学单,线上线下结教学实施过介绍模块发布的发布概念;程合,引导学习方式转变,培养自主学习能力小组协作、沟通、互助学习,培育团队合作意识,引导学生大胆表达引入项目学习任务和目标讲解包的概念,演示包的使用多媒体演示2任务1用户登录功能的演进和完善工作内容方法;启发式教学小组作品展示和讲解L用户登录功能各阶段情况;
2.辅助性模块的实现;
3.功能性模块的实现;
4.主程序的实现;任务实施思考并答题多媒体演示45datetime模块和time模块启发式教学任务1用户登录功能的演进和完善各自的特点是什么?什么样主体内容的情况选择time模块而不思政设计通过例题计算军步骤1用户登录功能各阶段情况是datetime模块?人退伍时间,引导学生产生用户登录功能在本课程中多次出现,下面梳理一下这个案例在课程中各个阶段对人民军队的敬爱所呈现出的功能,可以看出它有一个演进、完善的过程•阶段1以文件存储用户密码信息(项目5文件读写)•阶段2密码多次错误导致的账户冻结和按时解冻(项目5基础的时间管理)课内案例习题学生聆听老师讲解,观看老•阶段3字符验证码(项目6装饰器)师编码实现,师生共同总结•阶段4重新实现验证码功能,添加字符遮盖、密码加密、注册账户等功能,将密码核对的功能从主程序中分离出来(项目8每个功能都组织为单个模块)流程要点,梳理脉络,形成自然语言或伪代码描述的文•阶段5为整个登录/注册功能提供图形界面(项目10选择性学习)输册|档,学生根据此文档重新编•阶段6项目11使用数据库存储用户信息(项目11选择性学习)码,实现程序子功能分为辅助性模块和功能性模块:辅助性模块功能性模块[普I卜TI牌11篇册户IL幻主程序程序的执行流程必须合理当用户执行错误操作之后,自动跳转到上一个状态,而不是产生运行错误;允许用户在任一步骤中选择放弃、退出;尽可能考虑其他BUG步骤2辅助性模块的实现
1.密码输入字符遮盖输入密码时,有必要将屏幕上显示的输入内容遮盖起来,以防被人窥探标准库里的getpass模块提供了etpassO函数,用于隐藏用户输入但是该函数不会显示任何内容,用户体验不佳应该把密码字符替换为星号,让用户知道已经输入了几位字符实现此功能,需要用到msvcrt/termios模块Windows或Linux/LNIX以msvcrt模块为例,这里需要用到的函数如下getch/getwch根据用户的按键事件,返回一个bytes/str对象putch/putwch放置一个按键事件等价的bytes/str对象
2.密码加密无论密码存储在配置文件里,还是数据库里,都有安全风险攻击者可能拿到访问权限,然后读取其中的信息因此,密码不能以明文存储,而是先加密,再将密文进行存储以哈希散列算法进行加密,在没有密钥的情况下,不可能在能够接受的时间内破解密文Python标准库里的hashlib模块可以提供基于散列算法的加密处理功能,也可以提供多个不同的加密算法接口,如SHA
1、SHA
224.SHA
256、SHA
384、SHA
512、MD5等这里选择使用MD5算法,可能会用到的类和函数如下hashlib.md5创建并返回一个基于MD5算法的哈希对象hash_obj.update string以字符串为参数更新哈希对象,且字符串以密文的形式追沙岂同一个哈希对象重复调用该方法,例如先执行update a,然后执行update b,则等价于m.update a+bhash_obj.digest将密文按一进制返回hash_obj.hexdigest:将密文按十六进制返回步骤3功能性模块的实现
1.验证码验证码CAPTCHA是Completely AutomatedPublic Turingtest totellComputers andHumans Apart全自动区分计算机和人类的图灵测试的缩写,是一种用于区分用户是计算机还是人的公共全自动程序验证码可以防止恶意破解密码、刷票、论坛灌水等行为,并有效防止某个黑客对某个特定注册用户采用特定程序暴力破解方式进行不断的登录尝试这个问题可以由计算机生成并评判,但是必须只能由人类解答由于目前的计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类虽然现在有了类似于二维码、拼图等更加复杂的验证手段,但是使用字符验证码仍然是很多网站的通行方式,这是因为它的实现非常简单字符验证码的规则非常简单,就是若干随机的字符,我们这里使用5位的长度,随机字符包含大写字母和数字可以使用random模块中的choices函数来随机选择字符,原型如下choices(population,weights=None,*,cum weights=None,k=l)population数据集,例如列表或字符串weights相对权重cum_weights累加权重k还择的次数函数返回一个列表#captcha.pyfrom randomimport choiceschars=/,ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,/defgenecaptcha:return,z/z.join choiceschars,k=
52.注册新用户注册新用户,其本质是为用户创建一个新账户所需要的所有数据,根据我们的用户账户模型,这包括用户名、密码的密文、初始的密码错误次数以及错误时间这些数据将被写入配置文件中,独占一行要考虑注册用户过程中的细节1)为了防止攻击者使用脚本进行恶意的自动注册,注册时必须输入并核对验证码;2)要考虑到用户随时可能放弃注册,所以在输入用户名、验证码、密码、重复密码等各个阶段都能返回到登录的位置;3)要考虑用户已经存在的情况,不能允许重复注册;4)要规定用户名和密码的格式,这包括最小长度和最大长度、是否允许包含某些特殊字符等这里我们规定格式如下•用户名长度4-20位,只能是数字或字母,不得包含特殊字符・密码长度6-20位,可以包含特殊字符,但不包含不可打印字符
3.密码核对和冻结检查登录时需要核对密码,同时进行其他检查,具体来讲应该具备以下功能
1.检查账户是否存在;
2.检查最近的密码错误时间,判断是否超过24小时,如果是则归零;
3.对于不足24小时的,判断密码错误次数,账户是否处于冻结状态;
4.检查密码是否正确;
5.如果密码错误,增加一次错误记录,并重新判断是否冻结账户;一旦实现了上述功能,就可以方便地将它们集成在一个入口程序中步骤4主程序的实现主程序也就是直接被执行的.py源代码文件通过其他模块,我们已经实现了几乎所有的功能,现在只需要将它们集成在一起即可有以下基本要求1)登录控制台必须是交互式的,用户可以选择退出,但除非用户主动退出,否则程序将始终响应登录操作请求因为一台计算机可以有多人使用,即使当前用户被锁定,也要允许用户通过其他账户尝试登录2)登录时可以选择注册新账户,注册新账户时(注册成功或放弃)也可以回到登录时的状态每个模块完成之后,都要进行测试,可以使用if_name__二二功能对各个模块单独测试主程序编写完成之后,有必要对所有可能性进行测试,包括•新建账户中途取消•新建账户设置密码前后不一致•新建账户之该用户已存在•账户不存在•账户被锁定•账户可用但连续密码错误导致锁定•密码正确,登录成功深化小组讨论多媒体演示13启发性探讨讨论教学>前面实现的用户登录程序如何设计模块和包>如何设计程序组织结构?总结小组总结引导抢答同学总结
1.大型程序的功能设计、拆分和组织互动教学。