今天读了下《学习究竟是什么》,里面提到的刻意练习让我醍醐灌顶
我平时的学习总是过于走马观花,看完一遍后就不再去刻意的回顾和练习,我决定引以为戒
今天针对之前所看的Flask内容进行刻意的回顾练习,明天再对着这些问题重新进行自问自答
1.如何写出一个最简单的Flask程序
首先是项目最开始
from flask import Flask
app=Flask(__name__)
然后需要注意路由匹配规则的写法@app.route('/index')
2.分别在Flask中使用cookie和session
简单概括就是
使用cookie:需要先response=make_response(redirect(url_for(index))),
然后response.set_cookie('name':name)
最后return response
使用session:需要先设置秘钥app.secret_ket=''
然后session['logged_in']=True
3.如何重定向回上一个页面
方法1
redirect(request.referrer)
方法2
return url_for('..',next=request.full_path)
之后想要重定向时
return redirect(request.args.get('next',url_for('hello'))
4.如何返回json数据
使用jsonify()即可
5.如何自定义过滤器、
@app.template_filter
6.如何实现局部模板
{% include '_header.html' %}
7.如何实现宏?
{% marco text(a) %}
{% endmarco %}
from marco.html import text
8.如何实现模板继承
基模板
{% block content %}
{% endblock %}
子模板
{% extends 'base.html' %}
9.如何定义WTForms
class xxx(FlaskForm):
useranme=StringField('username',validator=[DataRequired])
....
submit=SubmitField('Log in')
10.如何渲染表单
<form>
{{ form.csrt_token }}
{{ form.username.label }} {{ form.username() }}
11.如何验证表单,如何拿到数据
在客户端可以先用required来验证
在服务端使用validate_on_submit
拿数据使用username=form.username.data
12.渲染错误消息
{% for message in form.username.error %}
{{message}}
{% endfor %}
13.自定义验证器
class XXXForm(FlaskForm):
...
def validate_answer(form,field):
...
14.客户端限制文件类型
使用accept='.jpg,.png'
15.服务端创建文件上传表单
class ...form(FlaskForm):
photo=FileField('photo',validators=[FileRequired(),FileAllowed(['jpg,png'])])
16.如何限制文件上传大小
app.config['MAX_CONTENT_LENGTH']=3*1024*1024
17.如何处理文件名
(1)保持原名
(2)过滤
使用secure_filename()
(3)统一重命名random_filename()
18.如何处理文件路径
app.config['UPLOAD_PATH']=os.path.join(app.root_path,'uploads')
在保存的时候
f.save(app.config['UPLOAD_PATH'],filename)
19.如何实现多文件上传
在客户端,input标签里加上multiple
在表单里
photo=MultipleFileFields()
拿数据的时候
for f in request.files.getlist(''photo)