个人flask笔记(请求,响应,session)

一、请求(Request)

def requesttese():
     1.请求方式
    print(request.method)
 
    2.请求路径
    print(request.path)

    3.请求参数(get) 类似于字典
    print(request.args)  字典形式输出
    print(request.args[‘参数名’])  获取key对应的值

    print(request.args.get(‘参数名’)) 

    注意:推荐用get,因为[  ] 获取不到值会报错,get返回none,应该可根据none做判断       
   
     4.请求参数(post)   类似于字典,默认是接收post参数 还可以接收PUT,PATCH参数                                                      print(request.form.get(‘key值’))

    ImmutableMultiDict类型
        ImmutableMultiDict类似字典的数据结构
        与字典的区别,可以存在相同的键
        args、form、files都是ImmutableMultiDict的对象
     
    ImmutableMultiDict数据获取方式
        dict['uname']       
        dict.get('uname')   # 推荐(在没有数据为空)
        dict.getlist('uname')   # 获取指定key对应的所有值        

    5.url,完整请求地址
    print(request.url)

    6.无请求参数,去掉GET参数的URL
    print(request.base_url)

    7.请求的客户端地址
    print(request.remot_addr)
    
    8.上传文件
    print(request.file)
    
    9.请求头
    print(request.headers)
       
    10.请求中的cookie
    print(request.cookies) 
        
    return ‘测试值’ 

request、session是内置对象(所有路由函数中都有)!


二、响应(Response)

0.直接return,为字符串

1.render_template(“模板”,可传参)
渲染模板,将模板转换成字符串

2.make_response(render_template())
创建一个响应

3.Response(render_template())
创建响应

####################例题####################
@blue.route(“/make/”)
def makeresponse():
    response = render_response(“index.html")
    return make_response(response)
#########################################    

4.redirect(url_for(蓝图名.函数名))

重定向,一般与反向解析结合

5.abort状态码,抛出异常
eg:
@blue.route(‘/’)
def makeabort():
      abort(404)
      return '网页丢失,先看会猴子吧'

6.-异常捕获
- 可以根据状态或 Exception进行捕获
- 函数中要包含一个参数,参数用来接收异常信息
eg:
@blue.errorhandler(404)
def  handler404(exception):
      return '我是404,咋的了'      # 也可以返回写好的404页面
          
三、session、cookie
 
- 客户端会话技术,浏览器的会话技术
- 数据全都是存储在客户端中
- 存储使用的键值对结构进行的存储(key-value)
- Cookie是通过服务器创建的Response来创建的
- cookie特性
    支持过期时间
    默认会自动携带本网站的所有cookie
    根据域名进行cookie存储
    不能跨域名
    不能跨浏览器


 # 首页@blue.route('/index/')
def index():
    name = request.cookies.get('uname','访客')
    return render_template('index.html',uname=name)

# 登录
@blue.route('/login/',methods=['GET','POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    elif request.method == 'POST':
        # 获取用户名
        name = request.form.get('username','访客')
        # 设置cookie
        response = redirect(url_for('twoday.index'))
        response.set_cookie('uname',name)
        return response

# 退出
@blue.route('/quit/')
def quit():
    # 删除cookie
    response = redirect(url_for('twoday.index'))
    response.delete_cookie('uname')
    return response    

自己理解总结:当用户请求提交时,为此用户设置一个cookie令牌,以后访问时,就校对令牌,令牌存放于客户端,服务端并没有保存,应该不安全吧

- 服务端的会话技术
- 所有数据存储在服务器中
- 默认存储在内存中
    django默认做了数据持久化(存在了数据库中)
- 存储结构也是key-value形式,键值对(其实就是字典)
- session 是离不开cookie的

pip install Flask-Session
pip install flask-redis

# 首页
@blue.route('/index/')
def index():
    # 登录界面设置完session,此处获取,传值去首页此uname对应index.html中的变量
    name = session.get('username','访客')
    return render_template('index.html',uname=name)

# 登录
@blue.route('/login/',methods=['GET','POST'])
def login():
    if request.method == 'GET':
         return render_template('login.html')
    elif request.method == 'POST':
        # 获取登录名
        name = request.form.get('username')
        # 设置session,此username与上面username无关系
        session['username'] = name
        return redirect(url_for('twoday.index'))

# 退出
@blue.route('/quit/')
def quit():
# 方式一(一般不建议使用,因为如果改session名的话,不好维护)
    response = redirect(url_for('twoday.index'))
    response.delete_cookie('session')                  系统默认存在cookie中key是session
    return response
# 方式二
    session.pop(“username”)
return redirect(url_for("twoday.index"))

#  __init__中设置session
def create_app():
    app = Flask(__name__)
     
    session存放于缓存redis中的配置
    # 设置秘钥,此值任意编写,有就行
    app.config['SECRET_KEY'] = 'dsfjj13413lkd0&sadas'

    # 设置session类型
    app.config['SESSION_TYPE'] = 'redis'

    # 设置cookie中存储key
    app.config['SESSION_COOKIE_NAME'] = 'yy'

    # 设置超时时间
    app.config['PERMANENT_SESSION_LIFETIME'] = 30

    # 注册蓝图
    app.register_blueprint(blueprint=blue)

    # 初始化Session
    Session(app)

    return app

自己理解总结:当用户请求提交登录时,为此用户设置一个session属性,存放于服务器,服务器响应返回用户一个类似令牌的标识,此令牌存放于cookie中,以后访问时,需要校对cookie中的session标识,确定用户,此方法安全,不用担心客户端的cookie是否修改;因为存放于cookie中,因此删除cookie可删除标识,cookie的默认名是session,不推荐;还有一种删除是删除session属性,常用此种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值