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

......未完待续......

最新文章

  1. matlab环境配置
  2. windows上面捕获声卡数据
  3. [转]CIDR简介
  4. 7.5---两个正方形分成对半的直线(CC150)
  5. VMware 锐捷 NAT模式的服务自动关闭的解决办法
  6. Linux 服务器的网络配置 - 1. 查看 Linux 服务器的网络连接
  7. NGUI之渲染DrawCall的合并
  8. mac java目录
  9. 如何从硬盘安装fedora 19 (How to install fedora 19 from hard drive, Fedora-19-i386-DVD.iso)
  10. sql 2000 "无法执行查询,因为一些文件缺少或未注册"的
  11. android NDK编译(导入).a文件和编译多个so文件(转)
  12. Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述
  13. 【iOS】swift init构造器
  14. 41.Odoo产品分析 (四) – 工具板块(10) – 问卷(1)
  15. elementUI vue 页面加载的时候页面出现了黑字 页面优化处理 按钮弹出框文字
  16. android studio 中如何合并冲突(转)
  17. 睡前小dp-hdu3853-概率dp
  18. 浅析alsa声卡驱动snd_interval结构体openmin,openmax和integer含义
  19. UNICODE_STRING(用户模式 内核模式)
  20. 关于-RegExp

热门文章

  1. IntelliJ-IDEA 打包代码报错
  2. 全真教程:Windows环境Jupyter Notebook安装、运行和工作文件夹配置
  3. 【python+selenium的web自动化】- 针对上传操作的实现方案
  4. 冒泡排序算法的实现(Java)
  5. 翻译:《实用的Python编程》06_02_Customizing_iteration
  6. 干掉前端!3分钟纯 Java 注解搭个管理系统
  7. Maven项目中resources配置总结
  8. react项目运行安装依赖报错:Error: pngquant failed to build, make sure that libpng-dev is installed
  9. [Fundamental of Power Electronics]-PART II-9. 控制器设计-9.3 关键项1/(1+T)和T/(1+T)以及闭环传递函数的构建
  10. 构建之法与CI/CD