用户工具


目录结构

├── 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()