Python Flask学习知识点(一)

作者: kakarotto | 来源:发表于2018-09-06 16:09 被阅读21次
timg (5).jpg

在此记录Python Flask学习过程中的知识点,易忘记点,中间也会记录一些小的Python技巧及知识。
本文章根据慕课网七月老师的Python Flask高级编程课程,梳理课程中的知识点,供大家参考。

MVC模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

"C"在其他语言中叫控制器,在flask中叫做视图函数
基于类的视图,在flask中又名即插视图

简单的flask demo,新建文件demo.py

import json

from flask import Flask

app = Flask(__name__)
@app.route("/hello/")
def hello():
    return "hello"

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True, port=81)

运行demo.py , 在浏览器中键入地址127.0.0.1:81/hello,可看到结果输出hello
上图代码中,定义了一个视图函数hello,并且在app.run设置为调试模式(debug)。
细心的同学可发现在试图函数上方的路由注册中明明是前后都有反斜杠@app.route("/hello/"),可为什么在浏览器输入127.0.0.1:81/hello不加后边的反斜杠就可以呢,是因为flask实质是把不带斜杠的url重定向到带斜杠的url上。
为什么flask要这么做?
唯一url原理便于SEO(搜索引擎优化),这里不讲SEO是什么,给出链接可自己查询

什么是SEO (搜索引擎优化)

Flask配置文件

在开发环境中,在生产线上的代码是绝对不允许使用debug模式的,而上图中的代码把debug硬编码在代码中,这种方法极其不合适,正确的做法应该写在配置文件中,这样我们只需要更改配置文件即可,不用改动代码。
新建文件config.py

DEBUG = True

更改demo.py文件

import json
from flask import Flask
app = Flask(__name__)

# 把自定义的config.py配置文件合并到flask配置文件中
app.config.from_object("config")

@app.route("/hello/")
def hello():
    return "hello"

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=app.config['DEBUG'], port=81)

flask配置文件中的变量要求全部大写,例如DEBUG = True

Flask路由注册

在Flask中有两种路由注册的方法,

  1. @app.route("/hello/")

  2. app.add_url_rule("/hello/", view_func=hello)

第一种是最为便捷的,采用python语言的装饰器来做路由注册,直接给视图函数增加装饰器即可。
第二种也可以达到路由注册的目的,view_func参数指定视图函数。

其实两种方式本质上都是通过app.add_url_rule("/hello/", view_func=hello)这种方式实现的,只不过第一种方法在装饰器内部Flask自己调用了app.add_url_rule("/hello/", view_func=hello),可查看app.py源码:

image.png

if name == "main"在Flask的含义

相信大家都知道if __name__ == "__main__"
一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if name == 'main': 的作用就是控制这两种情况执行代码的过程,在if name == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。

在Flask中,一般生产环境使用 nginx+uwsgi 作为 flask 自带的web服务器,使用if __name__ == "__main__"判断,避免在生产环境中启动flask自带的web服务器。

视图函数的返回值

通常Flask视图函数返回的都是response对象,
使用Flask的make_response方法制造response对象,

from flask import Flask, make_response
@app.route("/hello/")
def hello():
    headers = {
        "content-type": "text/plain"
    }
    response = make_response("<html></html>", 200)
    response.headers = headers
    return response

但是,
通常不需要上边make_response,直接:

@app.route("/hello/")
def hello():
    headers = {
        "content-type": "text/plain"
    }
    return "<html></html>", 200, headers

上边代码表示返回三个值,分别是一个<html></html>字符转,200状态码,和header
在python中如果return 多个值 视为返回一个元组,Flask会默认调用make_response来转换,本质还是通过make_response。
这里我们设置的200状态码和返回的内容无关,只是一个标识

另外,
web (视图函数)返回的本质都是字符串,通过content-type来控制返回的字符串转换为需要值,例如:
"contentType":"application/json" (转换为json返回)
"contentType": "text/plain" (转换为文本返回)
"contentType": "text/html" (转换为html返回)

以上内容如果对大家有帮助记得点个赞哦。感谢

相关文章

  • Flask

    FLASK 标签(空格分隔): python flask web [TOC] 计划 [ ] python学习 [ ...

  • Flask 学习

    Flask是python的网络框架,我把每天学习的知识点分散的写在这里 Flask 代码的基本架构from fla...

  • 【44】Python学习笔记2

    涉及知识点:路由、视图函数、url_for 框架:flask 参考书:《Flask Web开发:基于Python的...

  • Python Flask学习知识点(一)

    在此记录Python Flask学习过程中的知识点,易忘记点,中间也会记录一些小的Python技巧及知识。本文章根...

  • 解决Flask错误“TypeError: 'bool' obje

    标签: Python Flask 【参考链接】python-flask 教程学习过程遇到难题TypeError: ...

  • 【Python学习笔记】——0002 不定期推荐python包

    ==【Python学习笔记】——0002 不定期推荐python包== [TOC] Flask Flask百度百科...

  • Python学习

    python-flask框架学习(二) 1、回顾Flask 2、Flask route路由 2.1、静态路由 ap...

  • Python学习

    python-flask框架学习(一) Flask是由python实现的一个web微框架,让我们可以使用Pytho...

  • python flask安装和命令

    Flask Web开发实战学习笔记 Flask简介 Flask是使用Python编写的Web微框架。Web框架可以...

  • Python Flask学习知识点(三)

    在上一节Python Flask学习知识点(二)文章中,把视图函数从入口启动文件中分离了出来,把视图函数放到了bo...

网友评论

    本文标题:Python Flask学习知识点(一)

    本文链接:https://www.haomeiwen.com/subject/cufxgftx.html