您的位置:首页 > 其它

Flask——1.初识flask微框架

2018-01-02 13:41 281 查看

官网:http://python.usyiyi.cn/translate/flask_011_ch/index.html

1. FLASK 概述

Flask是使用python语言编写的一个轻量级的web框架内部WSGI实现采用Werkzeug,模板引擎使用Jinja2,使用BSD授权开源在行业中,Flask也被称为microframework(微框架),因为Flask使用简单的核心操作,通过extension增加额外的功能,并且Flask没有默认的数据库和表单验证等支持

2. QUICK START

2.1. Installation

Flask的安装比较简单,和常规的模块安装方式一致,通过python提供的包安装工具pip或者easy_install都可以正常安装
pip install flask

2.2. Hello World

安装完Flask之后,我们通过一个简单的应用程序来认识什么是Flask,Flask web项目的开发步骤以及核心组成部分创建demo01.py,编辑如下内容
from flask import Flaskapp = Flask(__name__)@app.route(“/”)def hello():    return “Hello Flask!”
if __name__ == “__main__”:    app.run()
可以看到,flask使用最简单的操作代码,就可以完成一个web项目需要的基本功能了

3.demo案例

3-1.简单的demo,了解falsk基本结构

'''
简单的flask应用
'''
# 引入需要的模块
from flask import Flask

# Flask为核心处理模块,用来创建一个app应用
app=Flask(__name__)
# 定义视图处理函数和对应的访问路由,该函数和路由已经被封装在app中。
@app.route('/')
def index():
return '<h1>首页</h1>'
@app.route('/login')
def login():
return '<h1>登录</h1>'
@app.route('/register')
def register():
return '<h1>注册</h1>'
if __name__=='__main__':
app.run()

"""
总结:Django、Tornado和Flask三种框架定义视图处理函数(类)和路由的区别
Django中定义视图处理函数和路由:
视图处理函数:通过在views.py文件中,通过def关键字定义视图处理函数
    路由:通过在urls.py文件中,urlpatterns=[]定义不同的路由和对应的视图处理函数
Tornado中定义视图处理类和路由:
视图处理类:通过class 关键字定义视图处理类,继承自tornado.web.RequestHandler
访问路由:通过tornado.web.Application配置路由信息,以元组的形式[(),],另外在此处可以配置其他信息Flask中定义视图处理函数和访问路由
    视图处理函数:通过def 关键字定义视图处理类
    访问路由:直接在对应的视图处理函数上方,通过@app.route()定义对应的访问路由,可携带参数"""

3-2.flask传参

# 引入需要的模块
from flask import Flask

# 使用Flask核心处理模块创建app应用
app = Flask(__name__)

# 定义访问路由和对应的视图处理函数

@app.route('/login/<username>')  # 将参数直接通过路由传递给后端
def login(username):  # 括号中用来接收参数
return '接收到参数%s' % username

@app.route('/index/<int:user_id>')  # 传递指定类型的参数
def index(user_id):
return '接收到指定的int类型的参数:[%s]' % user_id

if __name__ == '__main__':
app.run()

"""
总结:

Django中定义路由传递参数:
url('^index/(?P<u_id>\d+)/')
Django2path('index/<int:u_id>/)

Tornado中定义路由传递参数:

Flask中定义路由传递参数
@app.route('/index/<int:user_id>') """

3-3.get和post请求方式传递参数和接收参数,借助于postman插件

postman:专门用于8种请求方式的测试的插件。
'''
get方式和post方式接收参数的方法不同,这里使用了postman(专门测试8中请求方式的插件),进行两种方式的测试
'''

# 引入需要的模块
from flask import Flask,request

# 使用Flask核心处理模块创建一个app应用
app=Flask(__name__)

# 定义访问路由和视图处理类
@app.route('/get')
def get_params():
# request的args属性是专门用来接收get参数的
params=request.args.get('get_params')
return '接收到get参数:%s'%params

@app.route('/post',methods=['POST'])
# 默认所有的视图处理函数只支持get请求,若需要支持其他请求方式,需使用methods属性,以列表的形式列出
def post_params(): # request的form属性是专门用来接收post参数的 params=request.form.get('post_params') return '接收到post参数:%s'%paramsif __name__=='__main__': app.run()
"""
不同请求参数的接收>>>
Django中:    request.GET/POST
Tornado中:    self.get_query_argument()/get_query_arguments()
    self.get_body_argument()/get_body_arguments()
    self.get_arguement()/get_arguments()
Flask中:    request.args.get("key")
    request.form.get("key")
不同请求方式的区分>>>
Django中:
通过request.method == "GET" / "POST"进行视图函数中不同请求方式的处理区分
同样可以通过装饰器注解方式:@require_POST @require_GET方式指定视图函数只能接收那种请求方式Tornado中:
可以通过直接重写父类RequestHandler中的get/post/..的请求处理方法来实现不同的请求方式的区分Flask中:
通过路由装饰器注解的methods属性来指定视图处理函数可以接收那种请求方式        @app.route("/", methods=["get", "post"..])
"""
3-4.网页模板和静态资源
.py文件
# 引入需要的模块
from flask import Flask, request, render_template

# 创建app应用
app = Flask(__name__)

@app.route('/index')
def index():
plist = [{'name': 'jerry'},
{'name': 'tom'},
{'name': 'suker'}]
# render_template会自动搜索同级目录下的templates文件夹找到对应的html文件
return render_template('index.html', plist=plist)

