10 File Uploads

案例: <form action="/upload" method="post"> 上传<input name='uploadfile' type="file"> <Br/> <input type="submit" value="Submit" /> </form>

@app.route('/upload',methods=['GET','POST']) def upload(): if request.method == 'POST': f = request.files['uploadfile'] f.save('test') return 'uploaded' else: return render_template('upload.html')

报错:
flask.debughelpers.DebugFilesKeyError:
原因:
默认"application/x-www-form-urlencoded" ,不传输文件内容
方案:
form 中添加enctype="multipart/form-data"

### 11 Cookies
在response中设置cookie
@app.route('/')

@app.route('/index',methods=['GET','POST']) def index(): user = '' if request.method == 'POST': user = request.form['user'] return render_template('index.html',user=user) else: resp = make_response(render_template('index.html',user=user)) resp.set_cookie('key','value') #设置cookie return resp

@app.route('/login') def login(): print(request.cookies.get('key')) #获取cookie return render_template('login.html')

12 Redirects and Errors

redirect: 将用户请求redirect 到another endpoint abort: abort请求,返回一个错误代码

@app.route('/') @app.route('/index',methods=['GET','POST']) def index(): user = '' if request.method == 'POST': user = request.form['user'] return render_template('index.html',user=user) else:
return redirect(url_for('login')) # 重定向,直接指向abort(401)

@app.route('/login') def login(): abort(401) #放弃请求,返回401 错误 print('key')

定制error 网页: 使用errorhandler() 装饰函数 @app.errorhandler(404) def page_not_found(error): return render_template('page_not_found.html'),404 #注意404,否则默认返回200