Flask 框架 简介

Posted 51reboot运维开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask 框架 简介相关的知识,希望对你有一定的参考价值。

 

Flask介绍

Flask是一个基于WerkzeugJinja 2 轻量级的web开发框架, 使用Python开发, 上手简单。

安装Flask

pip install Flask

第一个Flask程序

1、编写app.py文件内容如下:

 #encoding: utf-8

 # 导入Flask类
 from flask import Flask # 创建Flask实例
 app = Flask(__name__) # 定义路由, 由index函数处理url为/的GET请求 @app.route('/')
 def index():
     # 返回响应内容
     return 'Hello, Silence' 

 # 脚本运行执行代码
 if __name__ == '__main__':     # 启动Flask实例, 设置监听0.0.0.0:9001, 开启调试模式
     app.run(host='0.0.0.0', port=9001, debug=True)

2、启动程序

python app.py

浏览器访问查看显示内容Flask 框架 简介

程序说明:

  • Line 4: 导入Flask类

  • Line :7 创建Flask实例, 第一个参数为模块或者包的名称, 模块名称会根据是否单独应用而变化因此可以选择使用name变量动态指定, 该参数与Flask查找static和template文件位置有关

  • Line 10: 定义路由endpoint=/, 表示有index函数处理请求url为/的GET请求

  • Line 18: 启动app, 执行监听的host:port, 在测试环境开启调试模

  • 注意: debug模式是不安全的, 在生产环境应该关闭



路由

1、路由用于将python函数绑定到url上, 一个函数可以绑定多个路由规则, 也可以构建动态的url

 @app.route('/users/') 
@app.route('/users/<uid>/') def users(uid=None):     return 'ID: %s' % uid

2、访问浏览器Flask 框架 简介


3、访问浏览器

Flask 框架 简介

4、在动态url中通过添加变量<varname>将参数传递到函数中, 在添加变量可以使用<converter:varname>指定varname的类型

 @app.route('/users/<int:uid>/') 
def user_uid(uid):
     return 'UID: %s' % uid

converter支持int, float, path三种类型

5、路由中的endpoint有两种模式, 以/结尾和不以/结尾

对于以/结尾的route, 在浏览器中访问url时若不以/结尾, 会被flask重定向到与以/结尾的endpoint上

对于不以/结尾的route, 在浏览器中访问url时若以/结尾, 则会返回404错误

个人建议: 在定义route和使用url访问时结尾都加上/

6、路由中可以通过methods指定函数处理的HTTP方法, 默认只处理GET方法

 @app.route('/users/', methods=["GET", "POST"]) 
@app.route('/users/<uid>/', methods=["GET", "PUT", "DELETE"]) def users(uid=None):     print type(uid)     return 'ID: %s' % uid

HTTP方法:

GET: 获取内容

POST: 提交新数据

HEAD: 检查数据是否存在

PUT: 覆盖数据

DELETE: 删除数据

OPTIONS: 检查服务器支持哪些方法


模板

1、项目目录结构:

 .
 ├─ app.py
 ├─ static
 └─ templates
      └─ users.html

2、模板存放目录为/templates/

3、渲染模板

 # 导入render_template
 from flask import render_template

@app.route('/users/') def users():     user_list = [{'name' : 'silence', 'sex' : 1, 'email' : 'silence@localhost.com'}]    
    # 渲染模板     return render_template('users.html', title=u"用户管理", users=user_list)

说明:

  • Line 2: 导入render_template函数

  • Line 8: 使用render_template函数渲染模板users.html, 并将变量title和users传递给模板

4、模板定义

 <!DOCTYPE html> <html>     <head>         <meta charset="utf-8"/>         <title>{{title}}</title>     </head>     <body>         <table style="border: 1px solid black;">             <thead>                 <tr>                     <th>用户名</th>                     <th>性别</th>                     <th>邮件</th>                 </tr>             </thead>             <tbody>             {% for user in users %}                 <tr>                     <td>{{user.name}}</td>                     <td>                     {% if user.sex == 1 %}                     男                                       {% else %}                     女                                         {% endif %}                     </td>                     <td>{{user['email']}}</td>                 </tr>             {% else %}                 <tr><td colspan="3">暂无数据</td></tr>             {% endfor %}             </tbody>         </table>     </body> </html>

