Flask(3)

4、请求(request) 和 响应(response)
     1、HTTP协议
         Request Headers - 请求消息头
         Response Headers - 响应消息头
     2、请求对象 - request
         request - 请求对象,封装了所有与请求相关的信息。如:请求数据,请求消息头,请求路径,... ...
         在 Flask 中,请求信息被封装到 request 对象中。要使用 request 的话,必须先导入:from flask import request
         1、request的常用成员:
             1、scheme : 获取请求方案(协议)
             2、method : 获取本次请求的请求方式(get/post)——(重点)
             3、args   : 获取使用get请求方式提交的数据
             4、form   : 获取使用post请求方式提交的数据
             5、cookies: 获取 cookies 的相关信息
             6、headers: 获取 请求消息头 的相关信息
             7、files  : 获取用户上传的文件
             8、path   : 获取请求的url地址(进入到主机后的请求数据资源地址,不包含请求参数)
             9、full_path: 获取请求的url地址(完整路径),(进入到主机后的请求资源地址,包含请求参数)
             10、url   : 获取完整的请求地址,从协议开始的地址
             11、values: 获取GET和POST请求方式提交的数据(GET和POST通用)
             12、referer:获取Referer 请求消息头的信息
                 referer = request.headers.get('Referer','')
                 Content-Type
         2、获取请求提交的数据
             1、get 请求方式
                 1、表单允许实现的get请求
                     <form action="" method="get">
                         姓名:<input name="uname">
                     </form>
                 2、所有地址栏访问请求都是get请求的数据
                 3、在请求地址后拼请求提交的参数
                     http://localhost:5000/06-get?uname=xxx&upwd=xxx
                     get请求的数据是放在 QueryString 中的
                      获取 get 请求方式提交的数据 :
                     request.args 封装的就是 get 请求的数据,类型为字典。
                         ex:request.args['name'] : 获取 name 对应的值
                         request.args.get('name') : 同上
                         request.args.getlist('name_list') : 获取 name_list 列表数据
             2、post 请求方式
                 1、post请求的数据只有在表单中才能够被触发
                     <form method="post">
                     post请求的数据是放在 form 中的
                 2、获取 post 请求提交的数据:
                     request.form 封装的就是 post 请求的数据,类型为字典。
                         request.form['name'] : 获取 name 对应的值
                         request.form.get('name') : 获取 name 对应的值
                         request.form.getlist('name') : 获取 name 列表数据(如复选框,下拉列表)
                 3、在 /login 中,想提交数据给服务器要判断。

5、自定义错误页面   
     1、404 的错误处理
         @app.errorhandler(404)
         def page_not_found(e):
             return render_template('404.html'),404
     2、500的错误处理
         @app.errorhandler(500)
         def internal_server_error(e):
             return render_template('500.html'),500
     ... ...
     404.html,500.html 需要自定义


练习:
     1.访问地址为 http://localhost:5000/07-form-post 能够去往07-form.html模板
     2.在 07-form.html 中
         包含一个表单,post 提交方式,提交地址为 /07-post,控件如下
         1.文本框 - 用户名
         2.密码框 - 用户密码
         3.文本框 - 用户邮箱<input type="email">
         4.文本框 - 真实姓名
         5.提交按钮
     3.在 07-post 中
         获取所有请求提交的数据,并打印在终端中



1、响应(response)
   1、什么是响应
     响应就是由服务器端带给客户端的内容,对应着请求。
     响应可以是普通的字符串,模板 或 重定向
     ex: @app.route('/')
          def index():
         return "普通字符串"
         return render_template('xxx.html')
         # 以上两种行为,本质上响应回去的都是字符串
   2、响应对象
     响应对象:将响应的内容封装到一个对象中,可以完成更多的响应的行为(如:增加cookies,...)
     1、构建响应对象,再响应给客户端
         注意:不是直接响应字符串,而是响应对象。响应对象可以包含响应的字符串,同时也可以实现其他的响应操作
     2、在 flask 中,使用 make_response() 构建响应对象
         from flask import make_response
         @app.route('/xxx')
         def xxx():
             resp = make_response('响应内容')
             # 允许实现其他的响应行为,如:添加cookies,...
         return resp
   3、重定向
     1、什么是重定向
         由服务器端通知客户端重新向一个新的地址发送请求
     2、语法
         from flask import redirect
         ... ...
         return redirect('重定向地址')
         =================================
         resp = redirect('重定向地址')
         # 借助resp实现其他的响应行为
         return resp

2、文件上传
   1、注意问题
     表单中如果有文件上传的话,必须遵循以下两个要求
         1、提交方式 method 必须为 post
         2、表单的 enctype 属性必须设置为 multipart/form-data
   2、服务器端
     1.通过 request.files 获取上传的文件
         f = request.files['文件框的name属性值']
     2.通过 f.save(保存路径) 将文件保存至指定目录处
         通过 f.filename 获取文件的名称
         filename = f.filename
         f.save('static/'+f.filename)
    
    
----------------------------
     任务:
         将上传的文件名称更改为 当前的时间(年月日时分秒微秒).扩展名 再保存到服务器上
         @app.route('/05-file',methods=['GET','POST'])
         def file_views():
             if request.method == 'GET':
             return render_template('05-file.html')
             else:
             # 获取上传的文件
             f = request.files['uimg']
             # 获取上传的文件的文件名
             # filename = f.filename

            # 将上传的文件名称更改为当前的时间(年月日时分秒微秒).扩展名,再上传
             ftime = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')
             # 获取文件的扩展名
             ext = f.filename.split('.')[1]
             filename = ftime + '.' + ext

            # 将上传的文件保存至指定的目录处[绝对路径]
             basedir = os.path.dirname(__file__)
             upload_path = os.path.join(basedir,'static/upload',filename)
             print('upload_path:'+upload_path)
             f.save(upload_path)

            return "Upload OK"
---------------------------------

猜你喜欢

转载自www.cnblogs.com/py321/p/9925784.html