web技术培训(二)-Flask后端框架初识
web网站发展至今,特别是服务器端,涉及到的知识、内容,非常广泛。这对程序员的要求会越来越高。如果采用成熟,稳健的框架,那么一些基础的工作,比如,安全性,数据流控制等都可以让框架来处理,那么程序开发人员可以把精力放在具体的业务逻辑上面。
使用框架的优点:
·稳定性和可扩展性强
·可以降低开发难度,提高开发效率。
在 Python 中常用的 Web 框架有:
Flask 、Django、Tornado
Flask简介
Flask 是一个 Python 实现的 Web 开发微框架。你可以查看:
1、中文文档 2、英文文档
Flask 依赖两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集。
helloworld简单示例
首先在python中安装Flask框架。
pip install flask
然后
# 第一步 导入Flask类
from flask import Flask
# 第二步 Flask函数接收一个参数__name__,它会指向程序所在的包
app = Flask(__name__)
# 第三步 装饰器的作用是将路由映射到视图函数 demo ,并返回 helloworld
@app.route('/')
def demo():
return "helloworld!!"
# 第四步 Flask应用程序实例的 run 方法 启动 WEB 服务器
if __name__ == '__main__':
app.run()
相关配置参数
1、初始化参数
Flask 程序实例在创建的时候,需要默认传入当前 Flask 程序所指定的包(模块),接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数:
app = Flask(__name__, # Flask程序所在的包(模块),传 __name__ 就可以 ;其可以决定 Flask 在访问静态文件时查找的路径
static_path='static', # 静态文件访问路径(不推荐使用,使用 static_url_path 代替)
static_url_path='static', # 静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder='static', # 静态文件存储的文件夹,可以不传,默认为 static
template_folder='templates' # 模板文件存储的文件夹,可以不传,默认为 templates
)
2、程序加载配置
在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:
# 第一种 从对象中加载配置
class Config(object):
DEBUG = True
app.config.from_object(Config)
# 第二种 从文件中加载配置
app.config.from_pyfile('config.ini')
# 第三种 从环境变量中加载配置
app.config.from_envvar('ENVCONFIG')
3、app.run的参数
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
Flask中的路由
1、指定路由地址
# 指定访问路径为 demo1
@app.route('/demo1')
def demo1():
return 'demo1'
2、给路由传参示例:有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %s' % user_id
路由传递的参数默认当做 string 处理,也可以指定参数的类型
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %d' % user_id
这里指定int,尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数
3、指定请求方式
@app.route('/demo2', methods=['GET', 'POST'])
def demo2():
# 直接从请求中取到请求方式并返回
return request.method
视图常用逻辑
1、返回json
在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify生成一个 JSON 的响应
# 返回JSON
@app.route('/demo4')
def demo4():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
注:不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json
2、重定向
重定向到百度网址:
# 重定向
@app.route('/demo5')
def demo5():
return redirect('http://www.baidu.com')
重定向也可以使用url_for生成指定视图函数所对应的url
@app.route('/demo1')
def demo1():
return 'demo1'
# 重定向
@app.route('/demo5')
def demo5():
return redirect(url_for('demo1'))
重定向可以到带参数的视图函数, 在url_for 函数中传入参数
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %d' % user_id
# 重定向
@app.route('/demo5')
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for('user_info', user_id=100))
3、自定义状态码
在 Flask 中,可以很方便的返回自定义状态码,以实现不符合 http 协议的状态码,例如:status code: 666
@app.route('/demo6')
def demo6():
return '状态码为 666', 666
......未完待续......
最新文章
- matlab环境配置
- windows上面捕获声卡数据
- [转]CIDR简介
- 7.5---两个正方形分成对半的直线(CC150)
- VMware 锐捷 NAT模式的服务自动关闭的解决办法
- Linux 服务器的网络配置 - 1. 查看 Linux 服务器的网络连接
- NGUI之渲染DrawCall的合并
- mac java目录
- 如何从硬盘安装fedora 19 (How to install fedora 19 from hard drive, Fedora-19-i386-DVD.iso)
- sql 2000 ";无法执行查询,因为一些文件缺少或未注册";的
- android NDK编译(导入).a文件和编译多个so文件(转)
- Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述
- 【iOS】swift init构造器
- 41.Odoo产品分析 (四) – 工具板块(10) – 问卷(1)
- elementUI vue 页面加载的时候页面出现了黑字 页面优化处理 按钮弹出框文字
- android studio 中如何合并冲突(转)
- 睡前小dp-hdu3853-概率dp
- 浅析alsa声卡驱动snd_interval结构体openmin,openmax和integer含义
- UNICODE_STRING(用户模式 内核模式)
- 关于-RegExp
热门文章
- IntelliJ-IDEA 打包代码报错
- 全真教程:Windows环境Jupyter Notebook安装、运行和工作文件夹配置
- 【python+selenium的web自动化】- 针对上传操作的实现方案
- 冒泡排序算法的实现(Java)
- 翻译:《实用的Python编程》06_02_Customizing_iteration
- 干掉前端!3分钟纯 Java 注解搭个管理系统
- Maven项目中resources配置总结
- react项目运行安装依赖报错:Error: pngquant failed to build, make sure that libpng-dev is installed
- [Fundamental of Power Electronics]-PART II-9. 控制器设计-9.3 关键项1/(1+T)和T/(1+T)以及闭环传递函数的构建
- 构建之法与CI/CD