文档章节

Flask 消息提示与异常处理

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 01:22
字数 876
阅读 6
收藏 0
点赞 0
评论 0

1. 消息提示

flask 中提供了消息闪现机制,方便我们消息提示,所使用的模块是 flash 模块。在我们使用 flash 时,我们需要调用 app.secret_key 字段,该字段会对消息进行加密。具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask, render_template, flash

app = Flask(__name__)
app.secret_key = '123456'


@app.route('/')
def hello_world():
    flash('hello flash')
    return render_template("index.html")


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

之后,我们编写 index.html 页面。在该页面中,我们使用 get_flashed_messages() 函数来得到flash中的内容,但注意,这个返回的是一个数组,因为我们只有一条消息,所以我们只取第一个元素,具体代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
<h1>Hello</h1>

<h2>{{ get_flashed_messages()[0] }}</h2>
</body>
</html>

接下来,我们来模拟网页用户登录时的一些消息提示,如果你还不了解如何处理表单,可以查看这篇博客

首先,我们先查看一下我们文件的结构树,如下:

192:test ming$ tree
.
├── app.py
├── static
└── templates
    ├── index.html
    └── login.html

2 directories, 3 files

首先,我们来编写 login.html 文件,如下:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
    <div align="center">
    <h1>User Management</h1>
    {% if get_flashed_messages() %}
        {{ get_flashed_messages()[0] }}
    {% endif %}
    <form action="/check" method="post">
        Username: {{ form.username }} <br />
        Password: {{ form.password }} <br />
        <input type="submit" value="Submit" />
        <input type="reset" value="Reset" />
    </form>
    </div>
</body>
</html>

然后,我们来编写 app.py 文件,如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask, render_template, flash
from wtforms import Form, TextField, PasswordField, validators
from flask import request
from flask import url_for, redirect

app = Flask(__name__)
app.secret_key = '123456'

class LoginForm(Form):
    username = TextField("username", [validators.Required()])
    password = PasswordField("password", [validators.Required()])

@app.route('/')
def index():

    return render_template('index.html')

@app.route('/login')
def login():

    myForm = LoginForm(request.form)

    return render_template("login.html", form = myForm)

@app.route('/check', methods=["POST"])
def check():
    myForm = LoginForm(request.form)

    username = myForm.username.data
    password = myForm.password.data

    if not username:
        flash('please input username')
        return redirect(url_for('login'))
    if not password:
        flash('please input password')
        return redirect(url_for('login'))

    if username == 'admin' and password == 'admin':
        flash('login success')
        return redirect(url_for('index'))
    else:
        flash('username or password is wrong')
        return redirect(url_for('login'))


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

最后,为了查看效果,我们来编写一个简单的 index.html 文件,如下:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>
<body>
    {% if get_flashed_messages()[0] == 'login success' %}
        {{ get_flashed_messages()[0] }}
    {% endif %}
    <h1> 这是主页 </h1>
</body>
</html>

至此,你应该已经学会了一些基础的消息提示操作吧。

2. 异常处理

接下来,我们来学习 flask 中的异常处理。

当我们访问一个网站的时候,有时候我们会输入一个 URL 不存在的网站,这时候如果跳出来一个 404 的界面,那么用户体验是非常不好的。而这一节就是来处于 404 界面的问题。

那么,在 flask 中提供了一个这样的装饰器 errorhandler,专门来处理一些http错误。比如,我们在 app.py 文件中加入下列代码:

@app.errorhandler(404)
def not_found(e):
    return render_template('404.html')

之后运行这个程序,在浏览器中随便输入一个网站,可以得到如下界面:


这样,就能比较友好的处理 404 错误。

接下来,举一个比较实用的例子。比如,我们需要判断用户是否存在。在 app.py 代码中,我们可以加入如下代码:

@app.errorhandler(404)
def not_found(e):
    return render_template('404.html')


@app.route('/users/<user_id>')
def users(user_id):
    if int(user_id) == 1:
        return render_template('users.html', user = user_id)
    else:
        abort(404)

然后编写 users.html 页面,如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
User ID: {{ user}}
</body>
</html>

