Flask

Posted liusouthern

tags:

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

Flask简介:

  Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务,在介绍Flask之前首先来聊下它和Django的联系以及区别,django个大而全的web框架,它内置许多模块,flask是一个小而精的轻量级框架,Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用,相比于其他Web框架例如Django,更加灵活也更加简洁,如下几行代码就可以写出一个小程序:

from flask import Flask
app = Flask(__name__)

@app.route(/)
def hello_world():
    return Hello Flask!

if __name__ == __main__:
    app.run()

接下来我们按照执行顺序来了解下Flask

配置文件

app.config.from_object("settings.DevelopmentConfig") 


 

路由

  路由通过使用Flask的app.route装饰器来设置

动态路由(url传参)

@app.route(/user/<username>)
def show_user_profile(username):
    # show the user profile for that user
    return User %s % username

@app.route(/post/<int:post_id>)
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return Post %d % post_id

如果希望获取/article/1这样的路径参数,就需要使用路径变量。路径变量的语法是/path/<converter:varname>。在路径变量前还可以使用可选的转换器,有以下几种转换器。

转换器作用
string 默认选项,接受除了斜杠之外的字符串
int 接受整数
float 接受浮点数
path 和string类似,不过可以接受带斜杠的字符串
any 匹配任何一种转换器
uuid 接受UUID字符串

 

 

 

 

 

 

HTTP方法

如果需要处理具体的HTTP方法,在Flask中也很容易,使用route装饰器的methods参数设置即可。

  • GET 将未经加密的信息发送的服务器. 是最通用的方法.
  • HEAD 该方法除了服务端不返回响应内容只返回头信息之外, 同GET是一样的.
  • POST 用于向服务器发送html表单数据. POST请求不会被缓存.
  • PUT 将URL所指示的资源用上传的内容替换.
  • DELETE 将URL所指示的资源删除.
from flask import request,render_template

@app.route(/login, methods=[GET, POST])    #如果不加methods,Flask路由默认处理的是GET请求
def login():
    if request.method == POST:
        do_the_login()
    else:
        return render_template(‘xxx.html‘)

 

url_for 和 endpoint

from flask import Flask,url_for
app=Flask(__name__)
@app.route(/<path:url>,endpoint=XXX)        #endpoint默认为函数名
def demo(url):
    print(url_for(‘XXX,url=url)) #如果设置了url参数,url_for(别名,加参数)
    return Hello World

if __name__ == __main__:
    app.run()

 

处理请求

Request 对象

Request 对象是一个全局对象,利用它的属性和方法,我们可以方便的获取从页面传递过来的参数。

request.method 获取请求方法
request.form 获取POST类型的表单提交的数据
request.args 获取get请求参数 
request.values 获取GET和POST请求携带的所有参数(GET/POST通用)
request.cookies 获取cookies信息
request.headers 获取请求头信息
request.path 获取cookies信息
request.full_path 获取获取用户访问的完整url地址+参数 例如(/index/?page=1)
request.url 获取完整路径
request.base_url 获取访问url地址(不获取参数),例如 http://127.0.0.1:5000/;
request.files 获取用户上传的文件

 

 

 

 

 

 

 

 

 

 

 

 

 

响应处理

  • 返回字符串   ----return “asdf”    
  • 返回模板       ----return render_template(‘xxx.html‘)   
  • 返回重定向   ----return redirect(‘ /‘)
  • 返回字典       ----jsonify({‘k1‘:‘v1‘})

  默认的错误页面是一个空页面,如果需要自定义错误页面,可以使用errorhandler装饰器。

from flask import render_template

@app.errorhandler(404)
def page_not_found(error):
    return render_template(page_not_found.html), 404

  我们也可以自己决定如何设置响应对象,方法也很简单,使用make_response函数即可。

@app.errorhandler(404)
def not_found(error):
    resp = make_response(render_template(error.html), 404)
    resp.headers[X-Something] = A value
    return resp

 




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

12_关于flask中的宏

Flask之模板之宏继承包含

Flask模板宏的概念和基本使用

python flask(多对多表查询)

python后端 flask框架 计算时间差 并根据时间差条件返回flag值

python后端 flask框架 计算时间差 并根据时间差条件返回flag值