欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python Flask部分扩展介绍

程序员文章站 2024-03-18 12:25:58
...

一、Flask-Script

安装:pip install flask-script

python Flask部分扩展介绍

Flask-Script扩展实现了一个Manager类,可以通过该类为Flask程序添加命令行解释器。比如把命令解析功能加到HelloWorld的例子:

helloword.py:

#coding:utf-8  

from flask import Flask  
from flask_script import Manager

app=Flask(__name__)  
manager=Manager(app)

@app.route("/")  
def index():  
	return "<h1>Hello World!</h1>"

if __name__=="__main__":
	manager.run()

Flask的扩展初始化方法打开与上面的Manager例子都类似,即把Flask程序实例传递到构造函数中。另一种方法:

manager=Manager()
manager.init_app(app)
现在Flask程序可以解析命令行了,可以在运行脚本命令后面加上命令,例如启动服务器需要加上一个runserver的命令:

python Flask部分扩展介绍

runserver是默认的一个命令,命令后面还可以加一些选项作为参数,比如想把指定host为"0.0.0.0"便于网络中其他设备访问服务:

python Flask部分扩展介绍

在命令后使用--help可以查看帮助信息。

另一个默认的命令是shell,用于在程序上下文中启动Python shell命令。除了这两个默认的命令,我们也可以自己增加命令。

增加命令的方法:

①调用manager的add_command方法:

manager.add_command("runserver",Server("0.0.0.0",5000))
可以把默认的runserver命令顶掉,新的命令指定了host和port。

②@manager.command修饰器:

@manager.command
def hello():
	print "Hello World!"
python Flask部分扩展介绍

③@manager.option修饰器增加带选项的命令:

@manager.option('-n', '--name', dest='name',default="muma")
@manager.option('-u', '--url', dest='url')
def hello(name, url):
    print "hello", name, url
python Flask部分扩展介绍

可支持选项简写,省略选项可以设置默认值,如果没设置,则默认为None。


二、Flask-Bootstrap

Bootstrap是一个前端框架,有一些已经实现好的CSS和JS脚本,能够方便的控制页面显示和效果。Flask-Bootstrap是包含了Bootstrap的扩展,安装Flask-Bootstrap之后,就可以在程序中集成Bootstrap。

安装 :

python Flask部分扩展介绍

安装完成后,可以在程序中进行初始化:

bootstrap=Bootstrap(app)
然后就可以在html文件中通过继承bootstrap/base.html,让页面具有基本结构,并且可以通过Bootstrap提供的CSS和JS来调整页面效果。可以在Flask扩展包里查看bootstrap/base.html。

hello.html:

{% extends "bootstrap/base.html" %}
{% block title %} Flask-Bootstrap {%endblock %}

{% block navbar %}
<div class="navbar-inverse" role="navigation">
  <div class="container">
    <div class="navbar-header">
	  <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
	    <span class="sr-only">Toggle navigation</span>
		<span class="icon-bar"></span>
		<span class="icon-bar"></span>
		<span class="icon-bar"></span>
	  </button>
	</div>
    <div class="navbar-collapse collapse">
	  <ul class="nav navbar-nav">
	    <li><a href="/">Home</a></li>
	  </ul>
	</div>
  </div>
</div>
{% endblock %}

hello.py:

#coding:utf-8

from flask import Flask,request,render_template
from flask_script import Manager
from flask_bootstrap import Bootstrap

app=Flask(__name__)
manager=Manager(app)
bootstrap=Bootstrap(app)

@app.route("/",methods=["POST","GET"])
def index():
	return render_template("hello.html")

if __name__=="__main__":
	manager.run()
Bootstrap中定义了可在子模板中重定义的块,可以通过查看bootstrap/base.html查看。

有一些块不能直接重定义,要使用super()函数继承基类模板中的内容。


三、Flask-Moment:本地化时间和日期

安装:

python Flask部分扩展介绍

初始化:

from flask_moment import Moment
moment=Moment(app)
在hello.html引入moment.js库:
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{{ moment.lang("zh-cn") }}
{% endblock %}
同时在页面中显示时间:

{% block content %}
 <div>
时间:{{ moment(current_time).format("LLL") }},{{ moment(current_time).fromNow(refresh=True) }}
 </div>
{% endblock %}
python Flask部分扩展介绍

如果没有引入了moment.js但是没有显示时间,注意查看标签的display属性是不是被设置为了none。


四、Flask-WTF-简化表单处理、防跨站请求伪造(CSRF)攻击

安装:pip install flask-wtf

使用:

1.设置秘钥

    为了实现CSRF防护,需要为程序设置一个**,该**可以在Flask和多个扩展中使用。

import os
app=Flask(__name__)
app.config["SECRET_KEY"]=os.environ.get("SECRET_KEY") or "secret string"
为了增强安全性,上述代码从环境变量中获取**,只有获取不到才采用一个默认的**串。设置环境变量的方法是使用指令:

python Flask部分扩展介绍

如果没有变量值空格,可以省略掉双引号。

2.表单类

Flask-WTF的每个web表单都是一个Form类,把Form类的对象作为参数渲染模板,然后在模板中调用表单渲染函数把form对象处理为前端显示的表单即可。

from flask_ext import Form
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired

class NameForm(Form):
	name=StringField("你是?",validators=[DataRequired])
	submit=SubmitField("提交")
@app.route("/",methods=["POST","GET"])
def index():
    name=None
    form=NameForm()
    if form.validate_on_submit():
        name=form.name.data
        form.name.data=""
    return render_template("hello.html",form=form,name=name)

上面的例子中,StringField字段表示单行输入框控件,DataRequired()是表单提交验证函数,要求该字段不能为空,后面有队WTForms支持的HTML标准字段以及WTForms验证函数的列表。

在hello.html中渲染表单:

 <form method="POST">
   {{ form .hidden_tag() }}
   {{ form.name.label }} {{ form.name(id="form_name") }}
   {{ form.submit() }}
 </form>
但是这样的渲染方式工作量还是很大,并且表单很丑陋(虽然可以通过标签的id、class等熟悉修改表单表现),更快捷的方法是使用Flask-Bootstrap提供的辅助函数:

{% import "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form)}}
python Flask部分扩展介绍


WTForms支持的HTML表单标准字段
字段 说明
StringField 文本字段
TextAreaField 多行文本
PasswordField 密码文本
HiddenField 隐藏文本字段
DateField 文本字段,值为datetime.date格式
DateTimeField 文本字段,值为datetime.datetime格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为decimal.Decimal
FloatField 文本字段,浮点数
BooleanField bool值复选框
RadioField 单选框
SelectField 下拉列表
SelectMultipleField 下拉多选框
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 嵌套表单
FieldList 一组指定类型的字段

WTForms验证函数
函数 功能
Email 验证电子邮件
EqualTo 验证两个字段,比如确认密码
IPAddress 验证IPV4地址
Length 验证输入串长度,如Length(0,14)
NumberRange 验证输入值的数字范围
Optional 无输入时跳过其他验证函数
Required 新版本为DataRequired
Regexp 验证是否符合正则
URL 验证是否符合URL
AnyOf 指定输入值列表
NoneOf 指定非输入值列表


相关标签: Flask扩展