最后,你运行该程序之后,当你访问 http://localhost:5000/users/1 时,可以得到如下正确访问页面:


但是当你访问 http://localhost:5000/users/2 时,你将得到 404 页面,如下:


至此,我们学习完了异常处理。

本文转载自:http://www.jianshu.com/p/51511d53f695

共有 人打赏支持
AllenOR灵感
粉丝 10
博文 2634
码字总数 82983
作品 0
程序员
视频版|Flask 基础与 Web 开发实战

公开课主题:Flask 基础与 Web 开发实战 主要内容: 一、Web 开发基础 二、在 Flask 中的 “Hello World” 三、Flask 的模版 四、Flask 的消息提示与异常处理 主讲师:Nick 担任某上市公司运...

xjtuhit
2017/11/10
0
0
今晚九点|Flask 基础与 Web 开发实战

废话不多说,我们直接来介绍这次公开课的内容。 主要内容: 一、Web 开发基础 二、在 Flask 中的 “Hello World” 三、Flask 的模版 四、Flask 的消息提示与异常处理 一、Web 开发基础 本章节...

xjtuhit
2017/11/09
0
0
Flask Signals详解

Flask Signals简介 Flask Signals和操作系统的signals系统很类似,都是通过信号(也可以说是事件event)来通知已经注册的回调函数,让回调函数自动开始执行。Flask定义了自己的一套核心signa...

geekpy
2017/10/05
0
0
Flask入门 表单Flask-wtf form原生与Bootstrap渲染(七)

(1) 原生的表单 模板页面,form表单 在manage.py中 在manage.py中将路由函数合并 (2) Flask-wtf表单 说明 : 是一个用于表单处理,校验并提供csrf验证的功能的扩展库 安装 : 作用: Flask-wtf能保...

善良小郎君
06/02
0
0
wechat-admin:Flask使用篇

wechat-admin:Flask使用篇 小明明s à domicile2017-08-2025 阅读 Python 在 Flask最佳实践 里面有三项在本项目也有应用: 怎么用扩展 自定义RESTAPI的处理 local_settings.py 这我就不再复...

小明明s à domicile
2017/08/20
0
0
慕课网Flask高级编程实战-4.flask核心机制

4.1 flask中经典错误 working outside application context 在 3.8节我们通过的方式解决了working outside application context的错误,下面我们来深究,这个错误出现的具体原因是什么。 首先...

Meet相识_bfa5
06/04
0
0
Flask学习笔记-在Bootstrap框架下Web表单WTF的使用

表单的处理一般都比较繁琐和枯燥,如果想简单的使用表单就可以使用Flask-WTF插件,同时我们把WTF融合到Bootstrap中这样样式的问题都自动解决了,本篇文章就为您讲解这些内容。 先要注意一点,...

ykbj
2016/02/22
1K
0
最快的 Python Web 框架入门

摘要:sanic是一款用 python3.5+ 写的 web framework,用法和 flask 类似,特点是非常快 。Github 地址:https://github.com/channelcat/sanic 速度比较 安装 环境:python3.5+ python -m pi...

Prasanta
2017/12/14
0
0
(三)Flask 学习 —— web 表单

web 表单 回顾 在上一章节中,我们定义了一个简单的模板,使用占位符来虚拟了暂未实现的部分,比如用户以及文章等。 在本章我们将要讲述应用程序的特性之一–表单,我们将会详细讨论如何使用...

水果糖
2016/02/25
1K
0
falsk-web 表单

web 表单 回顾 在上一章节中,我们定义了一个简单的模板,使用占位符来虚拟了暂未实现的部分,比如用户以及文章等。 在本章我们将要讲述应用程序的特性之一–表单,我们将会详细讨论如何使用...

joker_bug
2017/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
10分钟前
0
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
11分钟前
0
0
vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
18分钟前
0
0
庆祝法国队夺冠:用Python放一场烟花秀

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。 这个有趣的小项目并不...

猫咪编程
20分钟前
0
0
SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
34分钟前
5
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
44分钟前
1
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
今天
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
40
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部