目录结构
├── main.py ├── static └── templates ├── layout.html └── show_entries.html
from werkzeug import secure_filename from flask import Flask, request, session, g, redirect, url_for, \ abort, render_template, flash,make_response app = Flask(__name__) app.config.from_object('config') #从config.py中读取配置,并更新到的全局配置,config.py中自定义的配置变量名需全部大写。 # config也可以是一个类(如果是类的话,会自动读取类中的所有属性) #app.debug = True 启动调试 app.run(host='0.0.0.0') # 发布到公网 app.config.from_envvar('FLASKR_SETTINGS', silent=True) #加载参数 @app.route('/') # def hello_world(): return "index page" @app.route('/setcookies', methods=[ 'GET','POST']) #允许GET,POST请求 def set_cookies(): if request.method == "POST": return "POST not allow" #username = request.form["username"] #获取表单中的参数 username = request.args.get('username', '') #获取url中的参数 resp = make_response(render_template('show_entries.html')) #返回一个模板对象 resp.headers['password'] = 'haha' #设置响应头 resp.set_cookie('username', username) #保存到cookies session['username'] = request.args.get('username', '') #保存到session return resp @app.route('/getcookies') def get_cookies(): return request.cookies.get('username')+'<br/>session'+session['username'] @app.route('/user/<username>') # 匹配 /user/任意字符串 def show_user_profile(username): return 'User %s' % username @app.route('/post/<int:post_id>') # 匹配 /post/任意int类型 def show_post(post_id): return 'Post %d ' % post_id @app.route('/redirect') def projects(): return redirect(url_for('hello_world')) # url_for把函数名转换成对应的url。如:url_for('hello_world') 相当于 '/' @app.errorhandler(404) #匹配不存在的URL def not_found(error): flash('wrong url') #消息闪现,想这个消息按时保存起来,闪现系统的基本工作原理是在请求结束时 记录一个消息,提供且只提供给下一个请求使用。通常通过一个布局模板来展现闪现的 消息(模板中可以直接调用get_flashed_messages函数获取暂存的消息) # 详情见:http://dormousehole.readthedocs.org/en/latest/patterns/flashing.html#message-flashing-pattern app.logger.debug('wrong url') # 将错误写入日志 app.logger.warning('A warning occurred (%d apples)', 42) app.logger.error('wrong url') resp = make_response(render_template('show_entries.html'), 404) return resp @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['the_file'] f.save('/var/www/uploads/' + secure_filename(f.filename)) #secure_filename 函数讲客户端传送的文件名合法化。 with app.test_request_context('/getcookes'): # 模拟本地发送一个url请求,一般用于测试 print url_for('hello_world') # / print url_for('get_cookies') # /getcookies print url_for('login', next='/') # /login?next=/ print url_for('profile', username='John') # /user/John if __name__ == '__main__': app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT' # 设置一个key, session 就依赖这个key app.run()