博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask快速入门
阅读量:6369 次
发布时间:2019-06-23

本文共 3784 字,大约阅读时间需要 12 分钟。

Flask是一个Python实现的Web开发框架, Flask的设计思想为核心尽可能的微小和专能,扩展功能则由独立模块灵活实现.

Flask应用基于模板引擎和 WSGI工具集, 若有需要可以阅读它们的文档.

可以使用pip安装flask;

pip install flask

Hello World

首先来让服务器打个招呼:

from flask import Flaskapp = Flask('hello')@app.route('/hello/')def hello():    return 'Hello World!'app.run(port=8080, debug=True)

运行这段脚本, 访问localhost:8080/hello/则可以看到来自服务器的Hello World信息.

@app.route('/hello/')修饰器用于绑定url和处理函数, 可以将多个url绑定到一个函数上:

@app.route('/hello/')@app.route('/')def hello():    return 'Hello World!'

Flask建议使用像/hello/这样两边含有斜线的url, 这样当访问/hello时会自动重定向到/hello/.

@app.route('/hello')不会对/hello/请求进行响应.

app.run(port=8080, debug=True)用于启动app, port指定监听的端口.

app的参数还可以直接设置:

app.port = 8080app.run()

debug模式下, 当脚本改变时服务器会自动重启.在需要fork的环境下debug模式无法使用, 即不能用于生产环境下.

编写响应函数

响应函数的返回值将生成response返回给客户端, 上文已经展示用str作为响应.

使用模板

Flask使用jinja2模板引擎, 可以使用模板作为响应:

from flask import render_template@app.route('/template/')def show_template():    return render_template('template.html', name='finley')

默认模板文件存放在工作目录的templates子目录下.

使用符合jinja2规则的模板:

    
Template {
{ name }}

视图函数的返回值会被自动转换为一个响应对象,Flask 把返回值转换为响应对象的规则为:

  1. 合法的响应对象会被直接返回.

  2. 若返回的是一个字符串,响应对象会用字符串数据和默认参数创建。

  3. 若返回的是一个元组,则必须是 (response, status, headers) 的形式,且至少包含一个元素. status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值.

  4. 若上述条件均不满足, Flask 会假设返回值是一个合法的 WSGI 应用程序,并转换为一个请求对象.

使用静态文件

静态文件存放在static子目录下, 使用'/static'+文件名进行访问, 或者使用url_for来获得静态文件url:

url_for('static', filename='jquery.js')

进行重定向

使用redirect可以将请求重定向到指定url:

from flask import redirect, url_for@app.route('/index/')def index():    return redirect(url_for('static', filename='index.html'))

redirect(url, code=302)默认使用302(临时重定向)作为状态码, 也支持其它3开头的状态码: 303, 305, 307.

获得请求参数

获得url匹配

@app.route()可以将url中匹配的字符串当做位置参数传入响应函数:

@app.route('/user/
/')def user_info(username): return 'hello, %s' % username

若访问/user/finley/, 响应函数user_info会得到值为'finley'的位置参数.

获得query参数

其它包含在HTTP请求中的参数我们需要导入request对象:

from flask import request

在全局request对象中获得query参数:

@app.route('/query/')def query():    return request.args.get('query')

获得表单与头部参数

在request.form中获得表单提交的参数:

@app.route('/do-login/', methods=['POST'])def do_login():    if request.method == 'POST':        username = request.form['username']        password = request.form['password']        return '%s , login success' % username    else:        return 'Please use POST method'

@app.route的methodes参数指定了允许的HTTP方法, 默认仅允许'GET'.

我们可以在request.headers中获得包含在头部的参数:

request.headers['ACCEPT_LANGUAGE']

当然也可以添加或修改headers.

注意上述语句获得的头部参数实际是'HTTP_ACCEPT_LANGUAGE'.

文件上传

app.config是一个可以自定义配置的字典, 我们在里面写入上传文件的保存目录:

app.config['UPLOAD_FOLDER'] = os.path.join(os.path.dirname(__file__), "upload")

编写上传文件的表单记得设置enctype="multipart/form-data":

request.files中获得文件信息, 并使用save方法保存:

from werkzeug.utils import secure_filename@app.route('/do-upload/', methods=['POST'])def do_upload():    if request.method == 'POST':        f = request.files['filename']        f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))        return 'upload success'    else:        return 'Please use POST method'

secure_filename方法可以处理文件名中的非法字符和转义字符返回合法文件名.

session与cookie

使用request可以很方便地获得cookie:

token = request.cookies.get('token')

上文中的响应函数返回值均被Flask转换为response对象, 然而cookie需要设置在response对象上所以我们需要自行建立响应对象:

from flask import make_response@app.route('/auth/
')def auth(redirect_uri): response = make_response(redirect(redirect_uri)) uid = request.cookies.get('uid') token = authen(uid) response.set_cookie('token', token) return response

session

与cookie将数据保存在客户端不同, session将数据保存在服务端并使用加密的cookie识别客户端身份.

若要使用session首先要为app设置secret_key用来签名:

app.secret_key = 'thisGGisRRa12secret'

session的是一个保存了相关参数的字典, 可以方便的进行操作:

session['last_login'] = time()last_login = session['last_login']session.pop('last_login')

参考资料:

转载地址:http://svema.baihongyu.com/

你可能感兴趣的文章
nasm预处理器(2)
查看>>
【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)...
查看>>
事务隔离级别(图文详解)
查看>>
又一个 iOS 侧边栏组件: SideMenu
查看>>
espresso 2.0.4 Apple Xcode 4.4.1 coteditor 价格
查看>>
Goldengate 维护
查看>>
ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证
查看>>
所有转义字符
查看>>
C# 属性事件一些设置说明
查看>>
去除UITableViewheader footer黏性
查看>>
windows2003 iis6.0不能显示asp.net选项
查看>>
xen MacOS
查看>>
如何学好C和C++
查看>>
Gitlab通过custom_hooks自动更新服务器代码
查看>>
python 如何判断调用系统命令是否执行成功
查看>>
Lesson10 vSphere 管理特性
查看>>
memcache 扩展和 memcached扩展安装
查看>>
好程序员的查克拉---自信
查看>>
线程池的设计(二):领导者追随者线程池的设计
查看>>
获取设备列表
查看>>