说明:

  • Line 5: 将title变量渲染到模板中, 需要使用两个大括号包含变量

  • Line 17: 遍历users, for语句需要被包含在大括号百分号之中,结束需要用endfor

  • Line 21: 条件判断, if语句需要被包含在大括号百分号之中,结束需要用endfif

5、访问浏览器Flask 框架 简介


静态文件

可以在模板中引入本地的js, css, 图片等资源文件

说明:

  1. 静态资源文件需要放置在static目录

  2. 在模板中使用/static/filename.suffix的格式引入文件

  3. 可以使用url_for('static', filename=filename.suffix)函数自动生成url引入文件


请求参数

from flask import request

@app.route('/users/', methods=["GET", "POST"]) def users():
   if request.method == 'GET':        
    return 'GET ID:%s' % request.args.get('id')    
else:        
    return 'GET ID:%s' % request.form.get('id')

说明:

  • Line 1: 导入reqeust对象

  • Line 5: 通过reqeust.method获取请求方法

  • Line 6: 通过reqeust.args获取GET请求提交的参数

访问浏览器Flask 框架 简介

  • Line 8: 通过reqeust.form获取POST请求提交的参数

  通过curl访问 

Flask 框架 简介


  • 若需要上传文件则需要使用request.files获取提交的参数并通过save函数保存到服务器上


from werkzeug import secure_filename

@app.route('/users/', methods=["POST"])
def image():
   img = request.files.get('img')    
   if img is not None:        img.save('e:/tmp/%s' % secure_filename(img.filename))
需要注意在保存用户上传的文件时注意对文件名进行安全处理, 或者使用自己的命名规则,切忌不要直接使用文件名存储到服务器中


cookie

from flask import make_response
@app.route('/users/')
def users():
   response = make_response('Hello, Silence')    response.set_cookie('locale', 'zh_CN')
   print request.cookies.get('locale')    
   return response

说明:

  • Line 1: 导入make_response函数

  • Line 4: 通过make_response创建response对象

  • Line 5: 设置cookie信息locale=zh_CN

  • Line 6: 获取cookie中信息


会话

from flask import session
from flask import redirect

app.secret_key = 'ABCDEFGHIGKLMNOPQRST'

@app.route('/login/', methods=["POST"]) def login():
   if validate_login(request.form.get('username'), request.form.get('password')):        session['user'] = {'username' : request.form.get('username')}        
       return redirect('/users/')    
   else:        
       return render_template('login.html')
       
@app.route('/users/') def users():    
   return session.get('user', {}).get('username')
   
@app.route('/logout/') def logout():    session.pop('user')    session.clear()
   return render_template('login.html')

说明:

  • Line 1: 导入session对象

  • Line 9: 在session中存储信息

  • Line 2: 导入重定向函数redirect

  • Line 10: 重定向到/users/

  • Line 16: 获取session中存储的信息

  • Line 20: 删除session中的信息

  • Line 21: 销毁session中的所有信息

  • Line 4: 设置session签名所使用的密钥, 可以使用os.urandom(32)来生成强壮的密钥


Flask 框架 简介


想要学习更多 Python 知识和更多项目的,还可以参与 Rboot Python实战班课程:


开班时间:5月6日


上课形式: 线上班    线下班


任课老师:蜗牛


课程大纲:

http://www.51reboot.com/course/actual/(点击原文)


免费试听请联系QQ: 279312229     979950755



点击原文,查看更多

以上是关于Flask 框架 简介的主要内容,如果未能解决你的问题,请参考以下文章

Flask框架—— Flask简介

巡风代码架构简介以及Flask的项目文件结构简介

Flask教程1-简介

flask源码分析01:框架简介

Flask框架简介

Flask 框架 简介