python Web开发 flask轻量级Web框架

2023-11-15

O、flask介绍
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

Web应用采用访问和响应的方式和用户进行交互。
主要由用户发起一个Web requetst 请求,对网页进行请求。
请求成功后由Web 服务器放回一个 response 对象对浏览器进行渲染,显示出返回的网页。
浏览器访问网页的默认是get方法
flask应用的默认Ip是本地IP 127.0.0.1 默认端口是5000

一、flask应用的基本构成

#coding=utf-8
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return "hello world"

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

app = Flask(name)
这是建立一个flask应用,并且设置flask应用的目录为该模块的目录。

@app.route(‘/’)
设置应用的路由,既访问的Web服务器的目录。

@app.route(‘/’)
def hello_world():
return “hello world”
设置路由函数,访问该路由时执行该函数。

app.run()
启动flask应用

运行程序,在浏览器中访问服务器地址即可得到返回的网页

二、flask路由和反向路由
1.参数的传递

在应用中添加一下代码,在访问WebUrl中添加参数可以把参数传递给Web后台程序。
注意:传进去的值是以字符串形式存在。

@app.route('/users/<id>')
def hello_users(id):
    return "users: " + id

这里写图片描述

2.@route路由的访问方法
路由默认的是get方法,也可以更改路由方法,例如


@app.route('/user', methods=['POST'])
def hello_user():
	return "hello user"

3.通过request 库来传递id
得添加requests库的导入

from flask import Flask,request 
@app.route('/query_user')
def query_user():
	id = request.args.get('id')
	return "query_user: id " + id

属性输入采用 url + ?属性名=属性值的格式
这里写图片描述

4.反向路由
通过视图函数反导出url地址

@app.route('/query_url')
def query_url():
	return 'query_url' + url_for('query_user')

这样就在query_url函数中访问到了 query_user的路由地址
这里写图片描述

二、flask模板
模板是为了使后台逻辑代码与网页前端代码分离。

先引入render_template模块
from flask import render_template
新建一个template文件夹,存放html文件。
1.模板的基本使用
例如demo.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{ content }}hello world this is first web</h1>
</body>
</html>
@app.route('/')
def hello_world():
    return render_template("demo.html", content="hello flask ")

这里写图片描述

2.传入类


class User:
    def __init__(self, user_id, user_name):
        self.user_id = user_id
        self.user_name = user_name
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>User id is {{ user.user_id }}</p>
<p>User name is {{ user.user_name }}</p>
</body>
</html>
@app.route('/user')
def hello_user():
    user = User(1, "hello user")
    return render_template("demo.html", user=user)

这里写图片描述

  1. 模板的 if 语法
    query_user.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if user %}
{{ user.user_name }}
{% else %}
<p> hello world</p>
{% endif %}
</body>
</html>

如果user不为空则输出 user.name 否则 输出hello world

@app.route('/query_user/<id>')
def query_user(id):
    user = None
    if id == '1':
        user = User(2, "zzm")
    return render_template("query_user.html", user = user)

这里写图片描述
这里写图片描述

4.模板循环

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for user in users %}
 {{ user.user_id }}----{{ user.user_name }}<br/>
{% endfor %}
</body>
</html>
@app.route('/list')
def user_list():
    users = []
    for i in range(1, 11):
        user = User(1, "zzm" + str(i))
        users.append(user)
    return render_template("user_list.html", users=users)

这里写图片描述

5.模板继承
以下代码省略HTML主体结构,只下body中的部分
先写一个base.html

<div>
    这是头部
</div>
{% block content %}
{% endblock %}
<div>
    这是尾部
</div>

然后在one_base.html中用extends 语法继承base.html页面,
然后再重写content中的内容

{% extends "base.html"%}
{% block content %}
    <h2>这是第一页</h2>
{% endblock %}
@app.route('/one')
def one_base():
    return render_template("one_base.html")

运行结果
这里写图片描述

三、消息提醒和异常处理
1.消息提醒
在网页中设置提醒的消息需要引入flash模块
from flask import flash
flash.html

 <form action="/login" method="post">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="submit" value="提交">
</form>
<h2>{{ get_flashed_messages()[0] }}</h2>
@app.route('/flashDemo')
def flash_demo():
    flash("hello world flash")
    return render_template("flash.html")

这里写图片描述

2.异常处理
在别人输错网址的时候,服务器会返回一个404异常,将会返回一个浏览器的404网页。
我们可以进行异常处理,抛出自己写的404网页,这样用户体验比较好。

写个404.html

<h1>this is error</h1>

异常处理语法:
errorhandler() 括号里面填写错误代码

@app.errorhandler(404)
def not_fond(e):
    return render_template("404.html")

这里随便输错一个网页,就弹出来了我们自己编写的404异常网页
这里写图片描述


欢迎关注公众号:全栈黑科技
一起交流学习。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python Web开发 flask轻量级Web框架 的相关文章

  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