Flask框架适用于python语言,很好的web开发框架
一个最小的应用
这里用一个简单的网站应用来展示flask的使用方法:
# -*- encoding = UTF-8 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/user/<username>') def show_user_profile(username): return 'User %s' % username @app.route('/post/<int:post_id>') def show_post(post_id): return 'Post %d' % post_id if __name__ == '__main__': app.run(debug=True)
代码运行结果展示:
可以看到在本地端服务器已经跑起来了,同时通过浏览器访问 http://127.0.0.1:5000/会得到:
访问http://127.0.0.1:5000/ user/sunbowl 会得到:
访问http://127.0.0.1:5000/post/123 会得到:
在这个小的应用里,值得注意的是路由的使用,即@app.route()。这个路由便是之前说的装饰器,也就是说flask通过装饰器来识别用户需要访问的网址路径,并在对应的网址路径里做对应的应用。
这里的路由对应着浏览器访问的路径,如果路由的后面不加‘/’,这个便涉及到一个叫URL重定向的问题。也就是说对于 ‘/projects/’这样的。用户在访问网址的时候如果没有加上‘/’,系统会自动添加并访问,但是如果没有定义‘/’,用户访问带‘/’的便会出现错误,这样也保证了URL的唯一性。
例子:
# -*- encoding = UTF-8 from flask import Flask app = Flask(__name__) @app.route('/projects/') def projects(): return 'The project page' if __name__ == '__main__': app.run(debug=True)
运行结果展示:
没有加上‘/’的例子:
# -*- encoding = UTF-8 from flask import Flask app = Flask(__name__) @app.route('/projects') def projects(): return 'The project page' if __name__ == '__main__': app.run(debug=True)
很显然,url的地址是可以被唯一确定的
优化构造,创建URL
为什么不在初始化的时候直接赋值url呢,那还不是因为当网站越来越大的时候,url多了的情况下,单一的去一个个修改url是一件很麻烦的事情,因此可以通过创建URL的方法,在同一个地方对所有的url进行复制修改,将省很多事。
例子:
# -*- encoding = UTF-8 from flask import Flask,url_for app = Flask(__name__) @app.route('/') def index(): pass @app.route('/login') def login(): pass @app.route('/user/<username>') def profile(username): pass with app.test_request_context(): print url_for('index') print url_for('login') print url_for('login',next='/') print url_for('profile',username='sunbowl') if __name__ == '__main__': app.run(debug=True)
HTTP方法
主要使用的是GET和POST。GET的意思就是说浏览器向服务器说,我只需要数据,你把数据发给我就行了。POST的意思就是说浏览器想要在URL上发数据,便会请求服务器,服务器必须确保数据已储存并且只储存一次。
此外还有HEAD、PUT、DELETE\OPTION
例子:
# -*- encoding = UTF-8 from flask import Flask, request app = Flask(__name__) @app.route('/login/', methods=['GET', 'POST']) def login(): if request.method == 'POST': return 'post' else: return 'get' if __name__ == '__main__': app.run(debug=True)
运行情况:
明显是请求数据,所以返回的是get