个人总结

经过一个学期以来,自我感觉有了很大的进步,在一定程度上能够掌握理解老师上课所讲的内容并且能够顺利的在自己的电脑上操作;在这个自己动手的实践操作中意识到我还存在很多的不足,如课后作业以及一些操作会很依赖上课的截图,但是以后会加强动手实践的能力,巩固我对python语言的掌握;我个人把这学期所学的东西分为三大部分:前期对Python的基础语法练习,中期动手制作网页,后期Flask项目主程序和数据库的连接;

在期末我对我本学期所学的知识进行了一次简单的梳理,梳理的内容如下:

前期Python基础语法练习

  1. 输出交互以及简单的运算
  2. Turtle库的基础内容,它是一个简单的绘图工具,只要熟悉画笔的几种命令:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令就可以画很多自己想画的东西;在此基础上可以运用条件、循环、函数定义使得绘画更加美化;其实这个很简单,而且可以随心所欲画自己喜欢的图画,也是相当有趣提高,可以我们想要学习python的兴趣;
  3. 对字符串的基础操作,处理;如:输入身份证号,识别地区、年龄、性别等;个人感觉这个是非常实用的,我们的专业是信息管理与信息系统,以后要是专业对口的话,就会接触很多的数据,所以我们
  4. 凯撒密码,GDP格式化输出以及输出九九乘法表;
  5. 学习了python的列表和元组,对词频的统计,转换符号,将所有大写转换为小写,统计某几个单词出现的次数,分隔出一个一个的单词;
  6. 在词频的统计上,进行了读入,分解,写计数字典,排除语法型词汇,排序的基础功能;
  7. Datetime处理时间和日期,可以获取datetime以及将datetime类型转换成字符串,将字符型转换成datetime类型;

中期的基础网页制作

  1. 学习web的基础,认识URL,观察常用网站网址,区分不同组成部分。观察web的浏览过程,学习HTML基础使用简单的标签制作页面;
  2. 观察常用网页的HTML元素,在实际的应用场景中,用已学的标签模仿制作。用div,form制作登录页面,练习使用下拉列表选择框,无序列表,有序列表,定义列表。
  3. 对网页的美化:导航,头部,美化,图片导航块,JavaScript基础(三种用法:放在<body>和<head>和外部的JS文件中),登录验证,登录注册页面的完成

后期的Flask项目主程序和数据库的连接

  1. 新建Flask项目,调式模式,使用装饰器,设置路径与函数之间的关系,使用使用Flask中render_template,用不同的路径,返回首页、登录员、注册页,用视图函数反转得到URL,url_for(‘login’),完成导航里的链接;
  2. 加载静态文件,父模板的继承和扩张,在编程的过程中,我们经常会重复性的写了很多的代码,比如一个页面的框架部分,这样我又多少个页面就得写上多少次,这样既不好维护,也不够高效,所以我们引出了html的模板继承部分。这个比较简单但是继承的位置要有清楚的思路;
  3. 完成注册与登录功能,利用JavaScript对输入格式进行判断, onclick函数return True时才提交表单,return False时不提交表单。

    JavaScript是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。

    JavaScript虽与Java有很多相似性,但这两门编程语言从设计之初就有很大的不同,JavaScript的语言设计主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响。在语法结构上它又与C语言有很多相似(例如if条件语句、while循环、switch语句、do-while循环等)

    function fozhuce() {
                var oUname = document.getElementById("uname");
                var oError = document.getElementById("error_box");
                var oUpass = document.getElementById("upass");
                var oUpass1 = document.getElementById("upass1");
                var isError = true;
                oError.innerHTML = "<br>";
    
                if (oUname.value.length < 6 || oUname.value.length > 20) {
                    oError.innerHTML = "用户名要6-20位";
                    isError = false;
                    return isError;
                }else if(oUname.value.charCodeAt(0)>=48 &&(oUname.value.charCodeAt(0)<=57)){
                    oError.innerHTML="首位不能为数字";
                    isError = false;
                    return isError;
                }else for (var i=0;i<oUname.value.length;i++){
                   if((oUname.value.charCodeAt(i)<48)||(oUname.value.charCodeAt(i)>57)&&(oUname.value.charCodeAt(i)<58)&&(oUname.value.charCodeAt(i)>97)){
                    oError.innerHTML="只能为数字和字母";
                    isError = false;
                    return isError;
                   }
                }if (oUpass.value.length < 6 || oUpass.value.length > 20) {
                    oError.innerHTML = "密码要6-20位";
                    isError = false;
                    return isError;
                }else if(oUpass.value!=oUpass1.value) {
                    oError.innerHTML = "设置密码和验证密码不一致";
                    isError = false;
                    return isError;
                }
                return ture;
                }

     

  4. 在HTML中的<form>中设置 action和method="post",在py主程序当中判断用户是否存在,保存到数据库当中,利用redirect重定向到登录页,进行登录功能由于我个人觉得理论也是学好一门知识的基础,在这里介绍一下method属性:浏览器使用 method 属性设置的方法将表单中的数据传送给服务器进行处理。共有两种方法:POST 方法和 GET 方法。

         但是是用post还是get方法呢,我刚刚接触到这个我也总是分不清该用哪一种方法,接下来讲一下我查阅资料而发现的规律:   

  • 如果希望获得最佳表单传输性能,可以采用 GET 方法发送只有少数简短字段的小表单。
  • 一些服务器操作系统在处理可以立即传递给应用程序的命令行参数时,会限制其数目和长度,在这种情况下,对那些有许多字段或是很长的文本域的表单来说,就应该采用 POST 方法来发送。
  • 如果你在编写服务器端的表单处理应用程序方面经验不足,应该选择 GET 方法。如果采用 POST 方法,就要在读取和解码方法做些额外的工作,也许这并不很难,但是也许你不太愿意去处理这些问题。
  • 如果安全性是个问题,那么我们建议选用 POST 方法。GET 方法将表单参数直接放在应用程序的 URL 中,这样网络窥探者可以很轻松地捕获它们,还可以从服务器的日志文件中进行摘录。如果参数中包含了信用卡帐号这样的敏感信息,就会在不知不觉中危及用户的安全。而 POST 应用程序就没有安全方面的漏洞,在将参数作为单独的事务传输给服务器进行处理时,至少还可以采用加密的方法。
  • 如果想在表单之外调用服务器端的应用程序,而且包括向其传递参数的过程,就要采用 GET 方法,因为该方法允许把表单这样的参数包括进来作为 URL 的一部分。而另一方面,使用 POST 样式的应用程序却希望在 URL 后还能有一个来自浏览器额外的传输过程,其中传输的内容不能作为传统 <a> 标签的内容。

