在上一篇文章:Flask:项目的准备工作中,我写了flask项目的准备工作,不清楚创建flask项目需要做哪些准备的朋友可以点击链接看看

1、最简单的Flask项目

代码:

from flask import Flask

# 创建一个应用
app = Flask(__name__) @app.route("/")
def index():
return "hello flask" if __name__ == '__main__':
app.run(host="127.0.0.1", port=5000, debug=True)

  在pycharm中直接运行就可以让项目跑起来了,在浏览器输入127.0.0.1:5000查看结果:

2、代码解析

(1)第一部分

from flask import Flask

  导包代码就不用多做解释了吧,这一句代码的作用就是从flask框架中导入一个名为Flask的类

(2)第二部分

# 创建一个应用
app = Flask(__name__)

  这里就是实例化一个名为app的Flask对象,并将变量__name__作为参数传入到对象里面,对变量__name__有疑问的朋友可以看下这篇博客:python:__name__的使用

(3)第三部分

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

  上面的@app.route("/")是一个装饰器,下面的index()是一个视图函数,在pycharm按住ctrl键点击route查看源代码:

def route(self, rule, **options):
def decorator(f):
endpoint = options.pop("endpoint", None)
self.add_url_rule(rule, endpoint, f, **options)
return f return decorator

  使用这个装饰器将把"/"传给rule参数,将函数index()传给装饰器内嵌函数的f参数;最后,很明显,这里没有给**options传参,因此options(数据类型为字典)为空

  内嵌函数的第一句:endpoint = options.pop("endpoint", None),使用pop方法从字典中将key为"endpoint"的value取出来给endpoint变量,若这个key不存在则将None传给变量endpoint;很明显,这里的options为空,因此endpoint的值为None

  内嵌函数的第二句:self.add_url_rule(rule, endpoint, f, **options),将变量rule("/")、endpoint(None)、f(视图函数index)、**options(为空)作为参数传给add_url_rule方法

  限于篇幅,这里就不继续深究add_url_rule()方法的作用了,有兴趣的朋友可以通过pycharm去查看它的源代码

(4)第四部分

if __name__ == '__main__':
app.run(host="127.0.0.1", port=5000, debug=True)

  这里执行app的run()方法,并传入几个参数,查看下run()的源代码(这里不展示完整源代码,只提取部分先进行分析):

def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):
if debug is not None:
self.debug = bool(debug) _host = "127.0.0.1"
_port = 5000
host = host or sn_host or _host
port = int(next((p for p in (port, sn_port) if p is not None), _port))

  这段代码还是比较容易理解的,先是将self.debug属性设置为run方法传进来的debug参数的值,然后在对host和port进行赋值。可以看出,默认情况下,host的值为127.0.0.1,port的值为5000

  注意:上面这段代码并非run()方法全部的源代码,源代码比较长,这里不过多展示,有兴趣的朋友可以自己去看,查看源代码对学习者的python功底有一定要求

最新文章

  1. 初探物联网 - 基于Arduino的气象站和View and Data API的结合实例
  2. org.artofsolving.jodconverter.office.OfficeException: failed to start and connect
  3. css学习中的一些英文单词
  4. XmlReader读取XML
  5. 每日英语:A New Way to Learn Chinese
  6. noip2007 树网的核
  7. WCF note1
  8. JAXL发送房间消息
  9. Shell/Bash 变量/variable 循环/loop
  10. Park Visit
  11. Hadoop上结合opencv\javacv
  12. Jmeter-元件的作用域和执行顺序
  13. 运行java web项目时报错:Several ports (8005, 8080, 8009) required
  14. 【noip模拟】2048
  15. 软件工程团队:Spring计划会议及详细计划表
  16. react-native上手篇
  17. Solved: RDP Disconnected – Error Code 2825 mremote
  18. Mysql读写分离方案-MySQL Proxy环境部署记录
  19. [vue]webpack中使用组件
  20. [Mysql 查询语句]——对查询结果进一步的操作

热门文章

  1. H5刮刮卡效果
  2. http转换为https
  3. [Python] Python 学习记录(2)
  4. 快学Scala 第十课 (包和包对象)
  5. win7环境搭建以太坊私链
  6. spring-boot-plus XSS跨站脚本攻击处理
  7. [插件化开发] 1. 初识OSGI
  8. rest_framework视图
  9. ef core实现软删除
  10. 原生js动态创建、获取、删除属性的几种方式