目录
- 基础知识
- 使用框架的优点
- Flask常用扩展包
- 基本格式
- 拓展
- return
- 重定向
- 取网址参数
- content-type
- cookie\\session
- flask路由
- request属性
- 上下文
- 注册路由
基础知识
使用框架的优点
稳定性和可扩展性强
可以降低开发难度,提高了开发效率
Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架
Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQL_Alchemy),都需要用第三方的扩展来实现。
其WSGI工具箱采用Werkzeug(路由模块),模块引擎则使用Jinja2.这两个也是Flask框架的核心
Flask常用扩展包
Flask-SQLalchemy | 操作数据库 |
---|---|
Flask-script | 插入脚本 |
Flask-migrate | 管理迁移数据库 |
Flask-Session | Session存储方式指定 |
Flask-WTF | 表单 |
Flask-Mail | 邮件 |
Flask-Bable | 提供国际化和本地化支持,翻译; |
Flask-Login | 认证用户状态; |
Flask-OpenID | 认证; |
Flask-RESTful | 开发REST API的工具; |
Flask-Bootstrap | 集成前端Twitter Bootstrap框架 |
Flask-Moment | 本地化日期和时间 |
Flask-Admin | 简单而可扩展的管理接口的框架 |
扩展列表:http://shouce.jb51.net/flask0.10/extensions.html
1.中文文档(http://shouce.jb51.net/flask0.10/index.html)
2.英文文档(http://flask.pocoo.org/docs/0.11/)
基本格式
from flask import Flaskapp=Flask(__name__)@app.route(\'/\')def a():return \'aa\'app.run()
打开谷歌 网址为你的ip地址后加上:再加上默认的端口号5000 页面展示为aa
app.run(host=\'0.0.0.0\',port=80,debug=True)
host:设置为\’0.0.0.0\’时在同一个局域网别的电脑ip都能访问,不设置这个参数时只有自己的ip能访问
port:是默认端口号,为80时,网址后面不用加:你设置的端口号,
debug:在代码中修改return的值后debug的值为True时,不用重新执行程序,刷新网页即可刷新内容
拓展
from flask import Flaskapp=Flask(__name__)@app.route(\'/<orders_id>\') #加个<> <>里写的内容为参数def a(orders_id):return \'%s\'%orders_idapp.run()
在谷歌里输入你的ip后加上/你要写的内容 网页展示内容即为你要写的内容
如果限制只能是数字的话 <int:orders_id> <float:orders_id>
return
return 只能返回字符串 和render_template
如果要返回字典之类的 要转成json类型
import jsonjson.dumps()
from flask import Flask,jsonifyreturn {\'a\':\'b\'} #报错return str({\'a\':\'b\'}) #纯文本形式,没有数据类型,即没有键值对return json.dumps({\'a\':\'v\'}) #文本形式,但保留了键值对return jsonify({\'a\':\'v\'}) #json类型 有键值对app.conifg[\'JSON_AS_ASCII\']=False #将返回的汉字不以ASCII形式返回app.config.from_pyfile(\'settings.ini\') # 可以新建settings.ini 在这里写配置
重定向
from flask import Flask,redirect,url_forapp=Flask(__name__)@app.route(\'/\')def a():return \'a\'@app.route(\'/five\')def five():return redirect(url_for(\'a\')) #当你输入网址为你的ip+/+five 时 这个网页展示内容其实就跳转到a()方法里返回的内容#重定向到黑马官网@app.route(\'/demo5\')def demo5():return redirect(\'http://www.itheima.com\')#重定向到自己写的视图函数#可以直接填写自己url路径#也可以使用url_for生成指定视图函数所对应的url@app.route(\'/demo1\')def demo1():return \'demo1\'#重定向@app.route(\'/demo5\')def demo5():return redirect(url_for(\'demo1\'))#重定向到带有参数的视图函数#在 url_for 函数中传入参数# 路由传递参数@app.route(\'/user/<int:user_id>\')def user_info(user_id):return \'hello %d\' % user_id# 重定向@app.route(\'/demo5\')def demo5():# 使用 url_for 生成指定视图函数所对应的 urlreturn redirect(url_for(\'user_info\', user_id=100))
取网址参数
from flask import Flask,request,jsonifyapp=Flask(__name__)@app.route(\'/<id>\')def a(id):return \'%s\'%id#当你输入的网址为你的ip + / + 你要展现的内容, 页面内容即为你要展现的内容@app.route(\'/\')def b():name=request.args.get(\'name\')id=request.args.get(\'id\')return jsonify({\'name\':name,\'id\':id})#当你输入的网址为你的ip + /? +name=小明&id=7 展现的内容即为{\'name\':小明,\'id\':7}
content-type
json类型: \’content-type\’:\’application/json\’
字符串类型:\’content-type\’:\’text/plain\’
解析类型:\’content-type\’:\’text/html\’
cookie\\session
获取cookie request.get.cookie(\’\’)
获取session session.get(\’\’)
cookie:指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)
复数形式Cookies
cookie是由服务器生成,发送给客户端浏览器,浏览器会将Cookie的Key/value保存,下次请求同一网站时就发送该cookie给服务器(前提是浏览器设置为启用cookie)
cookie的Key/value可以由服务器端自己定义
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用
Cookie基于域名安全,不同域名的Cookie是不能互相访问的
如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息
浏览器的同源策略
当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息
#设置cookiefrom flask import Flask,Response@app.route(\'/cookie\')def set_cookie():resp=Response(\"this is to set cookie\")resp.set_cookie(\'username\',\'itcast\')return resp设置过期时间@app.route(\'/cookie\')def set_cookie():response=Response(\'hello world\')response.set_cookie(\'username\',\'itheima\',3600) #单位是秒return response获取cookiefrom flask import Flask,request#获取cookie@app.route(\'/request\')def resp_cookie():resp=request.cookies.get(\'username\')return respSession对于敏感重要的信息,建议储存在服务器端,在服务器端进行状态保持的方案就是sessionsession依赖于cookiesession数据的获取session:请求上下文对象,用于处理http请求中的一些数据内容@app.route(\'/index1\')def index1():session[\'username\']=\'itcast\'return reddirect(url_for(\'index\'))@app.route(\'/\')def index():return session.get(\'username\')记得设置secretz-key=\'itcast\' 这个里面的值自己可以随意设置删除sessionsession.pop(\'\')app.config[\'PERMANENT_SESSION_LIFETIME\']=20 #设置session的时效
flask路由
指定路由地址#指定访问路径为demo1@app.route(\'/demo\')def demo1():return \'demo1\'给路由传参有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息#路由传递参数@app.route(\'/user/<user_id>\')def user_info(user_id):return \'hello %s\'%user_id输入的网址后缀加的什么 在网页展示的就是什么,下面那个函数括号里必须是上面的参数路由传递的参数默认当作string处理,也可以指定参数的类型#路由传递参数@app.route(\'user/<int:user_id>\')def user_info(user_id):return \'hello %d\'%user_id这里指定int,尖括号中的内容是动态的。在此暂时可以理解为接受int类型的值,实际上int代表使用IntergeConverter去处理url传入的参数指定请求方式在Flask中。定义一个路由,默认的请求方式为:GETOPTIONS(自带)HEAD (自带)如果像添加请求方式,@app.route(\'/demo2\',methods=[\'GET\',\'POST\'])def demo2():#直接从请求中取到请求方式并返回return request.method
request属性
request就是flask中代表当前请求的request对象,期中一个请求上下文变量
(理解成全局变量,在视图函数中直接使用可以取到当前本次请求)
属性 说明 类型
data
记录请求的数据,并转换为字符串 *form
记录请求中的表单数据 MultiDictargs
记录请求中的查询参数 MultiDictcookies
记录请求中的cookie信息 Dictheaders
记录请求中的报文头 EnvironHeadersmethod
记录请求使用的HTTP方法 GET/POSTurl
记录请求的URL地址 stringfiles
记录请求上传的文件 *Request.Form
:获取以POST方式提交的数据(接收Form提交来的数据);Request.QueryString
:获取地址栏参数(以GET方式提交的数据)Request
:包含以上两种方式(优先获取GET方式提交的数据),它会在QueryString、Form、ServerVariable中都搜寻一遍。
requests模块发送请求有data、params两种携带参数的方法。
params在get请求中使用,data在post请求中使用。params是往url后面添加参数,data是指POST请求传入的字典或对象
上下文
上下文:相当于一个容器,保存了Flask程序运行过程中的一些信息
Flask中有两种上下文,请求上下文和应用上下文
请求上下文(request context)
思考:在试图函数中,如何取到当前请求的相关数据?比如:请求地址,请求方式,cookie等等
在flask中,可以直接在视图函数中使用request这个对象进行获取相关数据,而request就是请求上下文的对象,保存了当前本次请求的相关数据,请求上下文对象有:request,session
request:
封装了HTTP请求的内容,针对的是http请求。举例:user=request.args.get(\’user\’),获取的是get请求的参数
session:
用来记录请求会话中的信息,针对的是用户信息,举例:session[\’name\’]=user.id,可以记录用户信息,还可以通过session.get[\’name\’]获取用户信息
应用上下文对象有:current_app , g
current_app
应用程序上下文用于存储应用程序中的变量,可以通过current_app.name打印当前app的名称,也可以在current_app中存储一些变量,例如:
应用的启动脚本是哪个文件,启动时指定了哪些参数
加载了哪些配置文件,导入了哪些配置
连了那个数据库
有哪些public的工具类,常量
应用跑在那个机器上,IP多少,内存多大
current_app.name
current_app.text_value=\’value\’
g变量
g作为flask程序全局的一个临时变量,充当着中间媒介的作用,我们可以通过它传递一些数据,g保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别
g.name=\’abc\’
注意:不同的请求,会有不同的全局变量
两者区别:
请求上下文:保存了客户端和服务器交互的数据
应用上下文:flask应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等
上下文中的对象只能在指定上下文使用,超出范围不能使用, 请求上下文和应用上下文原理实现:http://shouce.jb51.net/flask0.10/appcontext.html
注册路由
@app.route(\'/\')def hello():#会返回status code#content-type 在http headers里#content-type=text/html #默认值 当成html格式来解析#将返回的结果封装成一个Response对象headers={# \'content-type\':\'text/plain\', #当成普通的字符串来解析\'content-type\':\'application/json\' #返回json类型}# response=make_response(\'<html></html>\',200) #301是重定向# response.headers=headers# return response# return \'<html></html>\'return \'<html></html>\',200,headers# app.add_url_rule(\'/hello\',view_func=hello) #也可以这样来注册路由的
以上就是python编程Flask框架简单使用教程的详细内容,更多关于python教程Flask框架使用的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:
- Python的Flask框架中实现简单的登录功能的教程
- 以Flask为例讲解Python的框架的使用方法
- python flask框架快速入门
- Python编程中flask的简介与简单使用
- 在Python的Flask框架中使用模版的入门教程
- Python的Flask开发框架简单上手笔记