Flask零基础到项目实战(七)请求方法、g对象和钩子函数
来源:互联网 发布:怎么通过网络挣钱 编辑:程序博客网 时间:2024/05/16 15:44
文章来源—知了课堂的课件
一、get方法
二、post方法
post请求在模板中要注意几点:
- input标签中,要写name来标识这个value的key,方便后台获取。
- 在写form表单的时候,要指定
method='post'
,并且要指定action='/login/'
。 - 示例代码:
<form action="{{ url_for('login') }}" method="post"> <table> <tbody> <tr> <td>用户名:</td> <td><input type="text" placeholder="请输入用户名" name="username"></td> </tr> <tr> <td>密码:</td> <td><input type="text" placeholder="请输入密码" name="password"></td> </tr> <tr> <td></td> <td><input type="submit" value="登录"></td> </tr> </tbody> </table> </form>
三、g对象
g:global
1. g对象是专门用来保存用户的数据的。
2. g对象在一次请求中的所有的代码的地方,都是可以使用的。
使用步骤:
1.创建一个utils.py文件,用于测试除主文件以外的g对象的使用
utils.py
#encoding: utf-8from flask import gdef login_log(): print u'当前登录用户是:%s' % g.usernamedef login_ip(): print u'当前登录用户的IP是:%s' % g.ip
2.在主文件中调用utils.py中的函数
#encoding: utf-8from flask import Flask,g,request,render_templatefrom utils import login_log,login_ipapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello World!'@app.route('/login/',methods=['GET', 'POST'])def login(): if request.method == 'GET': return render_template('login.html') else: username = request.form.get('username') password = request.form.get('password') g.username = username g.ip = password login_log() login_ip() return u'恭喜登录成功!'if __name__ == '__main__': app.run()
测试:
现在在浏览器里面,访问两次服务器,效果如下:
四、钩子函数
在程序正常运行的时候,程序按照A函数—->B函数的顺序依次运行;钩子函数可以插入到A函数到B函数运行中间从而,程序运行顺序变成了A—->钩子函数—->B函数。
Flask项目中有两个上下文,一个是应用上下文(app),另外一个是请求上下文(request)。请求上下文request和应用上下文current_app都是一个全局变量。所有请求都共享的。Flask有特殊的机制可以保证每次请求的数据都是隔离的,即A请求所产生的数据不会影响到B请求。所以可以直接导入request对象,也不会被一些脏数据影响了,并且不需要在每个函数中使用request的时候传入request对象。这两个上下文具体的实现方式和原理可以没必要详细了解。只要了解这两个上下文的四个属性就可以了:
- request:请求上下文上的对象。这个对象一般用来保存一些请求的变量。比如method、args、form等。
- session:请求上下文上的对象。这个对象一般用来保存一些会话信息。
- current_app:返回当前的app。
- g:应用上下文上的对象。处理请求时用作临时存储的对象。
常用的钩子函数
before_first_request:处理第一次请求之前执行。
例如以下代码:
@app.before_first_requestdef first_request(): print 'first time request'
before_request:在每次请求之前执行。通常可以用这个装饰器来给视图函数增加一些变量。
例如以下代码:
@app.before_requestdef before_request(): if not hasattr(g,'user'): setattr(g,'user','xxxx')
teardown_appcontext:不管是否有异常,注册的函数都会在每次请求之后执行。
@app.teardown_appcontextdef teardown(exc=None): if exc is None: db.session.commit() else: db.session.rollback() db.session.remove()
template_filter:在使用Jinja2模板的时候自定义过滤器。比如可以增加一个upper的过滤器(当然Jinja2已经存在这个过滤器,本示例只是为了演示作用):
@app.template_filterdef upper_filter(s): return s.upper()
context_processor:上下文处理器。返回的字典中的键可以在模板上下文中使用。
例如:
@app.context_processordef my_context_processor(): return {'current_user':'xxx'}
errorhandler:errorhandler接收状态码,可以自定义返回这种状态码的响应的处理方法。
例如:
@app.errorhandler(404)def page_not_found(error): return 'This page does not exist',404
阅读全文
1 0
- Flask零基础到项目实战(七)请求方法、g对象和钩子函数
- Flask零基础到项目实战(五)Flask-Script
- Flask零基础到项目实战(一)
- Flask零基础到项目实战(六)cookie和session(一)
- Flask零基础到项目实战(六)cookie和session--操作session(二)
- Flask零基础到项目实战(二)第一个flask程序
- Flask零基础到项目实战(三)Jinja2模板系统 (二)
- Flask零基础到项目实战(四)SQLAlchemy数据库(一)
- Flask零基础到项目实战(四)SQLAlchemy数据库(二)
- Flask零基础到项目实战(四)SQLAlchemy数据库(三)
- Flask零基础到项目实战(四)SQLAlchemy数据库(四)
- Flask零基础到项目实战(三)Jinja2模板系统
- Flask零基础到项目实战(六)模型分文件
- Flask源码阅读(八)——请求钩子
- 零基础入门学习Python(20):对象(5)类和对象的内置函数
- 用flask开发个人博客(15)—— flask中四种请求钩子
- .net实战项目零基础学习视频教程
- 用flask开发个人博客(3)—— flask中的请求和视图函数映射
- 【项目心得】在微信网页上的点击按钮复制功能
- 网上的爆客软件实现流程
- 如何查看mysql 优化后的执行语句
- 基姆拉尔森公式计算周几的C语言实现方法
- 解决Error:Bootstrap dropdown require Popper.js (https://popper.js.org)
- Flask零基础到项目实战(七)请求方法、g对象和钩子函数
- Hadoop学习笔记 1
- 不同领域的人们是怎样使用思维导图的(下)
- HDU
- NIO学习之Selector,SelectionKey与客户端与服务端通信简单实现(1)
- mongoose
- Hdu 1231 最大连续子序列
- Android 根据Uri删除文件
- 使用ViewPager实现顶部tabbar切换界面