Flask入门 request session cookie(二)

1 HTTP方法分类

1 GET
浏览器告知服务器:只获取页面上的信息并发给我。这是最常用的方法。
2 HEAD
浏览器告诉服务器:欲获取信息,但是只关心消息头 。应用应像处理 GET 请求一样来处理它,但是不分发实际内容。在Flask中你完全无需人工干预
3 POST
浏览器告诉服务器:想在URL上 发布新信息。并且服务器必须确保数据已存储且仅存储一次。这是 HTML 表单通常发送数据到服务器的方法。
4 PUT
类似 POST 但是服务器可能触发了存储过程多次,多次覆盖掉旧值。你可能会问这有什么用,当然这是有原因的。考虑到传输中连接可能会丢失,在 这种 情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而 不破坏其它东西。因为 POST 它只触发一次,所以用 POST 是不可能的。
5 DELETE
删除给定位置的信息。
6 OPTIONS
给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 HTTP 方法。 从 Flask 0.6 开始,实现了自动处理。

2 访问请求数据request

@app.route('/request/')
def get_http_message():
    print('获取完整的请求url',request.url)     
    print('获取去掉get传参的url',request.base_url)  
    print('获取主机名部分的url',request.host_url)   
    print('获取路由地址',request.path)           
    print('获取请求的方法',request.method)
   
    print('获取get传参',request.args['name'])
    print('获取get传参',request.args.get('name','该key不存在'))
    request.args.getlist(key)   #当key值存在相同时
    
    print('获取form表单传递过来的数据',request.form)
    print('获取form表单文件上传的数据',request.files)
    print('获取请求头信息',request.headers)
    print('获取cookie信息',request.cookies)
    print('获取传递过来的json',request.json)
    return  'request对象'
    
应用到验证登录界面
from flask import Flask,request

@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == 'POST':
        if valid_login(request.form['username'],
                       request.form['password']):
            return log_the_user_in(request.form['username'])
        else:
            error = '不合法username/password'
    return render_template('login.html', error=error)
    
    当访问form中属性不存在时,会抛出一个特殊的 KeyError 异常,你可以像捕获标准的 KeyError 一样来捕获它,不捕获它会显示一个 HTTP 400 Bad Request 错误页面。

因此可以采用args属性来访问URL中提交的参数
value = request.args.get('name','')
推荐使用该方式访问URL,因为用户可能会修改 URL,向他们展现一个 400 bad request 页面会影响用户体验。

3 文件上传

HTML表单中指定enctype = 'multipart/form-data'属性,已上传的文件存储在内存中或者文件系统的临时位置,可以通过request.files来进行访问,每个上传的文件都会存储在这个字典里.

from flask import request,Flask
@app.route('/upload',methods=['GET','POST'])

def upload_file():
    if request.method == 'POST':
        file = request.files['file_name']  #文件存储是一个字典,采用键值对方式取值
        flie.save('/usr/local/file.py')   #可以保存到本地文件系统
        
        #如果你要把文件按客户端提供的文件名存储在服务器上,文件名的访问最好采用secure_filename
        file.save('/usr/local/file.py'+ secure_filename(file.filename))

4 静态文件URL

一般Web应用会需要静态文件渲染页面,通常是CSS与JavaScript文件.Flask的实现方法是在包中或者模块的所在目录创建一个名为static的文件夹,在应用中通过/static访问.
给静态文件生成url
url_for('static',filename='style.css')
对应文件就存储在static/style.css

5 会话之session与cookie

5.1 cookie之参数设置
cookie常见参数设置:
response.set_cookie(
    key, #键
    value, #值
    max_age,#以秒为单位的cookie存活时间 
    expires,失效时间需要datetime的对象
    path = '/',存储的路径    
)
5.2 cookie之三板斧
  • 设置cookie: set_cookie

@app.route('/set_cookie/')
def set_cookie():
    response = make_response('设置cookie')
    response.set_cookie('name','zhangsan') #不设置存活时间 默认为当期浏览会话结束 
    response.set_cookie('name','zhangsan',max_age=10) #设置存活时间为None
    expires = time.time()+10
    response.set_cookie('name','zhangsan',expires=expires) #设置存活时间为时间戳的秒数
    return response
  • 获取cookie:request.cookie
@app.route('/get_cookie/')
def get_cookie():
    print(request.cookies)
    var = request.cookies.get('name','获取不到name的值')
    return '获取cookie的值为{}'.format(var)
  • 移除cookie: delete_cookie
@app.route('/del_cookie/')
def del_cookie():
    response = make_response('清除cookie')
    response.delete_cookie('name') #移除cookie的值
    expiraes = time.time()-10
    response.set_cookie('name','',expires=expires) #不设置存活时间 默认为当期浏览会话结束 
    return response
5.3 session之三板斧
  • 设置session
@app.route('/set_session/')
def set_session():
    #设置session的持久化
    session.permanent = True 
    #设置session存活时间为10分钟
    app.permanent_session_lifetime = timedelta(minutes=10)
    
    session['username'] = 'wangwu'
    return '设置session'
  • 获取session
#获取session
@app.route('/get_session/')
def get_session():
    val = session.get('username','username值不存在')
    return '获取的seesion的值为{}'.format(val)
  • 移除session
#移除session
@app.route('/del_session/')
def del_session():
    username = session.pop('username')
    return '删除了session中{}的值'.format(username)

附:以登录注册作为例子

from flask import Flask, session, redirect, url_for, request

app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])

@app.route('/')
def index():
    #登录用户显示login username
    if 'username' in session:
        return 'login {}'.format(session['username'])
    return '还未登录'

def login():
    #登录界面
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return 'method is support'

@app.route('/logout')
def logout():
    #注销退出登录
    session.pop('username', None)
    return redirect(url_for('index'))

app.secret_key = 'a3f:4AD3/3yXR~XHH!jm[s]daLWX/,?RT'

if __name__ == '__main__':
    app.run()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 目录Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存...
    Tomatoro阅读 16,942评论 7 186
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,617评论 1 49
  • 英语中所涉及的宗教词语数目庞大,经常在不同的场合出现。在英国,基督教为主要的宗教,在相当长的时间内,大量与基督教有...
    MichelleNing阅读 999评论 0 0
  • 2017年8月8日 收到秋实快递过来的礼物,特意准备的惊喜,在上周她已经说要送我的。我以为在等待的日子里会有从前的...
    好文字儿阅读 269评论 0 0