flask入门学习笔记

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

1. 建立虚拟环境:

(1) 创建:$ py -3 -m venv venv(在项目目录中)

(2) 激活:$ venv\Scripts\activate

2. 一个简单的实例:

from flask import Flask

app = Flask(__name__) #创建一个Flask类的实例

#用route装饰器告诉Flask触发函数的url(url中有该东西就触发函数,要前置一个'/'。装饰器之间空两行
@app.route**(**'/'**)
def hello_world():   #待触发函数
	return 'Hello, World!'
复制代码

3. 设置FLASK_APP环境变量,搭建服务器:

(1) 设置环境变量:

$ set FLASK_APP=test.py

(2) 搭建服务器:

$ flask run,要先设置环境变量,后面加—host=0.0.0.0,这行代码告诉你的操作系统监听所有公开的 IP ,不懂(局域网?)。也可以在代码中直接运行,采用 flask run(host,port,debug,options),host默认为localhost,port默认5000,debug默认为False,options要转发到底层的Werkzeug服务器。

(3)debug模式:

​ 应用程序开发时,代码改变后要手动重启,而把debug模式打开后,代码改变后可自动重启以应用代码,打开方式:

1)$set FLASK_ENV=development,默认值为 ‘production’

2)$set FLASK_DEBUG=1

3)app.debug=True 或者 app.config[‘DEBUG’]=True

4)flask run(debug=True)

4. 路由:

(1) route装饰器与URL动态变化:

route装饰器把函数绑定到URL,URL中可包含变量, @app.route(‘/URL/<converter:valuable_name>’),下面跟着定义的函数,如

@app.route('/user/<username>')
def show_user_profile(username):
	# show the user profile for that user
    return 'User %s' % escape(username)
复制代码

尖括号中的为变量名,converter声明转换器类型,转换器类型有以下四种,1. string:缺省值,接受任何不包含‘/’的文本。2. int,接受正整数。3. float,接受浮点数。4. path,接受任何文本,包含‘/’。5. uuid,接受UUID字符串。

(2) 唯一url/重定向行为:

@app.route(‘/index’)@app.route(‘/index/’)不同,在@app.route(‘/index’)中,如果访问 ‘/index/’ 会出现404错误,而在@app.route(‘/index/’)中,如果访问 ‘/index’ 会自动重定向到 ‘/index/’

(3) URL构建:

url_for()函数可返回目标函数的URL,函数的第一个参数是目标函数的名称,后面接受任意个关键字参数,关键字参数对应URL中的变量,若出现未知变量,则将未知变量作为查询参数添加到URL中。

5. HTTP方法:

用route装饰器的method参数来处理不同的HTTP方法,如@app.route(‘/index’,method=[‘GET’,’POST’]),可使用request.form获取post表单的参数

6. 模板:

可以使用render_template()函数使URL函数返回一个html模板,第一个参数为模板名称,后面跟着任意个关键字参数对应模板中的变量。模板文件应保存在与应用模块同一目录下的‘template文件夹中。’jinja2模板引擎使用以下分隔符从HTML转义,{% raw %}{% ... %}{% endraw %} 用于语句,{% raw %}{{ ... }}{% endraw %} 用于表达式可以打印到模板输出,{% raw %}{# ... #}{% endraw %} 用于未包含在模板输出中的注释,# ... ## 用于行语句,详情见jinja2模板。示例如下:

脚本文件:

from flask import Flask, render_template

app = Flask(name)

@app.route('/result')

def result():

   dict = {'phy':50,'che':60,'maths':70}

   return render_template('result.html', result = dict)



if name == 'main':

   app.run(debug = True)
复制代码

html文件:

<table border = 1>
	{% for key, value in result.iteritems() %}

    <tr>
        <th> {{ key }} </th>
        <th> {{ value }} </th>
    </tr>

	{% endfor %}
</table>
复制代码

7. 静态文件:

存放在static文件夹下,url_for('static', filename = 'hello.js') 生成静态文件的url

8. request对象:

request对象的几个重要属性,Form - 它是一个字典对象,包含表单参数及其值的键和值对。args - 解析查询字符串的内容,它是问号(?)之后的URL的一部分。Cookies - 保存Cookie名称和值的字典对象。files - 与上传文件有关的数据。method - 当前请求方法。

9. Cookies:

make_response(args*):将返回值打包为一个响应对象。response.set_cookies(key,value,*args)设置cookies。cookies只能设置在响应对象上,max_age 属性设置cookies存在时间,以秒为单位。

10. 会话:

服务器为每个客户端的会话分配会话id,在使用会话前必须设置一个秘钥 app.secret_key=os.urandom(16),秘钥应当有足够的随机性。session对象也是一个字典对象,包含会话变量和关联值。设置会话变量:Session[‘uname’]=’3927’。释放会话变量:Session.pop(‘uname’,None)

11. 重定向和错误:

重定向:Flask.redirect(location, statuscode=302, response) 错误:abort(code)方法提前结束请求,用 errorhandler() 装饰器定制错误页面,

@app.errorhandler(404)
def handler(error):
    return render_template(‘404.html’,404)
复制代码

以上为一个简单示例

12. 消息闪现:

flash():用flash()方法将消息传给下一个请求,该请求通常是一个模板。flash()函数原型:flash(message, category='message'),category是消息的种类,有‘error’,‘info’,‘message’,‘warming’四种,category可传给get_flashed_messages() 函数。 get_flashed_messages():该函数通常在模板文件中,原型为get_flashed_messages(with_categories=False, category_filter=()),将 with_categories 设置为True可获取消息种类。category_filter=() 设置种类白名单,未在种类白名单中的消息将被过滤。

13. 文件上传:

可用 file.save() 函数保存客户端上传的文件,原型:save(dst, buffer_size=16384),dst:文件存储目录,buffer_size属性设置上传文件最大大小。建议用 app.config[‘UPLOAD_FOLDER’] 设定文件上传文件夹的路径,用app.config[‘MAX_CONTENT_PATH’] 设定上传文件最大大小。用 request.file 获取上传的文件,用save方法保存文件。正确路径示例:‘upload/filename’。文件名建议用 *secur_filename()*函数处理一下(若文件名中含有‘/’,客户端文件会被更改),但该函数会将中文消去。

链接:

flask官方中文文档

w3c的flask教程

Guess you like

Origin juejin.im/post/7034491415652466724