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

在这里插入图片描述

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

  • 导入 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/<username>')
def show_user(username):
	print(username)
    return 'User'

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

# 不仅包含第一个示例的作用,还可以有如下用法:
# 访问: localhost:/path/subpath1/subpath2 
# 打印结果 : subpath1/subpath2
@app.route('/path/<path:subpath>')
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 状态码。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

指定 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
  • 等等
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值