您的位置:首页 > 移动开发

flask框架-初步了解-app对象的初始化和路由设置

2019-04-01 23:43 666 查看

什么是web框架?

能够被服务器调用起来,根据客户端的不同请求执行不同的逻辑处理形成要返回的数据的 程序

核心:实现路由和视图(业务逻辑处理)

 

为什么要用web框架?

  • 稳定性和可扩展性强
  • 可以降低开发难度,提高开发效率。

例如:在某个区需要成立一家医院,web框架相当于把“圈地,打地基,盖楼,装修,入驻”这些事情都干了,我们只需要挂号,看病即使用医院即使用web框架

flask框架使用过程

  • 所有Flask程序都必须创建一个程序实例。
  • 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。
  • 此时,Web服务器使用一种名为WEB服务器网关接口的WSGI(Web Server Gateway Interface)协议,把来自客户端的请求都交给Flask程序实例。
  • Flask使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。
  • 在Flask程序中,路由一般是通过程序实例的装饰器实现。通过调用视图函数,获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后由Flask返回响应数据给浏览器,最后浏览器显示返回的结果。

flask的第一个程序hello world

[code]# 我是用的是flask==0.10.1,对python3不太友好
# coding:utf-8

# 导入Flask类
from flask import Flask

#Flask类接收一个参数__name__
app = Flask(__name__) # 创建一个app对象,__name__表示当前模块名,只要模块不是被导入的,默认都是__main__

# 装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
return 'Hello World'

# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
app.run()

flask程序加载和读取配置

在 Flask 程序运行的时候,可以给 Flask 设置相关配置,比如:配置 Debug 模式,配置数据库连接地址等等,设置 Flask 配置有以下三种方式:

1.配置加载文件

[code]app.config.from_pyfile("config.cfg")

2.使用对象配置参数

[code]class Config(object):
DEBUG = True

app.config.from.object(Config)

3.直接操作config的字典对象

[code]app.config['DEBUG'] = True

4.在app.run()里加入配置条件

[code]app.run('DEBUG'=True)

读取配置目前只会两种方式:

 1.直接从全局对象app的config字典中取值
   print (app.config.get("WEISHAO"))
  2.从current_app读取,它是个全局代理人

current_app.get('DEBUG')

app.run()的参数

  • 可以指定运行的主机IP地址,端口,是否开启调试模式

app.run(host='0.0.0.0',port=5000,DEBUG=True)

host='0.0.0.0'意思是任何ip都可以访问

flask路由

明确路由定义的参数,请求方式指定

app.url_map 查看所有路由

[code] print(app.url_map)

同一路由装饰多个视图函数

[code]@app.count("/",method=['POST'])
def index()
return "index"

@app.count("/",method=['GET'])
def index2()
return "index2"

同一视图多个路由装饰器

[code]@app.route("/")
@app.route("/index")
def index():
return "index"

利用methods限制访问方式

@app.route('/sample', methods=['GET', 'POST'])

使用url_for进行反解析

[code]@app.route("/haha")
def haha():
url = url_for("index2")# 反向解析获取index2视图函数
return redirect(url)

动态路由

[code]# 转换器int:good_id
# 127.0.0.1:5000/goods/123
# @app.route("/goods/<int:goods_id>")# goods_id指向了从浏览器获取的/goods/后面的参数
@app.route("/goods/<int:goods_id>")# 不加转换器类型,默认是字符串规则,除了/以外
def goods(goods_id):
print(app.url_map)
return "goods info %s"%goods_id

自定义转换器

[code]# 定义万能转换器
class AllConverter(BaseConverter):
'''必须继承BaseConverter'''
def __init__(self, url_map, regex):
# 调用父类的init方法
super(AllConverter, self).__init__(url_map)
self.regex = regex

# 将万能转换器添加到flask应用中
app.url_map.converters["all"] = AllConverter

@app.route("/all_show/<all(r'\d{+}'):num>")
def all_show(num):
return "这是一个万能转换器的展示,%d"%num

我这个自定义转换器错了,求各位兄弟教导

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: