python web 开发 - flask 框架使用(一)

开篇

本文主要内容是对 flask 框架官方文档的 quickstart (flask 如何使用)部分内容(项目中需要用到的知识点)进行简单总结。

准备工作

  • python 基础
  • web 开发经验
  • 安装 python
  • 安装 flask => pip install flask
  • 一个 IDE => 个人推荐 vscode 或者 pycharm

正文

1. 编写一个 helloworld

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello, World!'
    
if __name__ == '__main__':
    app.run()

通过 IDE 运行,然后在浏览器上访问 localhost:5000

python web 开发 - flask 框架使用(一)_第1张图片

解释下上面的代码都做了什么

  • 导入 Flask 类
  • 实例化 Flask 类
  • 通过 route() 告诉 Flask 方法和 URL 的映射关系
  • 将 Hello,World 字符串显示在浏览器

2. 路由

通过上面的 helloworld 程序已经了解到,Flask 框架是 通过 route() 将 URL 动态的跟函数绑定在一起,下面补充一个规则 - 将参数变量放在路径中。

# zhangsan 和 123 为参数,参数类型不受限制
# 正确示例
# 1. localhost:5000/user/zhangsan
# 2. localhost:5000/user/123
# 错误示例,报错: 404
# 1. localhost:5000/user
# 2. localhost:5000/user/ 

@app.route('/user/')
def show_user(username):
	print(username)
    return 'User'

# 跟上面不同的地方是,这里限制了参数类型为 int
# 正确示例
# 1. localhost:5000/post/123
# 错误示例
# 1. localhost:5000/post/aaa
@app.route('/post/')
def show_post(post_id):
	print(post_id)
    return 'Post'

# 不仅包含第一个示例的作用,还可以有如下用法:
# 访问: localhost:/path/subpath1/subpath2 
# 打印结果 : subpath1/subpath2
@app.route('/path/')
def show_subpath(subpath):
    print(subpath)
    return 'Subpath'

3. URL 末尾有无反斜杠的区别

对比下面两个路径 /test1/ 和 /test2, 前者比后者末尾多了一个反斜杠。

@app.route('/test1/')
def test1():
    return 'test1'

@app.route('/test2')
def test2():
    return 'test2'

正常情况下:

访问 localhost:5000/test1/ 和 localhost:5000/test2 即可请求到资源。

但是,

当我们访问 localhost:5000/test1 时, 会重定向到 localhost:5000/test1/

当我们访问 localhost:/5000/test2/ 时,就会出现 404 not found。

4. HTTP 方法

访问 URL 时, web 应用会使用不同的 http 方法,比如 get ,post 等。默认只支持 GET 方法。
例如,当我们用 post 方法访问上面任意一个 url 时,会出现下面的 405 状态码。


405 Method Not Allowed

Method Not Allowed

The method is not allowed for the requested URL.

指定 method 方法

@app.route('/login', methods=['GET', 'POST'])
def login():
    pass

5. request 对象

有了 request 对象,我们就可以获取请求对象里面的参数,比如 form 表单提交的参数,url 后面的key - value参数,请求方法类型(get 或 post)等等。

from flask import request

@app.route('/login', methods=['POST', 'GET'])
def login():
    # 获取表单参数 
    username = request.form['username']
    password = request.form['password']
    # TODO 省略部分业务逻辑
    return 'login success'

# 例如: localhost:5000/search?key=value
@app.route('/search', methods=['POST', 'GET'])
def search():
    # 获取 url 参数
    searchword = request.args.get('key', '')
    # TODO 省略部分业务逻辑
    return 'search success'

6. 如何响应 json

  • 方式一 : 返回字典类型,会自动转换为 json
def user_api():
    return {
        "username": '章三',
        "age": '123',
    }
  • 方式二 : 依赖 jsonify
fron flask import jsonify

def user_api():
	data = [{'username': 'zhaSan', 'password': "123456"},
            {'username': 'wangWu', 'password': "123456"}]
    return jsonify(data)

总结

本文可能还有如下诸多内容未涉及,会在后面的博客中补充进去。

  • 上传文件
  • 访问静态资源
  • cookie
  • session
  • 等等

你可能感兴趣的:(flask,python,web)