python flask学习与使用

搭建一个基本flask进程

  • 安装虚拟环境
python -m venv venv

在这里插入图片描述
然后运行activate,进入虚拟环境;

  • 在虚拟环境里安装flask
(venv) pip install flask
  • 编写基本的helloworld程序
# main.py
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return "hello world!"
  • 设置FLASK_APP环境变量(windows)并运行
(venv) set FLASK_APP=main.py
python -m flask run # 或flask run

之后访问 localhost:5000,就可以看到返回的内容。

基本操作

将方法绑定到URL

  • 直接绑定
@app.route('/test')
def func():
	return 1
  • 带参数
@app.route('/test/<variable>')
def func():
	return variable

处理表单数据

首先引入请求对象(见概念一节)

  • 操作URL参数,使用args属性
request.args.get('key')
  • 操作form-data,使用form属性
request.form['username']

重定向与错误

使用redirect来重定向请求

from flask import abort, redirect, url_for

@app.route('/')
def index():
    return redirect(url_for('login'))

@app.route('/login')
def login():
    abort(401)
    this_is_never_executed()

使用errorhandler()装饰器来修饰错误页面

from flask import render_template

@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

操作响应(response)

视图函数的返回值会根据一定规则自动转换为一个响应对象。
例子:not_found返回的html页面(字符串)会生成一个404状态码的响应对象。

@app.errorhandler(404)
def not_found(error):
    return render_template('error.html'), 404

若返回dict,会自动转换为JSON响应

@app.route("/me")
def me_api():
    user = get_current_user()
    return {
    
    
        "username": user.username,
        "theme": user.theme,
        "image": url_for("user_image", filename=user.image),
    }

session与cookies

from flask import Flask,request,session
app = Flask(__name__)
app.secret_key = b'sdafdddd\x]\x'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        

概念与问题

WSGI是什么

  • WSGI全称Python Web Server Gateway Interface,指定了web服务器和Python web应用或web框架之间的标准接口,以提高web应用在一系列web服务器间的移植性
  • WSGI的标准是,Web程序需要有能接受两个参数的可调用对象(函数),第一个参数是environ字典,第二个参数是可调用对象调用的函数,用来发起响应。
  • 通过environ可以获取http请求的所有信息,http响应的数据都可以通过start_response加上函数的返回值作为body。
def hello(environ, start_response):
    status = "200 OK"
    response_headers = [('Content-Type', 'text/html')]
    start_response(status, response_headers)
    path = environ['PATH_INFO'][1:] or 'hello'
    return [b'<h1> %s </h1>' % path.encode()]

如何handle请求

flask中用全局对象request来处理客户端的请求。

猜你喜欢

转载自blog.csdn.net/weixin_44602409/article/details/112596846