目录结构
├── 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')+'
session'+session['username']
@app.route('/user/') # 匹配 /user/任意字符串
def show_user_profile(username):
return 'User %s' % username
@app.route('/post/') # 匹配 /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()