Python-Flask 快学

在这里插入图片描述

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 + "--嘻嘻嘻"
  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值