flask基本原理和知识

from falsk import Falsk
app = flask(__name__)

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

app.run()
app初始化简介
class Flask(_PackageBoundObject):
    def __init__(self, import_name,  # 指定应用的名字和工程目录,默认为__name__
                static_path=None,  #  是静态文件存放的路径,会赋值给static_url_path参数
                static_url_path=None,  # 设置静态文件路由的前缀,默认为“/static”
                static_folder='static', # 静态文件的存放目录, 默认值为"static"
                template_folder='templates', # 模板文件的存放目录,默认值为"templates"
                instance_path=None, # 设置配置文件的路径,在instance_relative_config=True情况下生效
                instance_relative_config=False # 设置为True表示配置文件相对于实例路径而不是根路径
                root_path=None)  #  应用程序的根路径

重定向

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fvqVAInw-1589297050338)(img/image-20200412162540976.png)]

flask把不带’/‘的url重定向到带’/'的url中,以兼容带不带斜杠(唯一url的原则)

就是说 带斜杠的兼容不带斜杠的

打开flask的调试模式

app.run(debug=True)

可以自动重启

路由注册的另外一种写法

如果是基于类的视图(即插视图),就要使用.add_url_rule()

import falsk from Falsk
app = flask(__name__)
# @app.route('/hello/')
def hello():
    return "hello"
app.add_url_rule('/hello/',view_func=hello)
app.run()

app.run相关参数和flask配置文件

app.run(host='ip地址',debug=True,port=端口)

服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。

ip地址使用0.0.0.0 方便服务访问方从外网访问,当然也可以在内网中访问,本机使用127.0.0.1进行访问

导入配置文件

app.config.from_object('模块的路径')
读取配置参数
app.config['DEBUG']

陷阱:app.config.from_object 要求配置文件参数全是大写
DEBUG flask默认值为False

配置参数

  • DEBUG:是否启用debug模式,默认False。
  • TESTING :启用/禁止测试模式
  • SECRET_KEY :密钥,在启用session等很重要
  • SESSION_COOKIE_NAME :设置保存的session在 cookie 的名称
  • SESSION_COOKIE_DOMAIN:设置会话的域,默认是当前的服务器,因为Session是一个全局的变量,可能应用在多个app中;设置这个参数必须设置SERVER_NAME,否则报错
    PERMANENT_SESSION_LIFETIME:session失效时间,作为一个 datetime.timedelta 对象,也可以用秒表示;
  • LOGGER_NAME:日志记录器的名称,默认__name__;
  • SERVER_NAME:服务器的名称以及端口,需要它为了支持子域名 (如: ‘myapp.dev:5000’)
  • MAX_CONTENT_LENGTH:设置一个请求所允许的最大的上传数据量,单位字节;
  • SEND_FILE_MAX_AGE_DEFAULT: 设置调用send_file发送文件的缓存时间;
  • TRAP_HTTP_EXCEPTIONS:如果这个值被设置为 True , Flask 不会执行 HTTP 异常的错误处理, 而是像对待其它异常一样,通过异常栈让它冒泡;
  • PREFERRED_URL_SCHEME:设置URL 模式用于 URL 生成。如果没有设置 URL 模式,默认将为 http 。
  • JSON_AS_ASCII:默认情况下 Flask 序列化对象成 ascii 编码的 JSON。 如果不对该配置项就行设置的话,Flask 将不会编码成 ASCII 保持字符串原样,并且返回 unicode 字符串。jsonfiy 会自动按照 utf-8 进行编码并且传输。
  • JSON_SORT_KEYS:默认情况下 Flask 将会依键值顺序的方式序列化 JSON。 这样做是为了确保字典哈希种子的独立性,返回值将会一致不会造成 额外的 HTTP 缓存。通过改变这个变量可以重载默认行为。 这是不推荐也许会带来缓存消耗的性能问题。
  • JSONIFY_PRETTYPRINT_REGULAR:如果设置成 True (默认下),jsonify 响应对象将会完美地打印。

if __name__ == '__main__':
开发环境中使用uginx+uwsgi,不会启用flask内置的服务器

response对象

  • status code
  • content-type 放在http的header中,默认为text/html

视图函数返回的都是response对象
flask 创建response对象使用make_response()

@app.route('/hello/')
def hello():
	headers ={
        'content-type': 'text/plain' # 'application/json' json格式
        'locatin': '重定向到另外一个url'
    }
    response = make_response('<html></html>',404)
    response.headers = headers
    return response

需要注意的是:'location':'url'中的url

  • 如果是https://www.baidu.com则会跳到百度官网,
  • 如果是www.baidu.com则不会跳转到百度,被重定向到是localhost/hello/www.baidu.com这个url

也可以使用 return '<html></html>', 404, header|
flask会自动把这个元祖转化成response对象

from flask import Flask, make_response

app = Flask(__name__)
# 实例化
# app.config.from_object('config')
# 引入配置文件

# 视图函数
@app.route('/')
def login():
    headers = {
        'content-type': 'application/json',
        'location': '/hello/2'
    }
    return "hello this is login '/' ", 301, headers


@app.route('/hello/')
# 重定向 状态码是301
def hello():
    headers = {
        'content-type': 'application/json',
        'location': 'https://www.baidu.com'
    }
    response = make_response('<html></html>', 301)
    response.headers = headers
    return response
    #  也可不返回对象 return '<html><\html>', 301, headers
    # status code 200:正常 404:not found 301:重定向
    # content-type http headers 默认值 text/html

# app.add_url_rule('/hello', view_func=hello)   app.route修饰器封装


if __name__ == '__main__':
    # if判断语句 确保此文件只作为入口文件执行该语句
    # 如果 生产环境布置项目 使用 nginx(前置服务器接受请求) + uwsgi(加载该模块文件 此文件就不是入口文件) 生产环境中就不会执行app.run
    app.run(host='0.0.0.0', debug=True, port=8001)
    # flask内置web服务器 服务器接受请求) + uwsgi(加载该模块文件 此文件就不是入口文件) 生产环境中就不会执行app.run
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值