孤荷凌寒自学python第九十二天认识区块链006

【主要内容】

今天继续学习flask这个模块的用法,共用时间60分钟。

(此外整理作笔记花费了约60分钟)

详细学习过程见文末学习过程屏幕录像。

初步了解了flask模块的用法,见识了Python中关于web服务器程序建构模块的强大功力。

主要通过以下网络资源进行学习:

http://docs.jinkan.org/docs/flask/quickstart.html

 

【学习笔记】

一、Flask创建的服务器对象运行时可以指定相关参数

if __name__=="__main__":

    from argparse import ArgumentParser

 

    parser = ArgumentParser()

    parser.add_argument('-p', '--port', default=80, type=int, help='监听端口')

    args = parser.parse_args()

    port = args.port

 

    app.run(host='127.0.0.1', port=port)   

 

昨天的启动对象的部分,只使用了

app.run

于是,默认使用5000端口号,通过 使用

127.0.0.1:5000来访问web服务器

而今天通过修改商品号为80,我就可以直接使用

127.0.0.1

来访问web服务器了。

 

二、实例化Flask对象的初始化参数由于版本的变化有所不同

我使用的flask版本为v1.0.2

参数按顺序如下:

import_name 实例所依托的模块名或实例名

static_url_path  没有 理解,填写 None就行了

static_folder    静态内容(比如css文件 ,js文件等)存放的目录 名(此目录 在Py文件所在的根目录下。)

static_host      没有理解,填写None就行了。

host_mathing    没有理解,默认值为False就行了。

subdomain_matching   也没有理解,填写False就行了。

template_folder   html页面模板所存放的目录(此目录在py文件所在的根目录下。)

instance_path     没有理解,填写None就行了

instance_relative_config  没有理解,填写False就行了

root_path         没有理解,填写None就行了

 

 

三、构建html的模板文件

为了使用html模板文件,并验证python文件在服务器端处理客户端发起的post请求的实现,于是建构了一个简单的html模板,存放在与py文件同一目录层级下的一个名为【html】的目录中,同时在第二点中的参数设置中就设置【template_folder】为html。(具体目录实现见学习过程录屏,链接在文末)

这个Html模板文件的内容如下:

```

<!DOCTYPE html>

<html>

 

    <head>

 

        <meta charset="utf-8">

        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <meta name="description" content="">

        <meta name="author" content="">

 

 

        <title>孤荷凌寒的第一个Flask页面</title>

 

      

       <script src="/jsetc/_ty_ajax_xml.js"></script>

        <script src="/jsetc/_ty_function.js"></script>

 

       <script language="javascript" type="text/javascript">

          

//通过AJAX的方法向服务器端发送post请求

var requestup;

var isrequest_up_runned=false;

//发送post请求

function submitme(){

    try{

       var stru=document.forms[0].t1.value;

       var strb=document.forms[0].t2.value;

       //alert(stru);

       if(strb!="" && stru!=""){

                      isrequest_up_runned=true;

                     var url="/login/";

 

                     var strcan="u=" + stru;

                     strcan=strcan + "&p=" + strb;

                    

                      requestup=createRequest();

                      //alert(strcan);

                     //--request up-----------

                  ajaxsendtextbypost(requestup,url,strcan,"ajax_submitselect_back");

                     return true;

       }

       //----------------------------------

    }catch(err){

       //alert("提交失败:" + err.description);

    }

    finally{

    }

}

 

//-----等待服务器返回处理结果-----------------------

function ajax_submitselect_back(){

    try{

 

       //-----------------------------------------------

       //-----------------------------------------------

                  if (requestup.readyState == 4) {

                     if (requestup.status == 200) {

                         var response = requestup; //无法还原为文本,因此可能需要解码

                         alert(response);

                         //alert(instr(response, "okghlh", 0));

                     document.getElementById("divform").style.display='none';

                       document.getElementById("divshow").style.display="block";

                       document.getElementById("divshow").innerHTML=response["txt"];

 

                     }else{

                         //var response2 = unescape(requestup.responseText);

                         //alert(response2);

                     }

                      isrequest_up_runned=false;

                  }

    }catch(err){

       //alert("提交可能失败!" + err.description);

       isrequest_up_runned=false;

    }

}  

          

 

//最开始是使用的jquery来实现的,但因为服务器端的Py文件代码错误,我以为是这儿的js代码错了,于是没有使用下面的代码 。

           //下面的函数没有使用了,但也没有错

           function submitme2(){

              $.ajax({

                   url: '/login/',

                   type: 'POST',

                  data:'u=' + document.getElementById("t1").value + "&p=" + document.getElementById("t2").value,

                   success: function(response){

                   document.getElementById("divform").style.display='none';

                   document.getElementById("divshow").style.display="block";

                   document.getElementById("divshow").innerHTML=response["txt"];

                   },

                   error: function(error){

                       console.log(error);

                   }

               });

             

             

           }

       </script>

             

   

    </head>

 

    <body>

       <div id="divform">

       <form>

           <p>

              <span>登录用户名:</span>

              <input type="text" id="t1" name="t1">

           </p>

           <p>

              <span>登录密  码:</span>

              <input type="password" id="t2" name="t2">

           </p>

           <p>

              <input type="button" id="cmdOk" value="登录" onClick="submitme();">

           </p>

          

       </form>

       </div>

       <div id="divshow" style="display:none;">

          

       </div>

    </body>

   

</html>

        

      

```

四、在py文件的代码中,构建了一个虚拟的路径url

/login/

来处理上面的html模板中的js代码通过ajax发起的post请求。

代码如下:

```

@app.route("/login/",methods=["POST"]) #methods参数需要的是一个列表,而且不是method参数,是复数形式

def login():

    u=request.form["u"]  #这儿是读取客户端传过来的post参数,注意使用的是方括号

    p=request.form["p"]

    response={

        'txt':'当前用户' + u + '登录成功!密码是:' + p

    }

 

    return jsonify(response),200 #我不知道为什么要同时返回一个Int值200

 

```

 

五、完整的Py文件代码

```

from flask import Flask

import requests

from flask import Flask, jsonify, request, render_template

 

app=Flask(__name__,None,"jsetc",None,False,False,"html") #此处第一个参数直接使用Py本文件的内置变量__name__,表示服务器程序名称就使用本Py文件的名称。

 

@app.route("/") #指定显示的实际url相对于WEB应用服务器对象的根目录而言的路径

def index():

    return render_template('./i.html')

 

@app.route("/login/",methods=["POST"]) #methods参数需要的是一个列表,而且不是method参数,是复数形式

def login():

    u=request.form["u"]  #这儿是读取客户端传过来的post参数,注意使用的是方括号

    p=request.form["p"]

    response={

        'txt':'当前用户' + u + '登录成功!密码是:' + p

    }

 

    return jsonify(response),200 #我不知道为什么要同时返回一个Int值200

 

@app.route("/admin/<u>")

def admin(u):

    return "我是管理员登录页,在根目录下的admin子目录下,当前管理员是:"  + str(u)

 

@app.route("/compute/<int:a>/<int:b>")

def compute(a,b):

    return str(a) + "乘以" + str(b) + "等于" + str(a*b)

 

if __name__=="__main__":

    from argparse import ArgumentParser

 

    parser = ArgumentParser()

    parser.add_argument('-p', '--port', default=80, type=int, help='监听端口')

    args = parser.parse_args()

    port = args.port

 

    app.run(host='127.0.0.1', port=port)   

 

 

```

【学习后记】

一、Flask在服务器端对客户端的请求处理比较高效

与我熟悉的asp.net的服务器端架构比较,python来实现感觉更高效,特别是前后端是完全分离的,数据交换更多通过ajax等技术来实现,前后端就完全不会粘连混淆,这点感觉不错。

 

二、技术学习越早越好

一大把年纪再来学习,真的很痛苦,每天都只好感慨自己“少壮不努力,老大徒伤悲”。岁月不会饶人,这就送给尚且年轻的朋友们吧,凡事趁早,未来会非常美好!

 

【关于坚持自学的例行说明】

最后例行说明下,我为什么要坚持自学。

一、为什么一把年纪还在学习

放弃很多去聚餐,去HI歌,去游玩,去看电影,去追剧……的时间,然后进行着这个年纪似乎已不应当再进行的学习,引来身边人们无尽的不解与鄙夷甚至可怜……

但我不想放弃终身学习的誓言。

因为——

我对我今天的生活现状并不认同!

罗伯特清崎告诉过我们,反省自己当下的生活是不是自己想要的,这难道不是最好的动力与答案?

走过了大半生,然后才发现曾经、当下所正在进行的人生并不是自己想要的,那是一种怎样的体验?

只有心中真切的感受才能回答这个问题,而任凭再丰富的语言也是无法描绘出来的。

经历半生的跋涉,却发现走得并不正确,有多少人有勇气承认自己过去的一切都是错误的呢?

而我愿意告诉过去的我:“你错了!”

那么已经历半生错误,年岁之大又压于头顶,还有希望从这架的梯子的半端重新爬下,再蹒跚着爬上另一架梯子吗?

我宁愿相信还有希望!

这便是我为什么要继续坚持终身学习下去的全部理由。

二、这个年纪还在学这些技术有意义吗

纯的技术对这把年纪其实已没有意义。

但兴趣可以超越意义。

但技术可以引来思想的变革,这才是意义。

投资自己的头脑 ,改革自己的思想,这是最保值,更长远的投资,过去我从来没有投资过,错过太多,那就从投资自己头脑开始吧。

罗伯特清崎告诉我们,真正的富有是时间的富有;真正的自由是可以决定自己愿意做什么的自由。

因为我愿意做我兴趣所在的事,所以我希望我有自由选择的那一天,虽然今天离那一天可能还是那么遥远,但我愿意相信,每天多赶几步,离希望就更近一步。

再者,虽然我可能再已无法完全完整的掌握这些技术了,但技术本身却可以启迪心的觉醒,激发灵感,那么只要多了解一点,我相信我将离那个正离我而去跑得越来越快的未来更近一点,不至于被未知的那个未来抛弃得太远。

于是我怎能放弃追逐求索的步伐?

我要坚信:感觉太迟的时候,也许还不算太迟。

 

感谢一直以来关注我,鼓励我的你!

若不嫌弃这一个到了高龄才长大的可笑可叹的我,请不吝赐教。

我的q号是:578652607,敬候你的指点。

 

 

【同步语音笔记】

https://www.ximalaya.com/keji/19103006/255132914

 

【学习过程屏幕录屏】

https://www.bilibili.com/video/av89267641/

链接:https://pan.baidu.com/s/1LjfxhLWuoQFYbkQZ7UNicw

提取码:vfvi

 

 

猜你喜欢

转载自www.cnblogs.com/lhghroom/p/12319275.html