鱼C论坛

 找回密码
 立即注册
查看: 1194|回复: 3

[技术交流] Flask学习笔记1:程序的基本结构

[复制链接]
发表于 2020-3-9 18:11:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qiuyouzhi 于 2020-3-9 18:12 编辑

Flask学习笔记1:程序的基本结构


初始化

所有的Flask应用程序都必须创建一个实例。服务器会使用

一种Web服务器网关接口(WSGI)来处理用户发出的数据,

并且把接收自客户端的所有请求都转交给这个对象处理。

通常这么写:
from flask import Flask
app = Flask(__name__) # __name__是用来标注程序的根目录和程序包的名字

路由和视图函数

客户端将请求发给服务器,服务器将请求转交给我们的程序,

而我们的程序又需要知道对每个请求运行哪些代码,所以

保存了一个URL到Python的映射关系

处理他们的关系就叫路由

在Flask中,定义路由的最简单的方式就是用

Flask给我们的修饰器@app.route修饰器,

把修饰的函数修饰为路由。

看代码例子:
@app.route('/') # 这是根地址,鱼C的fishc.com.cn就是根地址
def index():
    return '<h1>Hello world!<h1>' # 这是函数的返回值

假设我们的域名叫做https://check.com,那么访问这个网址就会调用index函数,

这种函数就叫做视图函数(view funtion)

它的返回值多种多样,既可以是一个字符串,也可以是一个复杂的表单。

如果你平常认真观察各种域名,会发现它们总会有一个可变的地方,

而我们的Flask支持这样做,只是写法比较特殊:
@app.route('/user/<name>') # 可变地址,尖括号中的东西就是动态部分
def user(name): # Flask会将动态部分传入参数
    return "<h1> HELLO %s, THIS IS MY FIRST WEBSITE!</h1>"

我们还可以这么写:
@app.route('/user/<int:shu>')
def math(shu):
    return "<h1>5 * %d == %d ! </h1>" % (shu, 5 * shu)


启动服务器

Flask应用程序使用run方法启动Flask集成的Web服务器。

代码:
if __name__ == '__main__': # 这里确保不会被其他引用这个程序的程序调用它
    app.run(debug=True) # 开启调试模式

服务器启动后,会进入轮询,等待并处理请求,直到终止(Ctrl+C)。

这时,我们访问这个网址只需要输入:
http://127.0.0.1:5000

就可以顺利访问了!(在Python版本大于3.5是无法运行的,看后面的注意事项)

完整的程序!
from flask import Flask
app = Flask(__name__) # __name__是用来标注程序的根目录

@app.route('/') # 这是根地址,鱼C的fishc.com.cn就是根地址
def index():
    return '<h1>Hello world!<h1>' # 这是函数的返回值

if __name__ == '__main__':
    app.run(debug=True) # 开启调试模式

注意事项:

如果你的Python版本大于3.5是无法运行的:
Traceback (most recent call last):
  File "D:\Flask学习\test\main.py", line 17, in <module>
    app.run(debug=True) # 开启调试模式
  File "C:\Users\####\AppData\Local\Programs\Python\Python38\lib\site-packages\flask\app.py", line 985, in run
    cli.show_server_banner(self.env, self.debug, self.name, False)
  File "C:\Users\####\AppData\Local\Programs\Python\Python38\lib\site-packages\flask\cli.py", line 670, in show_server_banner
    click.echo(message)
  File "C:\Users\####\AppData\Local\Programs\Python\Python38\lib\site-packages\click\utils.py", line 218, in echo
    file = _default_text_stdout()
  File "C:\Users\####\AppData\Local\Programs\Python\Python38\lib\site-packages\click\_compat.py", line 675, in func
    rv = wrapper_func()
  File "C:\Users\####\AppData\Local\Programs\Python\Python38\lib\site-packages\click\_compat.py", line 436, in get_text_stdout
    rv = _get_windows_console_stream(sys.stdout, encoding, errors)
  File "C:\Users\####\AppData\Local\Programs\Python\Python38\lib\site-packages\click\_winconsole.py", line 295, in _get_windows_console_stream
    func = _stream_factories.get(f.fileno())
io.UnsupportedOperation: fileno

这时,我们只需要用命令行运行:
python main.py

就可以顺利运行了!

如果有纰漏,请在评论区指出!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-9 18:40:12 | 显示全部楼层
https://www.jb51.net/article/85863.htm
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-9 18:41:54 | 显示全部楼层
一个账号 发表于 2020-3-9 18:40
https://www.jb51.net/article/85863.htm

好像
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-1 23:13:29 | 显示全部楼层
谢谢 学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 19:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表