美文网首页
flask长期更新。。。

flask长期更新。。。

作者: Ellis | 来源:发表于2018-01-15 21:01 被阅读0次

最近公司用flask,就一边用一边学,看到有什么有意思的就记录一下

2018年01月15日20:55:36
今天还好,下午把功能简单提交了之后就没什么棘手的事了,所以有空看看flask的文档

  1. 关于flask的请求,有这么几个参数,其实和Django也差不多
from flask import request
request.method    # 请求方法
request.form.get('name') # 获取表单属性
request.args.get('name')    # 获取参数
request.file['the_file']    # 获取文件对象,前端要设置这个属性才行,enctype="multipart/form-data"

还有request.path   # 获取请求的路径
  1. cookie
    可以从request中读取,
request.cookie.get('name')

如果要设置cookie,可以通过make_response 来操作

from flask import make_response

@app.route('/')
def index():
    resp = make_response(render_template(...))
    resp.set_cookie('username', 'the username')
    return resp

make_response可以帮你修改返回对象,你只需要把返回对像给他就行了

@app.errorhandler(404)
def not_found(error):
    resp = make_response(render_template('error.html'), 404)
    resp.headers['X-Something'] = 'A value'
    return resp
  1. 看到一个有趣的东西,abort函数
    直接在试图函数中写:abort(404)
    就会返回404页面,你可以试试看不同的状态码分别是什么页面
    默认情况下,错误代码会显示一个黑白的错误页面。如果你要定制错误页面, 可以使用errorhandler装饰器:
from flask import render_template

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

注意这个404,如果不写,默认是200的

  1. 生成一个随机码
    又从文档中看到一个有趣的东西,os模块可以帮我们随机生成一个字符串
>>> import os
>>> os.urandom(22)
'\x0f[bU\xbfh\r\x13\xc8\xb5h\xb5?s\x95^@\xf9G\t\xac\x17'

5.会话
flask给我们提供了session,来保持会话,当然还有g对象,先来看一下session的使用:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form action="" method="post">
            <p><input type=text name=username>
            <p><input type=submit value=Login>
        </form>
    '''

@app.route('/logout')
def logout():
    # remove the username from the session if it's there
    session.pop('username', None)  # 这样就可以退出登录了
    return redirect(url_for('index'))

6.闪现
这个东西怎么说呢,大概意思就是说快速的返回给用户一些消息,用法是这样的:
视图函数:

from flask import Flask, flash, redirect, render_template,request, url_for,abort

app = Flask(__name__)
app.secret_key = 'some_secret'

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['user'] != 'admin' or \
                request.form['pwd'] != 'secret':
            error = 'Invalid credentials'
        else:
            flash('You were successfully logged in')
            return redirect(url_for('index'))
    return render_template('login.html', error=error)

if __name__ == "__main__":
    app.run()

注意前端代码要加上这个get_flashed_messages()才能在页面中打印出闪现的消息,看示例:
index页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>INDEX</h1>
    {% for message in get_flashed_messages() %}
        {{ message }}
    {% endfor %}
</body>
</html>

当登录时输入正确的用户名和密码,就会跳转到index页面,此时页面上会有一条消息,就是在代码中设置的闪现消息,当再次刷新,消息就会消失

  1. 反向生成url,url_for方法
    这个东西其实还挺好用的,前端页面和后端程序都能用
    看这两个例子
    视图函数中从flask中导入url_for
return redirect(url_for('index'))

前端页面中要用{{}}

<p>Do you want to <a href="{{ url_for('login') }}">log in?</a>

相关文章

网友评论

      本文标题:flask长期更新。。。

      本文链接:https://www.haomeiwen.com/subject/qkoegxtx.html