其实我自己是用了一种很通俗的理解,如果关系到数据的更改的话就采用post,没有涉及到数据的更改就采用get;虽然这种通俗存在很大的片面,但是自我感觉对新手菜鸟级的来说还是可以尝试的;

  1. @app.route('/denglu/', methods=['GET', 'POST'])
    def denglu():
        if request.method == 'GET':
            return render_template('denglu.html')
        else:
            username = request.form.get('username')
            password = request.form.get('password')
            user = User.query.filter(User.username == username).first()
            # 判断用户名是否存在
            if user:
                if user.check_password(password):
                    session['user'] = username
                    session['id'] = user.id
                    session.permanent = True
                    return redirect(url_for('shouye'))
                else:
                    return '密码错误'
            else:
                return '此用户不存在'

    5.完成了登录功能,用session记住用户名,读取表单数据查询数据库判断用户密码,导入session,设置secret_key,操作字典一样操作`session`:增加用户名session['username']=username,在这里我想谈谈session,一开写注册与登录功能的时候,如下图:

user = User(username=username, password=password)
db.session.add(user)
db.session.commit()
return redirect(url_for('denglu'))

对session有了一个只是把数据记录写到数据库的片面理解,可是后来我把登录功能写好后也迟迟没有深刻的理解session到底是什么含义,在这一点上可以看得出我对学习还是很被动;在完善期末作品当中我发现了很多不足,虽然作品完成了但是对于知识点还是有很多的缺失,就如session,它的工作原理如下:

当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。

随着越来越多用户登录,Session 所需要的服务器内存量也会不断增加。访问 Web应用程序的每个用户都生成一个单独的 Session 对象。每个 Session 对象的持续时间是用户访问的时间加上不活动的时间。如果每个 Session 中保持许多对象,并且许多用户同时使用 Web应用程序(创建许多 Session),则用于 Session 持久性的服务器内存量可能会很大,从而影响了可伸缩性。

Session 是存储在服务器端的,远程用户没办法修改 session 文件的内容,因此我们可以单纯存储一个 $admin变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的。

6.制作首页的显示列表,并在首页列表全部问答,将数据库查询结果传递到前端页面 Question.query.all(),前端页面循环整个列表,完成发布详情页的页面布局,对展示在列表的东西进行搜索;其实对于搜索,还有很多东西不了解,如怎么进行对数据高级搜索,例如像博客园的搜索一个月的,一个星期的等等,这些都是值得我进行深刻摸索学习的;

以上的几点是我对我本学期所学到知识进行梳理,在这个过程中也遇到过很多问题,一些看起来不以为然的问题也会造成系统出现很多错误,需要我们仔细耐心对待,如在命令行创建新的数据库:create database reader;这样看似乎没有错误,但是在添加文字时就会出现报错;这是由于一些编码的原因,当初我就因为建立数据库时没让它是utf8编码导致添加文字频频报错,所以建数据库是写的应该是:create database reader charset utf8;这个小失误让我浪费了很多时间在检查上,在学习编码的路上一定要小心谨慎,细致才会提高效率走得更远;还有一些配置问题如在配置当中已经在设置配置好的project Interpreten,可是还是会报错,就应该学会在workspace中找到一些相关的配置问题进行手动添加,报错信息和配置截图如图所示:

 

 

在我的学习生涯中接触到的第一母语Java,但是我对Java似乎有一种与生俱来恐惧感,到至今我仍然会觉得它很难,是python改变了我对代码很难学的很难理解的看法,相对于Java的 高冷拒人千里之外,python语言算得学习门槛低得感人了,感觉是任何人是只要想学习,可以在几天里学会很多基础知识,如上面我所梳理到的使用Turtle库的进行绘画,对一些字符串进行操作,对字符串的基础操作,处理;如:输入身份证号,识别地区、年龄、性别等;但是也不能因此因为python好学而对它掉以轻心,所有的事情都有一个厚积薄发的过程,多动手实践很重要,代码如果不经常练习就会很生疏,就好像开学老师说的一些时间类型,Datetime处理时间和日期,可以获取datetime以及将datetime类型转换成字符串,将字符型转换成datetime类型,对那些类型每次都得找一些记录才会想起来,所以一定要经常实践;

其实在大学这有限的时间里老师能够传授的知识是很有限,想要学好一门技术,只是掌握老师上课所说的知识是远远不够的,要让自已有很强的 自主学习能力;在前不久听说了一条新闻,在山东的一些小学里,python已经写进书本了,连小学生都学习python了,我们作为一名大学生更应该付出更多的努力去学习python,我也会对此付诸于行动证明;

posted on 2018-01-05 21:56  朱茵茵  阅读(228)  评论(0编辑  收藏  举报