Flask学习笔记(5)
Day 05
cookie(小型文本文件),是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。举个通俗的例子,你的浏览器在登录某个网站时会把你的用户民和密码以及一些其他的信息保存在cookie中,当你下次登录这个网站时,cookie会随着你的http请求一起被发到服务器,服务器从中读出你的用户名和密码后就省得你再手动登录了,cookie也可以设置存在时间,比如一周或一个月或永久,表现为如果你一段时间不访问那个网站,之后访问时重新让你登录。
cookie 和 session
session使用
from flask import Flask,session #需要先在配置中设置 SECRET_KEY = '24个字符的字符串' app.config['SECRET_KEY']=os.urandom(24) #操作session和操作字典一样 #session['name']='xxx' session.get('name') #获取 session.pop('key') #删除 session.clear() #清除 #如果没有指定session的过期时间,默认为浏览器关闭后就自动结束 session.permanent = True #过期时间31天 #修改持续时间的方法为 from datetime import timedelta app.config['PERMANENT_SESSION_LIFETIME']=timedelta(days=7) #指定天数
get和post
最基本的两种请求方式,这里就不再赘述,flask中的使用看个简单小demo吧
@app.route('/') def index(): return render_template('index.html') @app.route('/search/') def search(): q = request.args.get('q') return u'查询内容是:%s' % q #不写method参数默认为GET @app.route('/login/', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: usn = request.form.get('username') psw = request.form.get('password')
...
页面部分,使用表单来实现 post 请求的跳转
<!--index.html的body部分--> <body> <a href="{{ url_for('search',q='hello') }}">jump to search</a> </body> <!--login.html的body部分--> <body> <!--如果跳转页面和当前页面一致,action可以为空--> <form action="{{ url_for('login') }}" method="post"> <table> <tbody> <tr> <td>username:</td> <td><input type="text" placeholder="please enter your usn" name="username"></td> </tr> <tr> <td>password:</td> <td><input type="text" placeholder="please enter your psw" name="password"></td> </tr> <tr> <td></td> <td><input type="submit" value="login"></td> </tr> </tbody> </table> </form> </body>
钩子函数(hook)
钩子函数的功能就如同他的名字一样,是用来钩住某些东西的。那这些“东西”在代码中指代的就是某些事件或是消息。通过钩子函数的使用可以方便的让网页对某些事件做出处理。这里介绍两个在flask中十分常用的钩子函数。
before_request
在请求之前执行,即在视图函数执行之前执行,是一个装饰器
@app.before_request
def my_before():
pass
结合上文中所说的session就可以在这部分写一个登录验证的装饰器啦。许多网站的不同页面不是都要在登录状态下才能访问吗,用钩子函数就可以轻松实现这个功能,只要给那个页面的函数加上这个装饰器即可。
context_processor(上下文处理器)
返回一个字典,字典中的key会被模板当成变量来渲染,在所有页面中都是可用的。当你在某个页面想用另一个页面的一些值的时候就可以通过它来实现啦。
@app.context_processor def my_context(): return { 'key':'value' }
感觉又摸了好久的🐟,明天一定不摸

浙公网安备 33010602011771号