Flask 基础原理

那是一种骨子里沁出来的孤独,满世界想要找个跟他同病相怜的人,找到了就跟他做好兄弟。

路由

路由的写法有两种:

@app.route('/login/')
def login_():
    pass

另一种:

def login_():
    pass
app.add_url_rule('/login/',view_func=login_)

启动方法

app.run(host='0.0.0.0',port=999,debug=True)

host指定任意地址都可以访问本地服务,port指定端口,debug开启调试模式(每次修改完代码会自动重启flask)

配置文件

比如设定端口,调试模式等等,不推荐直接修改源代码,此处应当使用自定义的配置文件。

在目录下新建一个config.py文件:

DEBUG = True
# 默认配置文件为一个常量,并且必须是大写

然后在主程序中导入一下即可

from config import DEBUG

就是python中的调用包引用。

这里推荐使用另一种方法导入配置文件:

app.config.from_object('config')
# 加载配置文件
# 该函数接受的参数是配置文件包的路径
# 因为config.py文件与主程序文件在同一目录,直接写config即可
# 最后读取配置文件在最后的app.run()中读取
app.run(host='0.0.0.0',debug=app.config['DEBUG'],port=880)
# 注意大小写,使用该方法加载配置文件,传入的参数DEBUG必须是大写

视图函数

@app.route('/login')
def login_():
    return 'hello langzi'

如上就是一个视图函数,Flask会对视图函数中return返回的字符串进行封装。Flask会对封装内容返回如下内容:

status_code:状态码
content-type:文件类型,告知客户端浏览器接受的内容是什么,默认值是text/html
content-length:文件长度
等等....

视图函数中返回的是Response对象

Response 对象理解

from flask import make_response
@app.route('/login')
def login_():
    headers = {
    'content-type':'text/plain'
    }
    # 文件类型是普通文本
    response = make_response('666',200)
    # 200是状态码,你写成666也可以
    response.headers = headers
    return 'hello langzi'

之所以这么写,是为了以后为小程序,或者手机app提供数据接口(Api),比较方便,当然不要忘了Api是json格式的:

headers = {
'content-type':'application/json'
}

Flask返回的都是字符串,不管是返回文本,字符串,还是json。其实主要核心控制都是在你的headers头部信息中设置的。关于headers的拓展应用大家多多了解,这里记一下重定向的使用:

headers = {
'location':'http://www.langzi.fun'
}

Response 简介用法

from flask import make_response
@app.route('/login')
def login_():
    headers = {
    'content-type':'text/plain'
    }
    return 'hello langzi',200,headers
    # 返回对象类型其实是一个元祖

这种返回形式是最方便的~

一个小知识点

为什么要在主程序中加上:

if '__name__' == '__main__'

因为在Flask的开发环境中,使用的服务器是Flask自带的简单服务器,如果要部署要生产环境中,使用的nginx+uwsgi,其中nginx作为前置服务器,用来接受浏览器的请求,然后会把请求发送给uwsgi,生产环境总,启动项目其实就是uwsgi加载flask的项目服务。所以主程序其实就是一个加载的包,如果不加上if的话,就会启动两个服务器……

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

LangZi_Blog's by Jy Xie is licensed under a Creative Commons BY-NC-ND 4.0 International License
由浪子LangZi创作并维护的Langzi_Blog's博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Langzi_Blog's 博客( http://langzi.fun ),版权所有,侵权必究。

0%