flask是Python的一个轻型Web框架.
使用pycharm自动创建项目,也可以手动创建,以下是目录的结构:
├── app.py |
├── static |
└── templates |
一、创建一个简单应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "hello world "
if __name__ == '__main__':
app.run()
其中,创建Flask实例时,可以自定配置主要有:
参数 | 说明 |
---|---|
static_path | 静态文件访问路径(不推荐使用,使用 static_url_path 代替) |
static_url_path | 指定静态文件的访问路径(默认为 / + static_folder) |
static_folder | 指定存放静态文件资源的文件夹的名称(默认为static) |
template_folder | 指定存放模板的文件夹的名称(默认为templates) |
二、路由规则
1.简单路由
@app.route('/')
def hello_world():
return "hello world "
2.带参数的路由
2.1不限定类型
@app.route("/user/<username>")
def user_info(username):
return "hello %s" % username
2.2限定类型
@app.route("/user/<string:username>")
def user_info(username):
return "hello %s" % username
注:这里是string而不是str
其他的类型有: int 、 float、uuid、path
3.正则路由
在Flask中是不能直接使用re的,需要使用转换器。转换器的作用就是:过滤指定用户。
使用正则路由的步骤:
1、导入转换器基类(BaseConverter)
2、自定义转换器(需要继承BaseConverter)
3、把自定义的转换器添加到转换器字典中
4、在路由中使用转换器
from flask import Flask, render_template
# 第一步
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 第二步
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 正则参数
self.regex = args[0]
# 第三步
app.url_map.converters['re'] = RegexConverter
# 第四步
@app.route("/user/<re('lcz.{2}'):username>")
def user_info(username):
return "hello %s" % username
@app.route('/')
def hello_world():
return render_template("index.html")
if __name__ == '__main__':
app.run()
)
系统自带的转换器
DEFAULT_CONVERTERS = {
‘default’: UnicodeConverter,
‘path’: PathConverter,
‘string’: UnicodeConverter,
‘any’: AnyConverter,
‘int’: IntegerConverter,
‘float’: FloatConverter,
‘uuid’: UUIDConverter,
}
其实很多都是参数路由的
4.限定请求方式
加上一个methods参数限定请求的方式,注意methods应该是一个list
from flask import request
@app.route("/user", methods=["get", "post"])
def user():
if request.method == "get":
return "user"
elif request.method == "post":
pass
else:
pass
注意request是需要从falsk中导入
三、响应规则
1.html
1.1 html文本
@app.route("/user")
def user():
return "<h1>User Info</h1>"
1.2 html文件
from flask import render_template
@app.route('/')
def hello_world():
return render_template("index.html")
2.json
from flask import jsonify
@app.route("/user")
def user():
data = {
"user_name": "lczmx",
"age": "18"
}
return jsonify(data)
3.重定向
from flask import redirect
@app.route("/index")
def index():
return redirect("/")
4.视图跳转
from flask import redirect
from flask import url_for
@app.route("/user/<int:user_id>")
def user(user_id):
if user_id > 200:
return redirect(url_for("vip_user", user_id=user_id))
else:
return redirect(url_for("general_user"))
@app.route("/vip_user/<int:user_id>")
def vip_user(user_id):
return "vip_user %s" % user_id
@app.route("/general_user")
def general_user():
return "general_user"
5.状态码
@app.route('/')
def index():
return render_template("index.html"), 200
200就是状态码,可以是其他的
四、模板引擎
注:Flask的模板引擎是jinja2, 与django的很相似
1.变量
使用: {
{ 变量名 }}
app.py中传参
@app.route('/')
def index():
return render_template("index.html", name="嘻嘻嘻")
2 注释
使用: {# 多行注释 #}
3 过滤器
使用: { { var|filter }}
3.1 常用的过滤器
设置默认值: {
{ data.bool|default(‘我是默认值’,boolean=True) }}
禁用转义:{
{ '<em>hello</em>'
| safe }}
删除标签:{
{ '<em>hello</em>'
| striptags }}
首字母大写:{
{ ‘hello’ | capitalize }}
所有值小写:{
{ ‘HELLO’ | lower }}
首字母大写:{
{ ‘hello world’ | title }}
字符串反转:{
{ ‘hello’ | reverse }}
字符串截断:{
{ ‘hello world’ | truncate(5) }}
拼接成字符串: {
{ [1,2,3,4] | join(‘’) }}
字符的格式化: {
{ '我叫%s '|format(‘lczmx’) }}
获取长度:{
{ [1,2,3,4,5,6] | length }}
列表求和:{
{ [1,2,3,4,5,6] | sum }}
列表排序:>{
{ [6,2,3,1,5,4] | sort }}
3.2 自定义过滤器
方法1: 通过Flask对象(app)的add_template_filter方法
def add_suffix(line):
return line + "--嘻嘻嘻"
# 可以给过滤器器一个名字,如果没有,默认就是函数的名字
app.add_template_filter(add_suffix,'add_suffix')
方法2: 使用装饰器来实现
# 使用装饰器事项过滤器,
# 如果不传入参数,默认过滤器名字就是函数的名字
@app.template_filter()
def add_suffix(line):
return line + "