操作请求数据

第1关:请求对象

知识点

1.请求类型

(1)GET 请求:访问时会在地址栏直接显示,参数不安全,且参数大小比较小;

(2)POST 请求:参数不显示在地址栏,一般用户注册、登录都通过 POST 请求完成。

2.获取GET请求参数:

print(request.args) # 获取GET请求通过url传过来的值
print(request.args.get("name")) # 通过 get 获取 name
print(request.args["name"]) # 通过索引获取 name
print(request.args.to_dict()) # 将传入的GET参数获取到一个字典

3.获取POST请求参数:

print(request.form)  # 获取以 POST 方式提交的数据
print(request.form.get('name')) # 获取 POST 请求参数
print(request.form.getlist('hobby'))  # 获取一键多值类型的参数
print(request.form.to_dict()) # 将传入的POST参数获取到一个字典

编程要求

要求根据请求方式处理不同操作。具体要求如下:

  • 如果请求为 GET 请求,则返回该原始页面;
  • 如果请求为 POST 请求,则获取该请求参数。以指定格式返回;
  • 具体要求请参见后续测试样例。
  • 注意本关卡预置的返回模板为 register.html
from flask import Flask, request, render_template

app = Flask(__name__,static_url_path="/templates",static_path="/static")
app.config['DEBUG'] = True

@app.route('/register', methods=['GET', 'POST'])
def register():  # 视图函数
    # 请在此处填写代码,并根据左侧编程要求完成代码的编写
    # ********** Begin *********#
    if request.method=='GET':
        return render_template('register.html')
    if request.method=='POST':
        return "姓名:%s 年龄:%s 爱好:%s"%(request.form.get('name'),request.form.get('age'),request.form.getlist('hobby'))
    # ********** End *********#

第2关:文件上传

知识点

1.前端form表单中enctype属性可用来控制表单数据在发送之前是如何进行编码的:

(1)multipart/form-data:不对字符编码,用于发送二进制文件;

(2)text/plain:用于发送纯文本内容,空格转换为 "+" 加号,不对特殊字符进行编码;

(3)application/x-www-form-urlencoded:在发送前会编码所有字符,即在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,"+" 加号转换为空格,特殊符号转换为ASCII HEX值)。

编程要求

要求实现文件上传操作的功能。具体要求如下:

  • 如果请求为 GET 请求,则返回该原始页面;
  • 如果请求为 POST 请求,则获取上传的文件;
  • 如果检查到文件部件不存在或文件名为空(用户不选择文件,浏览器也提交),则返回该原始页面;
  • 判断上传的文件格式是否为指定的格式(允许上传的文件后缀),同时确定文件名是否安全;
  • 将上传的文件保存至media文件夹中;
  • 文件保存成功后,则返回**文件上传成功!,否则,返回文件上传失败!**;
  • 具体要求请参见后续测试样例。
  • 注意本关卡预置的返回模板是 upload.html
from flask import Flask, request, render_template, redirect
from werkzeug.utils import secure_filename
import os

app = Flask(__name__,static_url_path="/templates",static_path="/static")

# 保存后的文件路径(当前路径下)
UPLOAD_FOLDER = 'media'
# 允许存在的文件后缀
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif',"csv"])

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 判断上传的文件是否是允许的后缀
def allowed_file(filename):
    # 请在此处填写代码
    # ********** Begin *********#
    return "." in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
    # ********** End **********#

@app.route("/upload", methods=['GET', 'POST'])
def upload():
    # 请根据左侧编程要求实现相关代码实现
    # ********** Begin *********#
    # 如果请求为GET请求,则返回该原始页面
    if request.method=='GET':
        return render_template('upload.html')
        # 如果请求为POST请求,则获取上传的文件;
        # 检查到文件部件不存在或文件名为空(用户不选择文件,浏览器也提交),则返回该原始页面
    else:
        if "file" not in request.files:
            return render_template('upload.html')
            #return redirect(request.url)
        file = request.files.get('file')
        if file.filename == '':
            return render_template('upload.html')
            #return redirect(request.url)
        # 判断上传的文件格式是否为指定的格式
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            # 将上传的文件保存至media文件夹中
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
            return  "文件上传成功!"
        else:
            return  "文件上传失败!"
  
    # ********** End **********#

第3关:Cookies应用

编程要求

要求实现在 Flask 中操作 Cookie 的功能。具体要求如下:

  • 补全set_cookie()函数,实现浏览器请求服务器写入 Cookie ;(通过浏览器存储到本地)

  • 补全get_cookie()函数,实现浏览器请求服务器查询存储在 Cookie 中的值;
  • 补全del_cookie()函数,实现浏览器请求服务器删除 Cookie 中的值
from flask import Flask,Response, request

app = Flask(__name__)

@app.route("/set_cookie")
def set_cookie():
    reps = Response("写入cookie成功!!!")
    # 请在此处填写代码,实现浏览器请求服务器写入cookie
    # cookie存储的信息为: key:username value:zhangsan
    #********** Begin *********#
    reps.set_cookie('username','zhangsan')
    #********** End *********#
    return reps
   
@app.route("/del_cookie")
def del_cookie():
    reps = Response("删除cookie成功!!!")
    # 请在此处填写代码,实现浏览器请求服务器删除cookie中的值
    #********** Begin *********#
    reps.delete_cookie('username')
    #********** End *********#
    return reps
  
@app.route("/get_cookie")
def get_cookie():
    # 请在此处编写代码,实现查询存储在cookie中的值
    #********** Begin *********#
    username=request.cookies.get('username')
    #********** End *********#
    if username:
        return "获取到的Cookie值为:"+username
    else:
        return u"没有获取到Cookie"

第4关:Session应用

编程要求

要求使用 Flask 操作 Session 并实现相关功能。具体要求如下:

  • config.py中配置使用一组 24 位的随机数对 Session 进行加密,并设置 Session 过期时间为 2 天;
  • 补全set_session()函数,实现用户请求服务器设置 Session ;
  • 补全get_session()函数,实现用户请求服务器获取 Session ;
  • 补全del_session()函数,实现用户请求服务器删除 Session ;
from flask import Flask, session
import os
from datetime import timedelta
app = Flask(__name__)
# 请在此处填写代码,并根据左侧编程要求完成代码的编写
# ********** Begin *********#
# 使用一组随机数对session进行加密
app.config['SECRET_KEY'] = os.urandom(24)
# 修改session 过期时间
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=2)
# ********** End *********#
# 用户请求设置session
@app.route('/set_session')
def set_session():
    # 请在此处填写代码,实现用户请求服务器设置session
    # session存储的信息为: key:username value:hinzer
    #********** Begin *********#
    session['username'] = 'hinzer'
    # 设置持久化
    session.permanent = True
    #********** End *********#
    return '设置Session成功!'
# 用户请求清除session
@app.route('/del_session')
def del_session():
    try:
        # 请在此处填写代码,实现用户请求服务器删除session
         #********** Begin *********#
        session.pop("username")
        #********** End *********#
    except Exception:
         return "Session不存在!"
    return '清除Session成功!'
# 用户请求查询session
@app.route('/get_session')
def get_session():
    # 请在此处填写代码,实现用户请求服务器获取session
    # ********** Begin *********#
    username = session.get('username')
    # ********** End *********#
    return "获取到的Session值为:"+username or '没有Session值'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值