if __name__ == '__main__':
app.run()
"""
静态文件和网页模板的处理:
Django中:
    子模块应用:templates/默认保存网页模板;static/默认保存静态资源;不需要配置
    根项目:settings.py中通过TEMPLATES>DIRS配置网页模板文件夹,通过STATICFILES_DIRS配置静态资源文件夹
Tornado中:
    通过tornado.web.Application中的配置选项
        template_path配置网页模板文件夹位置,static_path配置静态资源文件夹位置
Flask中:
    默认templates/中保存网页模板;static/中保存静态资源,不需要配置

模板语法操作:
Django中:
    默认使用自己的模板语法:Django Template Language:DTL语法
Tornado中:
    默认使用jinja模板语法:~经过一定改造的模板语法
Flask中:
    默认使用第三方的jinja2模板语法,是在DTL语法的基础上完善的一种专门给python使用的模板语法
"""
在该文件同级目录下创建templates文件夹和static文件,用来保存网页模板和静态资源
index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户首页</title>
<link href="/static/index.css" rel="stylesheet">
</head>
<body>
<h1>用户首页</h1>
{% for p in plist %}   # 注意这里的模板语法,django中{% empty %}在这里替换为{% else %}}
<p>{{p['name']}}</p>
{% else %}
<p>还没有任何用户</p>
{% endfor %}
</body>
</html>
文档总结:

1.1. API INTRODUCTION

l flask.Flask核心模块之一,Flask可以构建封装完成的WSGI应用l flask.Flask.route(path)核心模块之一,Flask应用中的路由配置,主要加载在视图操作函数上,完成path路径和视图函数之间的路由映射关系l flask.Flask.run()核心模块之一的函数,通过run()函数将web应用部署到web服务器并启动服务

1.2. 项目访问

通过run()函数直接操作启动服务器,只能在本机访问,如果要让所有主机所在的网络地址都可以访问当前web项目,添加host参数配置即可
app.run(host=“0.0.0.0”)

1.3. 调试模式

默认情况下Flask没有启用调试模式,可以在开发过程中,通过debug配置完成调试模式的启用,调试模式下视图页面和控制台将会展示更多的更加详细的错误信息
app.debug = Trueapp.run(host=“0.0.0.0”)
注意:Flask项目中,调试模式的启用,会允许客户端执行任意python代码,是一个非常大的安全隐患,通常情况下只是在开发过程中使用;在生产环境用严禁使用调试。

1.4. 路由操作

Flask项目中,路由通过@app.route(path)注解的方式进行添加,将访问地址和视图处理函数直接进行关联
from flask import Flaskapp = Flask(__name__)@app.route(“/”)def index():pass@app.route(“/login”)def login():    pass

1.5. RESTful参数操作

路由将对应URL请求路径和视图处理函数进行了关联,我们可以通过URL地址进行参数的传递,也就是RESTful风格的参数操作在Flask中,在路由路径中通过<变量名称>的方式定义URL路径可以接受参数,也可以在参数定义时,定义参数变量的数据类型<类型:变量名称>在视图处理函数的参数列表中,通过该变量名称可以直接使用接收到的参数
from flask import Flaskapp = Flask(__name__)@app.route(“/user/<username>“)def check_username(username):     return “hello %s” % username@app.route(“/userinfo/<int:user_id>“)def check_userinfo(user_id):     return “hello %s” % user_id

1.6. GET/POST请求操作

在@app.route(path)常规路由定义时,参数的传递方式可以通过RESTful方式进行提交,如果是传统的GET/POST提交参数数据时,可以通过Flask指定的方式进行参数数据的获取
from flask import Flask, requestapp = Flask(__name__)@app.route(“/get”, methods=[“GET”])def get_param():print(request.args.get(“param_name”))return “hello get method!”@app.route(“/post”, methods=[“POST”])def post_param():print(request.form.get(“name”))return “hello post method!”

1.7. 视图模板

Flask中通过flask.render_template(..)渲染指定的网页模板给浏览器查看,同时可以附带对应的参数在网页模板中进行展示模板的定义不需要配置任何选项,自动在templates/目录中查询对应的模板页面并且在网页模板中,可以正常使用Jinja2模板语法进行数据的渲染展示操作
from flask import Flask, render_templateapp = Flask(__name__)@app.route(“/”)def index():users = [         {“name”:”admin”, “age”:12},{“name”:”manager”, “age”:23},{“name”:”administrator”, “age”:11},]    return render_template(“index.html”, users=users)
templates/index.html视图网页中通过模板语法渲染数据
<ul>    {% for u in users%}    <li>{{u.name}}--{{u.age}}</li>    {% endfor %}</ul>
注意:视图处理函数中,返回渲染数据,可以直接返回渲染的网页,同样可以返回下一个请求的路由render_template(..):渲染返回指定的网页模板数据redirect(..):渲染返回下一个继续请求的路由

1.8. 静态文件

Flask中的静态文件,存放在项目的static/文件夹中,可以直接定义各种静态文件并在项目网页模板中通过/static/..的路径进行操作项目根目录下创建static/文件夹,文件夹中创建对应的静态文件index.css/home_dir/static/index.css
*{margin:0px;padding:0px;font-size:16px;}p{color:orange;}
在页面模板中,可以通过路径引入对应的静态文件/home_dir/templates/index.html
<!doctype html><html>..    <link rel=“stylesheet” href=“/static/index.css”>..</html>

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: