Flask——1.初识flask微框架

官网: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之后,我们通过一个简单的应用程序来认识什么是FlaskFlask web项目的开发步骤以及核心组成部分

创建demo01.py,编辑如下内容

from flask import Flask

app = 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():
    # requestargs属性是专门用来接收get参数的
    params=request.args.get('get_params')
    return '接收到get参数:%s'%params

@app.route('/post',methods=['POST']) 
# 默认所有的视图处理函数只支持get请求,若需要支持其他请求方式,需使用methods属性,以列表的形式列出
def post_params(): # requestform属性是专门用来接收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 = True

app.run(host=“0.0.0.0”)

注意:Flask项目中,调试模式的启用,会允许客户端执行任意python代码,是一个非常大的安全隐患,通常情况下只是在开发过程中使用;在生产环境用严禁使用调试。

1.4. 路由操作

Flask项目中,路由通过@app.route(path)注解的方式进行添加,将访问地址和视图处理函数直接进行关联

from flask import Flask

app = Flask(__name__)

@app.route(“/”)

def index():

pass

@app.route(“/login”)

def login():

    pass

1.5. RESTful参数操作

路由将对应URL请求路径和视图处理函数进行了关联,我们可以通过URL地址进行参数的传递,也就是RESTful风格的参数操作

Flask中,在路由路径中通过<变量名称>的方式定义URL路径可以接受参数,也可以在参数定义时,定义参数变量的数据类型<类型:变量名称>

在视图处理函数的参数列表中,通过该变量名称可以直接使用接收到的参数

from flask import Flask

app = 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, request

app = 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_template

app = 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>


























































 
 

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值